199731Sbenno/* $FreeBSD$ */ 299731Sbenno/* from: NetBSD: setjmp.S,v 1.1 1998/01/27 15:13:12 sakamoto Exp $ */ 399731Sbenno/* from: OpenBSD: setjmp.S,v 1.2 1996/12/28 06:22:18 rahnds Exp */ 499731Sbenno/* kernel version of this file, does not have signal goop */ 599731Sbenno/* int setjmp(jmp_buf env) */ 699731Sbenno 7209975Snwhitehorn#include <machine/asm.h> 899731Sbenno 9209975Snwhitehorn#ifdef __powerpc64__ 10209975Snwhitehorn#define LD_REG ld 11209975Snwhitehorn#define ST_REG std 12209975Snwhitehorn#define REGWIDTH 8 13209975Snwhitehorn#else 14209975Snwhitehorn#define LD_REG lwz 15209975Snwhitehorn#define ST_REG stw 16209975Snwhitehorn#define REGWIDTH 4 17209975Snwhitehorn#endif 1899731Sbenno 19209975Snwhitehorn#define JMP_r1 1*REGWIDTH 20209975Snwhitehorn#define JMP_r2 2*REGWIDTH 21209975Snwhitehorn#define JMP_r14 3*REGWIDTH 22209975Snwhitehorn#define JMP_r15 4*REGWIDTH 23209975Snwhitehorn#define JMP_r16 5*REGWIDTH 24209975Snwhitehorn#define JMP_r17 6*REGWIDTH 25209975Snwhitehorn#define JMP_r18 7*REGWIDTH 26209975Snwhitehorn#define JMP_r19 8*REGWIDTH 27209975Snwhitehorn#define JMP_r20 9*REGWIDTH 28209975Snwhitehorn#define JMP_r21 10*REGWIDTH 29209975Snwhitehorn#define JMP_r22 11*REGWIDTH 30209975Snwhitehorn#define JMP_r23 12*REGWIDTH 31209975Snwhitehorn#define JMP_r24 13*REGWIDTH 32209975Snwhitehorn#define JMP_r25 14*REGWIDTH 33209975Snwhitehorn#define JMP_r26 15*REGWIDTH 34209975Snwhitehorn#define JMP_r27 16*REGWIDTH 35209975Snwhitehorn#define JMP_r28 17*REGWIDTH 36209975Snwhitehorn#define JMP_r29 18*REGWIDTH 37209975Snwhitehorn#define JMP_r30 19*REGWIDTH 38209975Snwhitehorn#define JMP_r31 20*REGWIDTH 39209975Snwhitehorn#define JMP_lr 21*REGWIDTH 40209975Snwhitehorn#define JMP_cr 22*REGWIDTH 41209975Snwhitehorn#define JMP_ctr 23*REGWIDTH 42209975Snwhitehorn#define JMP_xer 24*REGWIDTH 43209975Snwhitehorn 44230400SandreastASENTRY_NOPROF(setjmp) 45209975Snwhitehorn ST_REG 31, JMP_r31(3) 46209975Snwhitehorn /* r1, r2, r14-r30 */ 47209975Snwhitehorn ST_REG 1, JMP_r1 (3) 48209975Snwhitehorn ST_REG 2, JMP_r2 (3) 49209975Snwhitehorn ST_REG 14, JMP_r14(3) 50209975Snwhitehorn ST_REG 15, JMP_r15(3) 51209975Snwhitehorn ST_REG 16, JMP_r16(3) 52209975Snwhitehorn ST_REG 17, JMP_r17(3) 53209975Snwhitehorn ST_REG 18, JMP_r18(3) 54209975Snwhitehorn ST_REG 19, JMP_r19(3) 55209975Snwhitehorn ST_REG 20, JMP_r20(3) 56209975Snwhitehorn ST_REG 21, JMP_r21(3) 57209975Snwhitehorn ST_REG 22, JMP_r22(3) 58209975Snwhitehorn ST_REG 23, JMP_r23(3) 59209975Snwhitehorn ST_REG 24, JMP_r24(3) 60209975Snwhitehorn ST_REG 25, JMP_r25(3) 61209975Snwhitehorn ST_REG 26, JMP_r26(3) 62209975Snwhitehorn ST_REG 27, JMP_r27(3) 63209975Snwhitehorn ST_REG 28, JMP_r28(3) 64209975Snwhitehorn ST_REG 29, JMP_r29(3) 65209975Snwhitehorn ST_REG 30, JMP_r30(3) 6699731Sbenno /* cr, lr, ctr, xer */ 6799731Sbenno mfcr 0 68209975Snwhitehorn ST_REG 0, JMP_cr(3) 6999731Sbenno mflr 0 70209975Snwhitehorn ST_REG 0, JMP_lr(3) 7199731Sbenno mfctr 0 72209975Snwhitehorn ST_REG 0, JMP_ctr(3) 7399731Sbenno mfxer 0 74209975Snwhitehorn ST_REG 0, JMP_xer(3) 7599731Sbenno /* f14-f31, fpscr */ 7699731Sbenno li 3, 0 7799731Sbenno blr 7899731Sbenno 7999731Sbenno 8099731Sbenno.extern sigsetmask 81230400SandreastASENTRY_NOPROF(longjmp) 82209975Snwhitehorn LD_REG 31, JMP_r31(3) 83209975Snwhitehorn /* r1, r2, r14-r30 */ 84209975Snwhitehorn LD_REG 1, JMP_r1 (3) 85209975Snwhitehorn LD_REG 2, JMP_r2 (3) 86209975Snwhitehorn LD_REG 14, JMP_r14(3) 87209975Snwhitehorn LD_REG 15, JMP_r15(3) 88209975Snwhitehorn LD_REG 16, JMP_r16(3) 89209975Snwhitehorn LD_REG 17, JMP_r17(3) 90209975Snwhitehorn LD_REG 18, JMP_r18(3) 91209975Snwhitehorn LD_REG 19, JMP_r19(3) 92209975Snwhitehorn LD_REG 20, JMP_r20(3) 93209975Snwhitehorn LD_REG 21, JMP_r21(3) 94209975Snwhitehorn LD_REG 22, JMP_r22(3) 95209975Snwhitehorn LD_REG 23, JMP_r23(3) 96209975Snwhitehorn LD_REG 24, JMP_r24(3) 97209975Snwhitehorn LD_REG 25, JMP_r25(3) 98209975Snwhitehorn LD_REG 26, JMP_r26(3) 99209975Snwhitehorn LD_REG 27, JMP_r27(3) 100209975Snwhitehorn LD_REG 28, JMP_r28(3) 101209975Snwhitehorn LD_REG 29, JMP_r29(3) 102209975Snwhitehorn LD_REG 30, JMP_r30(3) 10399731Sbenno /* cr, lr, ctr, xer */ 104209975Snwhitehorn LD_REG 0, JMP_cr(3) 10599731Sbenno mtcr 0 106209975Snwhitehorn LD_REG 0, JMP_lr(3) 10799731Sbenno mtlr 0 108209975Snwhitehorn LD_REG 0, JMP_ctr(3) 10999731Sbenno mtctr 0 110209975Snwhitehorn LD_REG 0, JMP_xer(3) 11199731Sbenno mtxer 0 11299731Sbenno /* f14-f31, fpscr */ 11399731Sbenno mr 3, 4 11499731Sbenno blr 115