amiga-ixemul/stack/glue.c

96 lines
1.7 KiB
C

#include "a4.h" /* for the A4 macro */
/*
* Special glue that doesn't clobber any registers.
*/
#ifndef __PPC__
asm(" \n\
.globl ___stkovf \n\
___stkovf: \n\
movel "A4(_ixemulbase)",sp@- \n\
addl #-6*481-24,sp@ \n\
rts \n\
\n\
.globl ___stkext \n\
___stkext: \n\
movel "A4(_ixemulbase)",sp@- \n\
addl #-6*482-24,sp@ \n\
rts \n\
\n\
.globl ___stkext_f \n\
___stkext_f: \n\
movel "A4(_ixemulbase)",sp@- \n\
addl #-6*483-24,sp@ \n\
rts \n\
\n\
.globl ___stkrst \n\
___stkrst: \n\
movel "A4(_ixemulbase)",sp@- \n\
addl #-6*484-24,sp@ \n\
rts \n\
\n\
.globl ___stkext_startup \n\
___stkext_startup: \n\
movel "A4(_ixemulbase)",sp@- \n\
addl #-6*571-24,sp@ \n\
rts \n\
");
#else
#if defined(BASEREL)
# define LDVAR(reg, var) "lwz "#reg","#var"@sdarel(13)"
#elif defined(LBASEREL)
# define LDVAR(reg, var) "addis "#reg",13,"#var"@drelha; lwz "#reg","#var"@drell("#reg")"
#else
# define LDVAR(reg, var) "lis "#reg","#var"@ha; lwz "#reg","#var"@l("#reg")"
#endif
asm("
.section \".text\"
.align 2
"/* .globl __stkovf
.type __stkovf,@function
__stkovf:
"LDVAR(12,_ixbasearray)"
lwz 12,481*4-4(12)
mtctr 12
bctr
*/"
.globl __stkext
.type __stkext,@function
__stkext:
"LDVAR(12,_ixbasearray)"
lwz 12,482*4-4(12)
mtctr 12
bctr
.globl __stkext_f
.type __stkext_f,@function
__stkext_f:
mflr 0
"LDVAR(12,_ixbasearray)"
lwz 12,483*4-4(12)
mtlr 12
stw 0,4(1)
blr
"/*
.globl __stkrst
.type, __stkrst,@function
__stkrst:
"LDVAR(12,_ixbasearray)"
lwz 12,484*4-4(12)
mtctr 12
bctr
*/"
.globl __stkext_startup
.type __stkext_startup,@function
__stkext_startup:
"LDVAR(12,_ixbasearray)"
lwz 12,571*4-4(12)
mtctr 12
bctr
");
#endif