1570af302Sopenharmony_ci .global __setjmp 2570af302Sopenharmony_ci .global _setjmp 3570af302Sopenharmony_ci .global setjmp 4570af302Sopenharmony_ci .type __setjmp,@function 5570af302Sopenharmony_ci .type _setjmp,@function 6570af302Sopenharmony_ci .type setjmp,@function 7570af302Sopenharmony_ci__setjmp: 8570af302Sopenharmony_ci_setjmp: 9570af302Sopenharmony_cisetjmp: 10570af302Sopenharmony_ci ld 5, 24(1) # load from the TOC slot in the caller's stack frame 11570af302Sopenharmony_ci b __setjmp_toc 12570af302Sopenharmony_ci 13570af302Sopenharmony_ci .localentry __setjmp,.-__setjmp 14570af302Sopenharmony_ci .localentry _setjmp,.-_setjmp 15570af302Sopenharmony_ci .localentry setjmp,.-setjmp 16570af302Sopenharmony_ci mr 5, 2 17570af302Sopenharmony_ci 18570af302Sopenharmony_ci .global __setjmp_toc 19570af302Sopenharmony_ci .hidden __setjmp_toc 20570af302Sopenharmony_ci # same as normal setjmp, except TOC pointer to save is provided in r5. 21570af302Sopenharmony_ci # r4 would normally be the 2nd parameter, but we're using r5 to simplify calling from sigsetjmp. 22570af302Sopenharmony_ci # solves the problem of knowing whether to save the TOC pointer from r2 or the caller's stack frame. 23570af302Sopenharmony_ci__setjmp_toc: 24570af302Sopenharmony_ci # 0) store IP into 0, then into the jmpbuf pointed to by r3 (first arg) 25570af302Sopenharmony_ci mflr 0 26570af302Sopenharmony_ci std 0, 0*8(3) 27570af302Sopenharmony_ci # 1) store cr 28570af302Sopenharmony_ci mfcr 0 29570af302Sopenharmony_ci std 0, 1*8(3) 30570af302Sopenharmony_ci # 2) store SP and TOC 31570af302Sopenharmony_ci std 1, 2*8(3) 32570af302Sopenharmony_ci std 5, 3*8(3) 33570af302Sopenharmony_ci # 3) store r14-31 34570af302Sopenharmony_ci std 14, 4*8(3) 35570af302Sopenharmony_ci std 15, 5*8(3) 36570af302Sopenharmony_ci std 16, 6*8(3) 37570af302Sopenharmony_ci std 17, 7*8(3) 38570af302Sopenharmony_ci std 18, 8*8(3) 39570af302Sopenharmony_ci std 19, 9*8(3) 40570af302Sopenharmony_ci std 20, 10*8(3) 41570af302Sopenharmony_ci std 21, 11*8(3) 42570af302Sopenharmony_ci std 22, 12*8(3) 43570af302Sopenharmony_ci std 23, 13*8(3) 44570af302Sopenharmony_ci std 24, 14*8(3) 45570af302Sopenharmony_ci std 25, 15*8(3) 46570af302Sopenharmony_ci std 26, 16*8(3) 47570af302Sopenharmony_ci std 27, 17*8(3) 48570af302Sopenharmony_ci std 28, 18*8(3) 49570af302Sopenharmony_ci std 29, 19*8(3) 50570af302Sopenharmony_ci std 30, 20*8(3) 51570af302Sopenharmony_ci std 31, 21*8(3) 52570af302Sopenharmony_ci # 4) store floating point registers f14-f31 53570af302Sopenharmony_ci stfd 14, 22*8(3) 54570af302Sopenharmony_ci stfd 15, 23*8(3) 55570af302Sopenharmony_ci stfd 16, 24*8(3) 56570af302Sopenharmony_ci stfd 17, 25*8(3) 57570af302Sopenharmony_ci stfd 18, 26*8(3) 58570af302Sopenharmony_ci stfd 19, 27*8(3) 59570af302Sopenharmony_ci stfd 20, 28*8(3) 60570af302Sopenharmony_ci stfd 21, 29*8(3) 61570af302Sopenharmony_ci stfd 22, 30*8(3) 62570af302Sopenharmony_ci stfd 23, 31*8(3) 63570af302Sopenharmony_ci stfd 24, 32*8(3) 64570af302Sopenharmony_ci stfd 25, 33*8(3) 65570af302Sopenharmony_ci stfd 26, 34*8(3) 66570af302Sopenharmony_ci stfd 27, 35*8(3) 67570af302Sopenharmony_ci stfd 28, 36*8(3) 68570af302Sopenharmony_ci stfd 29, 37*8(3) 69570af302Sopenharmony_ci stfd 30, 38*8(3) 70570af302Sopenharmony_ci stfd 31, 39*8(3) 71570af302Sopenharmony_ci 72570af302Sopenharmony_ci # 5) store vector registers v20-v31 73570af302Sopenharmony_ci addi 3, 3, 40*8 74570af302Sopenharmony_ci stvx 20, 0, 3 ; addi 3, 3, 16 75570af302Sopenharmony_ci stvx 21, 0, 3 ; addi 3, 3, 16 76570af302Sopenharmony_ci stvx 22, 0, 3 ; addi 3, 3, 16 77570af302Sopenharmony_ci stvx 23, 0, 3 ; addi 3, 3, 16 78570af302Sopenharmony_ci stvx 24, 0, 3 ; addi 3, 3, 16 79570af302Sopenharmony_ci stvx 25, 0, 3 ; addi 3, 3, 16 80570af302Sopenharmony_ci stvx 26, 0, 3 ; addi 3, 3, 16 81570af302Sopenharmony_ci stvx 27, 0, 3 ; addi 3, 3, 16 82570af302Sopenharmony_ci stvx 28, 0, 3 ; addi 3, 3, 16 83570af302Sopenharmony_ci stvx 29, 0, 3 ; addi 3, 3, 16 84570af302Sopenharmony_ci stvx 30, 0, 3 ; addi 3, 3, 16 85570af302Sopenharmony_ci stvx 31, 0, 3 86570af302Sopenharmony_ci 87570af302Sopenharmony_ci # 6) return 0 88570af302Sopenharmony_ci li 3, 0 89570af302Sopenharmony_ci blr 90