1ca987d46SWarner Losh/* from: NetBSD: setjmp.S,v 1.1 1998/01/27 15:13:12 sakamoto Exp $ */ 2ca987d46SWarner Losh/* from: OpenBSD: setjmp.S,v 1.2 1996/12/28 06:22:18 rahnds Exp */ 3ca987d46SWarner Losh/* kernel version of this file, does not have signal goop */ 4ca987d46SWarner Losh/* int setjmp(jmp_buf env) */ 5ca987d46SWarner Losh 6ca987d46SWarner Losh#include <machine/asm.h> 7ca987d46SWarner Losh 8ca987d46SWarner Losh#ifdef __powerpc64__ 9ca987d46SWarner Losh#define LD_REG ld 10ca987d46SWarner Losh#define ST_REG std 11ca987d46SWarner Losh#define REGWIDTH 8 12ca987d46SWarner Losh#else 13ca987d46SWarner Losh#define LD_REG lwz 14ca987d46SWarner Losh#define ST_REG stw 15ca987d46SWarner Losh#define REGWIDTH 4 16ca987d46SWarner Losh#endif 17ca987d46SWarner Losh 18ca987d46SWarner Losh#define JMP_r1 1*REGWIDTH 19ca987d46SWarner Losh#define JMP_r2 2*REGWIDTH 20ca987d46SWarner Losh#define JMP_r14 3*REGWIDTH 21ca987d46SWarner Losh#define JMP_r15 4*REGWIDTH 22ca987d46SWarner Losh#define JMP_r16 5*REGWIDTH 23ca987d46SWarner Losh#define JMP_r17 6*REGWIDTH 24ca987d46SWarner Losh#define JMP_r18 7*REGWIDTH 25ca987d46SWarner Losh#define JMP_r19 8*REGWIDTH 26ca987d46SWarner Losh#define JMP_r20 9*REGWIDTH 27ca987d46SWarner Losh#define JMP_r21 10*REGWIDTH 28ca987d46SWarner Losh#define JMP_r22 11*REGWIDTH 29ca987d46SWarner Losh#define JMP_r23 12*REGWIDTH 30ca987d46SWarner Losh#define JMP_r24 13*REGWIDTH 31ca987d46SWarner Losh#define JMP_r25 14*REGWIDTH 32ca987d46SWarner Losh#define JMP_r26 15*REGWIDTH 33ca987d46SWarner Losh#define JMP_r27 16*REGWIDTH 34ca987d46SWarner Losh#define JMP_r28 17*REGWIDTH 35ca987d46SWarner Losh#define JMP_r29 18*REGWIDTH 36ca987d46SWarner Losh#define JMP_r30 19*REGWIDTH 37ca987d46SWarner Losh#define JMP_r31 20*REGWIDTH 38ca987d46SWarner Losh#define JMP_lr 21*REGWIDTH 39ca987d46SWarner Losh#define JMP_cr 22*REGWIDTH 40ca987d46SWarner Losh#define JMP_ctr 23*REGWIDTH 41ca987d46SWarner Losh#define JMP_xer 24*REGWIDTH 42ca987d46SWarner Losh#define JMP_sig 25*REGWIDTH 43ca987d46SWarner Losh 44ca987d46SWarner LoshASENTRY_NOPROF(_setjmp) 45ca987d46SWarner Losh ST_REG 31, JMP_r31(3) 46ca987d46SWarner Losh /* r1, r2, r14-r30 */ 47ca987d46SWarner Losh ST_REG 1, JMP_r1 (3) 48ca987d46SWarner Losh ST_REG 2, JMP_r2 (3) 49ca987d46SWarner Losh ST_REG 14, JMP_r14(3) 50ca987d46SWarner Losh ST_REG 15, JMP_r15(3) 51ca987d46SWarner Losh ST_REG 16, JMP_r16(3) 52ca987d46SWarner Losh ST_REG 17, JMP_r17(3) 53ca987d46SWarner Losh ST_REG 18, JMP_r18(3) 54ca987d46SWarner Losh ST_REG 19, JMP_r19(3) 55ca987d46SWarner Losh ST_REG 20, JMP_r20(3) 56ca987d46SWarner Losh ST_REG 21, JMP_r21(3) 57ca987d46SWarner Losh ST_REG 22, JMP_r22(3) 58ca987d46SWarner Losh ST_REG 23, JMP_r23(3) 59ca987d46SWarner Losh ST_REG 24, JMP_r24(3) 60ca987d46SWarner Losh ST_REG 25, JMP_r25(3) 61ca987d46SWarner Losh ST_REG 26, JMP_r26(3) 62ca987d46SWarner Losh ST_REG 27, JMP_r27(3) 63ca987d46SWarner Losh ST_REG 28, JMP_r28(3) 64ca987d46SWarner Losh ST_REG 29, JMP_r29(3) 65ca987d46SWarner Losh ST_REG 30, JMP_r30(3) 66ca987d46SWarner Losh /* cr, lr, ctr, xer */ 67ca987d46SWarner Losh mfcr 0 68ca987d46SWarner Losh ST_REG 0, JMP_cr(3) 69ca987d46SWarner Losh mflr 0 70ca987d46SWarner Losh ST_REG 0, JMP_lr(3) 71ca987d46SWarner Losh mfctr 0 72ca987d46SWarner Losh ST_REG 0, JMP_ctr(3) 73ca987d46SWarner Losh mfxer 0 74ca987d46SWarner Losh ST_REG 0, JMP_xer(3) 75ca987d46SWarner Losh /* f14-f31, fpscr */ 76ca987d46SWarner Losh li 3, 0 77ca987d46SWarner Losh blr 7878599c32SConrad MeyerASEND(_setjmp) 79ca987d46SWarner Losh 80ca987d46SWarner Losh 81ca987d46SWarner Losh.extern sigsetmask 82ca987d46SWarner LoshASENTRY_NOPROF(_longjmp) 83ca987d46SWarner Losh LD_REG 31, JMP_r31(3) 84ca987d46SWarner Losh /* r1, r2, r14-r30 */ 85ca987d46SWarner Losh LD_REG 1, JMP_r1 (3) 86ca987d46SWarner Losh LD_REG 2, JMP_r2 (3) 87ca987d46SWarner Losh LD_REG 14, JMP_r14(3) 88ca987d46SWarner Losh LD_REG 15, JMP_r15(3) 89ca987d46SWarner Losh LD_REG 16, JMP_r16(3) 90ca987d46SWarner Losh LD_REG 17, JMP_r17(3) 91ca987d46SWarner Losh LD_REG 18, JMP_r18(3) 92ca987d46SWarner Losh LD_REG 19, JMP_r19(3) 93ca987d46SWarner Losh LD_REG 20, JMP_r20(3) 94ca987d46SWarner Losh LD_REG 21, JMP_r21(3) 95ca987d46SWarner Losh LD_REG 22, JMP_r22(3) 96ca987d46SWarner Losh LD_REG 23, JMP_r23(3) 97ca987d46SWarner Losh LD_REG 24, JMP_r24(3) 98ca987d46SWarner Losh LD_REG 25, JMP_r25(3) 99ca987d46SWarner Losh LD_REG 26, JMP_r26(3) 100ca987d46SWarner Losh LD_REG 27, JMP_r27(3) 101ca987d46SWarner Losh LD_REG 28, JMP_r28(3) 102ca987d46SWarner Losh LD_REG 29, JMP_r29(3) 103ca987d46SWarner Losh LD_REG 30, JMP_r30(3) 104ca987d46SWarner Losh /* cr, lr, ctr, xer */ 105ca987d46SWarner Losh LD_REG 0, JMP_cr(3) 106ca987d46SWarner Losh mtcr 0 107ca987d46SWarner Losh LD_REG 0, JMP_lr(3) 108ca987d46SWarner Losh mtlr 0 109ca987d46SWarner Losh LD_REG 0, JMP_ctr(3) 110ca987d46SWarner Losh mtctr 0 111ca987d46SWarner Losh LD_REG 0, JMP_xer(3) 112ca987d46SWarner Losh mtxer 0 113ca987d46SWarner Losh /* f14-f31, fpscr */ 114ca987d46SWarner Losh mr 3, 4 115ca987d46SWarner Losh blr 11678599c32SConrad MeyerASEND(_longjmp) 117*69f6399cSJohn Baldwin 118*69f6399cSJohn Baldwin .section .note.GNU-stack,"",%progbits 119