avr-gcc currenly emits EICALL/EIJMP instructions without caring for EIND, e.g. avr.md:3630:

(define_insn "call_insn"
  [...]
  ""
  "@
    %!icall
    %~call %x0
    %!ijmp
    %~jmp %x0"
    ...)

where %! resolves to 'e' for targets with > 128k of flash.

IMO that is not okay because the compiler does not care for EIND and even if he (or the user) did that approch is it not IRQ-save.

Instead, programs for big targets should use linker relaxation and jump to the generated jumping pad by means of IJMP/ICALL instead.

Thoughts?

Johann


_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to