1*c9945492SAndroid Build Coastguard Worker .global _longjmp 2*c9945492SAndroid Build Coastguard Worker .global longjmp 3*c9945492SAndroid Build Coastguard Worker .type _longjmp,@function 4*c9945492SAndroid Build Coastguard Worker .type longjmp,@function 5*c9945492SAndroid Build Coastguard Worker_longjmp: 6*c9945492SAndroid Build Coastguard Workerlongjmp: 7*c9945492SAndroid Build Coastguard Worker /* 8*c9945492SAndroid Build Coastguard Worker * void longjmp(jmp_buf env, int val); 9*c9945492SAndroid Build Coastguard Worker * put val into return register and restore the env saved in setjmp 10*c9945492SAndroid Build Coastguard Worker * if val(r4) is 0, put 1 there. 11*c9945492SAndroid Build Coastguard Worker */ 12*c9945492SAndroid Build Coastguard Worker /* 0) move old return address into r0 */ 13*c9945492SAndroid Build Coastguard Worker lwz 0, 0(3) 14*c9945492SAndroid Build Coastguard Worker /* 1) put it into link reg */ 15*c9945492SAndroid Build Coastguard Worker mtlr 0 16*c9945492SAndroid Build Coastguard Worker /* 2 ) restore stack ptr */ 17*c9945492SAndroid Build Coastguard Worker lwz 1, 4(3) 18*c9945492SAndroid Build Coastguard Worker /* 3) restore control reg */ 19*c9945492SAndroid Build Coastguard Worker lwz 0, 8(3) 20*c9945492SAndroid Build Coastguard Worker mtcr 0 21*c9945492SAndroid Build Coastguard Worker /* 4) restore r14-r31 */ 22*c9945492SAndroid Build Coastguard Worker lwz 14, 12(3) 23*c9945492SAndroid Build Coastguard Worker lwz 15, 16(3) 24*c9945492SAndroid Build Coastguard Worker lwz 16, 20(3) 25*c9945492SAndroid Build Coastguard Worker lwz 17, 24(3) 26*c9945492SAndroid Build Coastguard Worker lwz 18, 28(3) 27*c9945492SAndroid Build Coastguard Worker lwz 19, 32(3) 28*c9945492SAndroid Build Coastguard Worker lwz 20, 36(3) 29*c9945492SAndroid Build Coastguard Worker lwz 21, 40(3) 30*c9945492SAndroid Build Coastguard Worker lwz 22, 44(3) 31*c9945492SAndroid Build Coastguard Worker lwz 23, 48(3) 32*c9945492SAndroid Build Coastguard Worker lwz 24, 52(3) 33*c9945492SAndroid Build Coastguard Worker lwz 25, 56(3) 34*c9945492SAndroid Build Coastguard Worker lwz 26, 60(3) 35*c9945492SAndroid Build Coastguard Worker lwz 27, 64(3) 36*c9945492SAndroid Build Coastguard Worker lwz 28, 68(3) 37*c9945492SAndroid Build Coastguard Worker lwz 29, 72(3) 38*c9945492SAndroid Build Coastguard Worker lwz 30, 76(3) 39*c9945492SAndroid Build Coastguard Worker lwz 31, 80(3) 40*c9945492SAndroid Build Coastguard Worker#if defined(_SOFT_FLOAT) || defined(__NO_FPRS__) 41*c9945492SAndroid Build Coastguard Worker mflr 0 42*c9945492SAndroid Build Coastguard Worker bl 1f 43*c9945492SAndroid Build Coastguard Worker .hidden __hwcap 44*c9945492SAndroid Build Coastguard Worker .long __hwcap-. 45*c9945492SAndroid Build Coastguard Worker1: mflr 6 46*c9945492SAndroid Build Coastguard Worker lwz 5, 0(6) 47*c9945492SAndroid Build Coastguard Worker lwzx 6, 6, 5 48*c9945492SAndroid Build Coastguard Worker andis. 6, 6, 0x80 49*c9945492SAndroid Build Coastguard Worker beq 1f 50*c9945492SAndroid Build Coastguard Worker .long 0x11c35b01 /* evldd 14,88(3) */ 51*c9945492SAndroid Build Coastguard Worker .long 0x11e36301 /* ... */ 52*c9945492SAndroid Build Coastguard Worker .long 0x12036b01 53*c9945492SAndroid Build Coastguard Worker .long 0x12237301 54*c9945492SAndroid Build Coastguard Worker .long 0x12437b01 55*c9945492SAndroid Build Coastguard Worker .long 0x12638301 56*c9945492SAndroid Build Coastguard Worker .long 0x12838b01 57*c9945492SAndroid Build Coastguard Worker .long 0x12a39301 58*c9945492SAndroid Build Coastguard Worker .long 0x12c39b01 59*c9945492SAndroid Build Coastguard Worker .long 0x12e3a301 60*c9945492SAndroid Build Coastguard Worker .long 0x1303ab01 61*c9945492SAndroid Build Coastguard Worker .long 0x1323b301 62*c9945492SAndroid Build Coastguard Worker .long 0x1343bb01 63*c9945492SAndroid Build Coastguard Worker .long 0x1363c301 64*c9945492SAndroid Build Coastguard Worker .long 0x1383cb01 65*c9945492SAndroid Build Coastguard Worker .long 0x13a3d301 66*c9945492SAndroid Build Coastguard Worker .long 0x13c3db01 67*c9945492SAndroid Build Coastguard Worker .long 0x13e3e301 /* evldd 31,224(3) */ 68*c9945492SAndroid Build Coastguard Worker .long 0x11a3eb01 /* evldd 13,232(3) */ 69*c9945492SAndroid Build Coastguard Worker1: mtlr 0 70*c9945492SAndroid Build Coastguard Worker#else 71*c9945492SAndroid Build Coastguard Worker lfd 14,88(3) 72*c9945492SAndroid Build Coastguard Worker lfd 15,96(3) 73*c9945492SAndroid Build Coastguard Worker lfd 16,104(3) 74*c9945492SAndroid Build Coastguard Worker lfd 17,112(3) 75*c9945492SAndroid Build Coastguard Worker lfd 18,120(3) 76*c9945492SAndroid Build Coastguard Worker lfd 19,128(3) 77*c9945492SAndroid Build Coastguard Worker lfd 20,136(3) 78*c9945492SAndroid Build Coastguard Worker lfd 21,144(3) 79*c9945492SAndroid Build Coastguard Worker lfd 22,152(3) 80*c9945492SAndroid Build Coastguard Worker lfd 23,160(3) 81*c9945492SAndroid Build Coastguard Worker lfd 24,168(3) 82*c9945492SAndroid Build Coastguard Worker lfd 25,176(3) 83*c9945492SAndroid Build Coastguard Worker lfd 26,184(3) 84*c9945492SAndroid Build Coastguard Worker lfd 27,192(3) 85*c9945492SAndroid Build Coastguard Worker lfd 28,200(3) 86*c9945492SAndroid Build Coastguard Worker lfd 29,208(3) 87*c9945492SAndroid Build Coastguard Worker lfd 30,216(3) 88*c9945492SAndroid Build Coastguard Worker lfd 31,224(3) 89*c9945492SAndroid Build Coastguard Worker#endif 90*c9945492SAndroid Build Coastguard Worker /* 5) put val into return reg r3 */ 91*c9945492SAndroid Build Coastguard Worker mr 3, 4 92*c9945492SAndroid Build Coastguard Worker 93*c9945492SAndroid Build Coastguard Worker /* 6) check if return value is 0, make it 1 in that case */ 94*c9945492SAndroid Build Coastguard Worker cmpwi cr7, 4, 0 95*c9945492SAndroid Build Coastguard Worker bne cr7, 1f 96*c9945492SAndroid Build Coastguard Worker li 3, 1 97*c9945492SAndroid Build Coastguard Worker1: 98*c9945492SAndroid Build Coastguard Worker blr 99*c9945492SAndroid Build Coastguard Worker 100