OLD | NEW |
| (Empty) |
1 .global _longjmp | |
2 .global longjmp | |
3 .type _longjmp,@function | |
4 .type longjmp,@function | |
5 _longjmp: | |
6 longjmp: | |
7 # void longjmp(jmp_buf env, int val); | |
8 # put val into return register and restore the env saved in setjmp | |
9 # if val(r4) is 0, put 1 there. | |
10 # 0) move old return address into r0 | |
11 lwz 0, 0(3) | |
12 # 1) put it into link reg | |
13 mtlr 0 | |
14 #2 ) restore stack ptr | |
15 lwz 1, 4(3) | |
16 #3) restore control reg | |
17 lwz 0, 8(3) | |
18 mtcr 0 | |
19 #4) restore r14-r31 | |
20 lwz 14, 12(3) | |
21 lwz 15, 16(3) | |
22 lwz 16, 20(3) | |
23 lwz 17, 24(3) | |
24 lwz 18, 28(3) | |
25 lwz 19, 32(3) | |
26 lwz 20, 36(3) | |
27 lwz 21, 40(3) | |
28 lwz 22, 44(3) | |
29 lwz 23, 48(3) | |
30 lwz 24, 52(3) | |
31 lwz 25, 56(3) | |
32 lwz 26, 60(3) | |
33 lwz 27, 64(3) | |
34 lwz 28, 68(3) | |
35 lwz 29, 72(3) | |
36 lwz 30, 76(3) | |
37 lwz 31, 80(3) | |
38 lfd 14,88(3) | |
39 lfd 15,96(3) | |
40 lfd 16,104(3) | |
41 lfd 17,112(3) | |
42 lfd 18,120(3) | |
43 lfd 19,128(3) | |
44 lfd 20,136(3) | |
45 lfd 21,144(3) | |
46 lfd 22,152(3) | |
47 lfd 23,160(3) | |
48 lfd 24,168(3) | |
49 lfd 25,176(3) | |
50 lfd 26,184(3) | |
51 lfd 27,192(3) | |
52 lfd 28,200(3) | |
53 lfd 29,208(3) | |
54 lfd 30,216(3) | |
55 lfd 31,224(3) | |
56 #5) put val into return reg r3 | |
57 mr 3, 4 | |
58 | |
59 #6) check if return value is 0, make it 1 in that case | |
60 cmpwi cr7, 4, 0 | |
61 bne cr7, 1f | |
62 li 3, 1 | |
63 1: | |
64 blr | |
65 | |
OLD | NEW |