setjmp.S revision 209975
199731Sbenno/* $FreeBSD: head/sys/powerpc/powerpc/setjmp.S 209975 2010-07-13 05:32:19Z nwhitehorn $ */ 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#define JMP_sig 25*REGWIDTH 44209975Snwhitehorn 45209975SnwhitehornASENTRY(setjmp) 46209975Snwhitehorn ST_REG 31, JMP_r31(3) 47209975Snwhitehorn /* r1, r2, r14-r30 */ 48209975Snwhitehorn ST_REG 1, JMP_r1 (3) 49209975Snwhitehorn ST_REG 2, JMP_r2 (3) 50209975Snwhitehorn ST_REG 14, JMP_r14(3) 51209975Snwhitehorn ST_REG 15, JMP_r15(3) 52209975Snwhitehorn ST_REG 16, JMP_r16(3) 53209975Snwhitehorn ST_REG 17, JMP_r17(3) 54209975Snwhitehorn ST_REG 18, JMP_r18(3) 55209975Snwhitehorn ST_REG 19, JMP_r19(3) 56209975Snwhitehorn ST_REG 20, JMP_r20(3) 57209975Snwhitehorn ST_REG 21, JMP_r21(3) 58209975Snwhitehorn ST_REG 22, JMP_r22(3) 59209975Snwhitehorn ST_REG 23, JMP_r23(3) 60209975Snwhitehorn ST_REG 24, JMP_r24(3) 61209975Snwhitehorn ST_REG 25, JMP_r25(3) 62209975Snwhitehorn ST_REG 26, JMP_r26(3) 63209975Snwhitehorn ST_REG 27, JMP_r27(3) 64209975Snwhitehorn ST_REG 28, JMP_r28(3) 65209975Snwhitehorn ST_REG 29, JMP_r29(3) 66209975Snwhitehorn ST_REG 30, JMP_r30(3) 6799731Sbenno /* cr, lr, ctr, xer */ 6899731Sbenno mfcr 0 69209975Snwhitehorn ST_REG 0, JMP_cr(3) 7099731Sbenno mflr 0 71209975Snwhitehorn ST_REG 0, JMP_lr(3) 7299731Sbenno mfctr 0 73209975Snwhitehorn ST_REG 0, JMP_ctr(3) 7499731Sbenno mfxer 0 75209975Snwhitehorn ST_REG 0, JMP_xer(3) 7699731Sbenno /* f14-f31, fpscr */ 7799731Sbenno li 3, 0 7899731Sbenno blr 7999731Sbenno 8099731Sbenno 8199731Sbenno.extern sigsetmask 82209975SnwhitehornASENTRY(longjmp) 83209975Snwhitehorn LD_REG 31, JMP_r31(3) 84209975Snwhitehorn /* r1, r2, r14-r30 */ 85209975Snwhitehorn LD_REG 1, JMP_r1 (3) 86209975Snwhitehorn LD_REG 2, JMP_r2 (3) 87209975Snwhitehorn LD_REG 14, JMP_r14(3) 88209975Snwhitehorn LD_REG 15, JMP_r15(3) 89209975Snwhitehorn LD_REG 16, JMP_r16(3) 90209975Snwhitehorn LD_REG 17, JMP_r17(3) 91209975Snwhitehorn LD_REG 18, JMP_r18(3) 92209975Snwhitehorn LD_REG 19, JMP_r19(3) 93209975Snwhitehorn LD_REG 20, JMP_r20(3) 94209975Snwhitehorn LD_REG 21, JMP_r21(3) 95209975Snwhitehorn LD_REG 22, JMP_r22(3) 96209975Snwhitehorn LD_REG 23, JMP_r23(3) 97209975Snwhitehorn LD_REG 24, JMP_r24(3) 98209975Snwhitehorn LD_REG 25, JMP_r25(3) 99209975Snwhitehorn LD_REG 26, JMP_r26(3) 100209975Snwhitehorn LD_REG 27, JMP_r27(3) 101209975Snwhitehorn LD_REG 28, JMP_r28(3) 102209975Snwhitehorn LD_REG 29, JMP_r29(3) 103209975Snwhitehorn LD_REG 30, JMP_r30(3) 10499731Sbenno /* cr, lr, ctr, xer */ 105209975Snwhitehorn LD_REG 0, JMP_cr(3) 10699731Sbenno mtcr 0 107209975Snwhitehorn LD_REG 0, JMP_lr(3) 10899731Sbenno mtlr 0 109209975Snwhitehorn LD_REG 0, JMP_ctr(3) 11099731Sbenno mtctr 0 111209975Snwhitehorn LD_REG 0, JMP_xer(3) 11299731Sbenno mtxer 0 11399731Sbenno /* f14-f31, fpscr */ 11499731Sbenno mr 3, 4 11599731Sbenno blr 116