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