m32c-elf, gcc.dg/torture/stackalign/nested-1 at -O0,
produces this code:

_bar.1229:
        enter   #0
        pushm   r1,r2,r3,a0,a1
        ; end of prologue
        mov.l   a0,r3r1
        add.l   #-66,sp
        stc     sp,a1
. . .
        ldc     a1,sp
        ; start of epilogue
        popm    r1,r2,r3,a0,a1
        exitd

Note that the $sp restored just before the epilogue is NOT the value
of $sp at the end of the prologue, so the wrong registers get popped.
(the exitd works because it uses the frame pointer).
EXIT_IGNORE_STACK is set to 0.

Is this expected behavior?  Do I need to do some magic in my epilogue
to further "fix" the stack pointer?

Note: the add.l is not part of the prologue; the "end of prologue"
comment is a volatile unspec; the pushm is the last thing emitted by
the prolog function.  The '#0' on the enter is the stack adjustment
the prologue does.

Reply via email to