AVR indirect_jump addresses limited to 16 bits
Paul Schlie
schlie@comcast.net
Sun Mar 20 01:52:00 GMT 2005
> From: Marek Michalkiewicz <marekm@amelek.gda.pl>
> Good question - I can't. On the other hand, the manual says:
>
> `indirect_jump'
> An instruction to jump to an address which is operand zero. *This pattern
> name is mandatory on all machines.*
>
> Why would it be mandatory if it was not truly needed? If the manual is
> correct, it seems this pattern is truly needed (not just an optional
> optimization like some other patterns).
>
> If it is impossible on the AVR, it could be implemented with invalid
> assembler output (so we get an error if "impossible" ever happens).
> But I'd like to be sure if this is really the case. GCC is not only
> a C compiler, perhaps indirect_jump is needed for some other language?
- I believe it's simply a vehicle to allow the target describe how to
jump indirectly to an address which may be required if the compiler
chooses to generate a static jump table mapped into presumably the
program's "text" section, therefore would guess the right thing to do
would be to (assuming operand-0 is a progmem reference) load from
progmem 2-words for 256K devices (or 1 word otherwise) into the
appropriate registers, then executes an extended jump instruction
(or regular jump otherwise).
(as I'd hope the compiler would never map static jump tables that it
chooses to generate into the "data" section, but can't find any
description of under what circumstances it may generate/put them?)
(again, just my guess)
More information about the Gcc
mailing list