On Sat, Mar 19, 2005 at 06:37:54PM -0500, Paul Schlie wrote:
> - or possibly GCC may try to be clever by jumping to no-return attribute
> function calls?
Such "trying to be clever" would most likely be optional.
Again, why is indirect_jump _mandatory_ on all machines?
Please, don't try to be too clever :) - just look at the GCC source
and try to figure out exactly what is indirect_jump used for, and how
much of this (if anything) matters for the AVR port.
If the address of a label is loaded into a register, then we have to
switch to a different section around that label:
/* ... */
jmp label
.section .text_low,"ax",@progbits
label:
jmp 1f
.text
1:
/* ... */
then it will be safe to load the address of the label into a register,
no need to do anything with the highest bits as pm_hh8(label) == 0:
ldi r30,pm_lo8(label)
ldi r31,pm_hi8(label)
/* ... */
ijmp ; PC <- 0:r31:r30
Note that this adds two jumps around the label, so we only want to
do it infrequently - if the address of the label is loaded into
a register (not if the only users of the label are direct jumps).
Thanks,
Marek