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 |