-#define WRAPPER_SETUP(f) \
- __asm__ volatile ( \
- ".globl " REAL_NAME(f) "_wrapper\n" \
- REAL_NAME(f) "_wrapper:\n" \
- "\tmovl %%esp,80(%%ebx)\n" \
- "\tmovl 100(%%ebx),%%esp\n" \
- "\tmovl %%eax,%0\n" \
- "\tincl _SP_stack_ptr\n" \
- "\tmovl _SP_stack_ptr,%%eax\n" \
- "\tmovl %%esp,_SP_stack(,%%eax,4)\n" \
- "\tsubl $64,%%esp" \
- : "=r" (args)); \
- SaveAllStgContext();
-
-#define WRAPPER_RETURN(x) \
- do {P_ foo; \
- RestoreAllStgRegs(); \
- if(x) JMP_(EnterNodeCode); /* never used? */ \
- __asm__ volatile ( \
- "movl %1,%0\n" \
- "\tmovl %0,_MainRegTable+100" \
- : "=r" (foo) : "m" (SP_stack[SP_stack_ptr--]) ); \
- __asm__ volatile ( \
- "movl 80(%ebx),%esp\n" \
- "\tjmp *104(%ebx)" ); \
- } while(0);