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
| | #define REG_SIZE 8
/*
* int setjmp(jmpbuf env)
* Save the user context to $r0 (jmpbuf)
* jmpbuf layout:
* [0] = $ra, $sp, $cs, $r14,
* [4] = $r20, $r21, $r22, $r23,
* [8] = $r24, $r25, $r26, $r27,
* [12] = $r28, $r29, $r30, $r31,
* [16] = $r18, $r19,
* [18] = $lc, $le, $ls, xxxx
*/
.global ___setjmp
.hidden ___setjmp
.global __setjmp
.global _setjmp
.global setjmp
.type __setjmp,@function
.type _setjmp,@function
.type setjmp,@function
___setjmp:
__setjmp:
_setjmp:
setjmp:
sq (16 * REG_SIZE)[$r0] = $r18r19
get $r40 = $ra
copyd $r41 = $sp
;;
so (4 * REG_SIZE)[$r0] = $r20r21r22r23
get $r42 = $cs
copyd $r43 = $r14
;;
so (0 * REG_SIZE)[$r0] = $r40r41r42r43
get $r40 = $lc
;;
so (8 * REG_SIZE)[$r0] = $r24r25r26r27
get $r41 = $le
;;
so (12 * REG_SIZE)[$r0] = $r28r29r30r31
get $r42 = $ls
;;
so (18 * REG_SIZE)[$r0] = $r40r41r42r43
make $r0 = 0
ret
;;
|