Hi!
Good idea. But it has some limitations one needs to keep in mind:
1) you cannot pass parameters this way, or you need to create a separate
inline function for each case
2) you cannot rely on the normal calling conventions. The compiler will not
recognize this as a function
call and therefore will not assume R12..R15 clobbered and perhaps will do some
optimizations that
are not expected.
However, if your assembly function preserves all registers, does not return
anything and does not
take parameters, it will work perfectly.
If you want parameters or return values, you can extend the inline wrapper and
tell the
compiler about clobbered registers, registers to put parameters in and where to
put the result.
JMGross.
----- Ursprüngliche Nachricht -----
Von: Mathias K.
An: Peter Bigot
Gesendet am: 08 Sep 2011 19:30:18
Hello,
i have done a little workaround for this and it works like expected.
Regards,
Mathias
---------------
/* our external assembly function with reta return call */
__asm("\n\
.global _msp430x_asm_function \n\
_msp430x_asm_function: \n\
reta \n\
");
extern void _msp430x_asm_function(void * param);
/* our calla wrapper for all c functions */
static inline void msp430x_asm_function(void * param)
{
__asm("calla #_msp430x_asm_function");
}
int main()
{
void * param = 0x1234;
msp430x_asm_function(param);
while(1);
return 0;
}
------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
Learn about the latest advances in developing for the
BlackBerry® mobile platform with sessions, labs & more.
See new tools and technologies. Register for BlackBerry® DevCon today!
http://p.sf.net/sfu/rim-devcon-copy1
_______________________________________________
Mspgcc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users