Reply by jack...@motec.com.au●March 8, 20062006-03-08
Hi,
I have a couple of questions about inline assembler and inline functions in
the 56800E compiler under CW5.6
Question 1:
Is there anyway to use members of a C struct in the assembler code?
I can use local or static variables in assembler functions eg.
int32 myVar;
asm {
move.l myVar,A
}
but is there a way to use a pointer to a struct to access struct elements in
inline assembler, without having to hard code the offsets of elements? I
don't want to have to change the assembler every time the struct is
changed.
Question 2:
The following example function works correctly, loading a return value into Y0
and returning.
ctUINT16 MyFunc (ctUINT32 myInt32) {
asm{
LSRR.L #2,A
MOVE.W A1,Y0 //Load return value into Y0
}
}
ctUINT16 MyFunc2(void) {
return MyFunc(1234);
}
This compiles to:
subroutine "FMyFunc"
lsrr.l #<2,A
move.w A1,Y0
rts
subroutine "FMyFunc2"
move.l #1234,A
jsr >FMyFunc
rts
Unfortunately this does NOT work when I make MyFunc an inline function:
ctUINT16 MyFunc (ctUINT32 myInt32) {
asm{
LSRR.L #2,A
MOVE.W A1,Y0 //Load return value into Y0
}
}
ctUINT16 MyFunc2(void) {
return MyFunc(1234);
}
This compiles to:
subroutine "FMyFunc2"
lsrr.l #<2,A
move.w A1,Y0
move.w B1,Y0
rts
which is totally wrong. Is there a way to inline a function containing inline
assambler?