File: mips_sgi_mach_dep.s

package info (click to toggle)
sigscheme 0.9.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 8,660 kB
  • sloc: lisp: 37,498; ansic: 31,109; sh: 4,368; makefile: 744; asm: 333; ruby: 290
file content (46 lines) | stat: -rw-r--r-- 1,287 bytes parent folder | download | duplicates (18)
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