diff options
Diffstat (limited to 'gc/mips_sgi_mach_dep.S')
-rw-r--r-- | gc/mips_sgi_mach_dep.S | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gc/mips_sgi_mach_dep.S b/gc/mips_sgi_mach_dep.S new file mode 100644 index 0000000..bae9b5e --- /dev/null +++ b/gc/mips_sgi_mach_dep.S @@ -0,0 +1,41 @@ +#include <sys/regdef.h> +#include <sys/asm.h> + +# define call_push(x) move $4,x; jal GC_push_one + + .option pic2 + .text +/* Mark from machine registers that are saved by C compiler */ +# define FRAMESZ 32 +# define RAOFF FRAMESZ-SZREG +# define GPOFF FRAMESZ-(2*SZREG) + NESTED(GC_push_regs, FRAMESZ, ra) + .mask 0x80000000,-SZREG # inform debugger of saved ra loc + move t0,gp + SETUP_GPX(t8) + PTR_SUBU sp,FRAMESZ +# ifdef SETUP_GP64 + SETUP_GP64(GPOFF, GC_push_regs) +# endif + SAVE_GP(GPOFF) + REG_S ra,RAOFF(sp) +# if (_MIPS_SIM == _MIPS_SIM_ABI32) + call_push($2) + call_push($3) +# endif + call_push($16) + call_push($17) + call_push($18) + call_push($19) + call_push($20) + call_push($21) + call_push($22) + call_push($23) + call_push($30) + REG_L ra,RAOFF(sp) +# ifdef RESTORE_GP64 + RESTORE_GP64 +# endif + PTR_ADDU sp,FRAMESZ + j ra + .end GC_push_regs |