96 lines
1.7 KiB
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
|