We are using the nested assembly function prolog/epilog for entry/exit for C code compatibility as described in EE241
We found a problem with the nested C calls where one assembly function calls another function with:
CALL <function>; q[j27+0X4]=j27:24; q[k27+0X4]=k27:24;;
clobbers values on the stack.
using code in EE241, prior to the call the stack is:
of course, when the function called is, q[j27+0X4]=j27:24 is going to clobber the contents of sp+4
our work-around was to offset the saved registers by 4 (i.e. sp+8: r27:24)
that's OK unless you push variables to the stack with q[j27-=4] = reg, then the last var to the stack gets clobbered.
It seems a better solution would be to call the subroutine with post-modify:
CALL <function>; q[j27 += -4] = j27:24; q[k27 += -4] = k27:24;;
I've noticed that compiler generated function calls use the pre-modify instruction (q[j27+0X4]=j27:24 ...). Not sure why this is preferred. In case of interrupts?
Has anyone else encountered this?