forked from uim/libgcroots
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mips_sgi_mach_dep.s
46 lines (44 loc) · 1.26 KB
/
mips_sgi_mach_dep.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <sys/regdef.h>
#include <sys/asm.h>
/* This file must be preprocessed. But the SGI assembler always does */
/* that. Furthermore, a generic preprocessor won't do, since some of */
/* the SGI-supplied include files rely on behavior of the MIPS */
/* assembler. Hence we treat and name this file as though it required */
/* no preprocessing. */
# define call_push(x) move $4,x; jal GCROOTS_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(GCROOTS_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, GCROOTS_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 GCROOTS_push_regs