This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: AVR indirect_jump addresses limited to 16 bits
- From: Paul Schlie <schlie at comcast dot net>
- To: Marek Michalkiewicz <marekm at amelek dot gda dot pl>
- Cc: <gcc at gcc dot gnu dot org>
- Date: Sat, 19 Mar 2005 18:14:41 -0500
- Subject: Re: AVR indirect_jump addresses limited to 16 bits
> 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)