use USER_CPPFLAGS
[AROS.git] / arch / m68k-all / exec / newstackswap.S
blob2dd311c97514ea9b2f27451356ca220679327f24
1 /*
2     Copyright © 1995-2014, The AROS Development Team. All rights reserved.
3     $Id$
5     Desc: NewStackSwap() - Call a function with swapped stack.
6     Lang: english
7 */
9         #include "aros/m68k/asm.h"
11         .text
12         .balign 4
13         .globl  AROS_SLIB_ENTRY(NewStackSwap,Exec,134)
14 AROS_SLIB_ENTRY(NewStackSwap,Exec,134):
16     /* Stackswap will clobber %d0, %d1, %a0, and %a1,
17      * so we need to save %a0/%a1 in %a3/%a4
18      */
19     movem.l     %a3/%a4,%sp@-
20     move.l      %a0,%a3
21     move.l      %a1,%a4
23     jsr         %a6@(StackSwap)
25     move.l      %a2,%d1
26     beq.b       nopushargs
27     move.l      %a2@(7*4),%sp@- // Put the C arguments on the stack
28     move.l      %a2@(6*4),%sp@-
29     move.l      %a2@(5*4),%sp@-
30     move.l      %a2@(4*4),%sp@-
31     move.l      %a2@(3*4),%sp@-
32     move.l      %a2@(2*4),%sp@-
33     move.l      %a2@(1*4),%sp@-
34     move.l      %a2@(0*4),%sp@-
36 nopushargs:
37     jsr         %a4@            // Call the C function
39     move.l      %a2,%d1
40     beq.b       nopopargs
42     lea.l       %sp@(8*4),%sp   // Remove the C arguments
44 nopopargs:
45     move.l      %d0,%a4         // save C function returncode
46     move.l      %a3,%a0
47     jsr         %a6@(StackSwap)
48     move.l      %a4,%d0
50     /* Now we can restore %a3/%a4
51      */
52     movem.l     %sp@+,%a3/%a4
53     rts