setjmp.s
1.69 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
=============================================================================
Copyright (C) 1997-1999 NINTENDO Co.,Ltd.
$RCSfile: setjmp.s,v $
$Revision: 1.1.1.1 $
$Date: 2002/10/30 02:07:09 $
=============================================================================
関数名:setjmp
-----------------------------------------------------------------------------
書式: #include <setjmp.h>
int setjmp(jmp_buf env);
引数: env スタック環境バッファ
戻り値:登録時は0。longjmp関数から戻るときは longjmp関数の引数 valueの値
説明: longjmp関数で戻るためのスタック環境を保存する。
=============================================================================
関数名:longjmp
-----------------------------------------------------------------------------
書式: #include <setjmp.h>
void longjmp(jmp_buf env, int value);
引数: env スタック環境バッファ
value setjmp関数の帰り値(0を指定すると1になる)
戻り値:なし
説明: setjmp関数で登録された関数に戻る
引数 value が setjmp関数の帰り値になる
-----------------------------------------------------------------------------
*/
.text
.set reorder
.align 4
.ent setjmp
.globl setjmp
setjmp:
sw $16,0x00($4)
sw $17,0x04($4)
sw $18,0x08($4)
sw $19,0x0c($4)
sw $20,0x10($4)
sw $21,0x14($4)
sw $22,0x18($4)
sw $23,0x1c($4)
sw $29,0x20($4)
sw $30,0x24($4)
sw $31,0x28($4)
move $2,$0
jr $31
.end setjmp
.text
.set reorder
.align 4
.ent longjmp
.globl longjmp
longjmp:
lw $16,0x00($4)
lw $17,0x04($4)
lw $18,0x08($4)
lw $19,0x0c($4)
lw $20,0x10($4)
lw $21,0x14($4)
lw $22,0x18($4)
lw $23,0x1c($4)
lw $29,0x20($4)
lw $30,0x24($4)
lw $31,0x28($4)
move $2,$5
bne $2,$0,.ZERO
li $2,1
.ZERO:
jr $31
.end longjmp