Heiko Panther:
it turns out that this should be a bug in the compiler as well as in
the gdb sim target.
Since CALL decrements the stack pointer to save the return address,
a register indexed call using the stack pointer must account for
this. The SP is decremented before the address of the target operand
is calculated; thus, for a SP indexed call, the index must be
incremented by 2.
According slau049d not. (page 3-29)
"
Syntax CALL dst
Operation dst -> tmp dst is
evaluated and stored // BEFORE SP modify !
SP-2 -> SP
"
Well... you are right, that's what on top of the page. At the bottom,
it says:
SP-2 -> SP, PC+2 -> @SP, X(R5) -> PC
which is at least confusing, and at worst contradictory.
Where is bug? in GCC, in hardware? No. It is in TI docs ;-)
Try it on hardware though, and you'll find the device behaves like
described on the bottom.
Yes , MSP430F1232 work as you described.
Try you this code in other compilers or gcc versions?
Albert