setjmp.S revision 99731
199731Sbenno/*	$FreeBSD: head/sys/powerpc/powerpc/setjmp.S 99731 2002-07-10 12:26:17Z benno $  */
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
799731Sbenno#define JMP_r1	0x04
899731Sbenno#define JMP_r14	0x08
999731Sbenno#define JMP_r15	0x0c
1099731Sbenno#define JMP_r16	0x10
1199731Sbenno#define JMP_r17	0x14
1299731Sbenno#define JMP_r18	0x18
1399731Sbenno#define JMP_r19	0x1c
1499731Sbenno#define JMP_r20	0x20
1599731Sbenno#define JMP_r21	0x24
1699731Sbenno#define JMP_r22	0x28
1799731Sbenno#define JMP_r23	0x2c
1899731Sbenno#define JMP_r24	0x30
1999731Sbenno#define JMP_r25	0x34
2099731Sbenno#define JMP_r26	0x38
2199731Sbenno#define JMP_r27	0x3c
2299731Sbenno#define JMP_r28	0x40
2399731Sbenno#define JMP_r29	0x44
2499731Sbenno#define JMP_r30	0x48
2599731Sbenno#define JMP_r31	0x4c
2699731Sbenno#define JMP_lr  0x50
2799731Sbenno#define JMP_cr  0x54
2899731Sbenno#define JMP_ctr	0x58
2999731Sbenno#define JMP_xer	0x5c
3099731Sbenno#define JMP_sig	0x60
3199731Sbenno
3299731Sbenno
3399731Sbenno.globl setjmp
3499731Sbennosetjmp:
3599731Sbenno	stw 31, JMP_r31(3)
3699731Sbenno	/* r1, r14-r30 */
3799731Sbenno	stw 1,  JMP_r1 (3)
3899731Sbenno	stw 14, JMP_r14(3)
3999731Sbenno	stw 15, JMP_r15(3)
4099731Sbenno	stw 16, JMP_r16(3)
4199731Sbenno	stw 17, JMP_r17(3)
4299731Sbenno	stw 18, JMP_r18(3)
4399731Sbenno	stw 19, JMP_r19(3)
4499731Sbenno	stw 20, JMP_r20(3)
4599731Sbenno	stw 21, JMP_r21(3)
4699731Sbenno	stw 22, JMP_r22(3)
4799731Sbenno	stw 23, JMP_r23(3)
4899731Sbenno	stw 24, JMP_r24(3)
4999731Sbenno	stw 25, JMP_r25(3)
5099731Sbenno	stw 26, JMP_r26(3)
5199731Sbenno	stw 27, JMP_r27(3)
5299731Sbenno	stw 28, JMP_r28(3)
5399731Sbenno	stw 29, JMP_r29(3)
5499731Sbenno	stw 30, JMP_r30(3)
5599731Sbenno	/* cr, lr, ctr, xer */
5699731Sbenno	mfcr 0
5799731Sbenno	stw 0, JMP_cr(3)
5899731Sbenno	mflr 0
5999731Sbenno	stw 0, JMP_lr(3)
6099731Sbenno	mfctr 0
6199731Sbenno	stw 0, JMP_ctr(3)
6299731Sbenno	mfxer 0
6399731Sbenno	stw 0, JMP_xer(3)
6499731Sbenno	/* f14-f31, fpscr */
6599731Sbenno	li 3, 0
6699731Sbenno	blr
6799731Sbenno
6899731Sbenno
6999731Sbenno.extern sigsetmask
7099731Sbenno.globl longjmp
7199731Sbennolongjmp:
7299731Sbenno	lwz 31, JMP_r31(3)
7399731Sbenno	/* r1, r14-r30 */
7499731Sbenno	lwz 1,  JMP_r1 (3)
7599731Sbenno	lwz 14, JMP_r14(3)
7699731Sbenno	lwz 15, JMP_r15(3)
7799731Sbenno	lwz 16, JMP_r16(3)
7899731Sbenno	lwz 17, JMP_r17(3)
7999731Sbenno	lwz 18, JMP_r18(3)
8099731Sbenno	lwz 19, JMP_r19(3)
8199731Sbenno	lwz 20, JMP_r20(3)
8299731Sbenno	lwz 21, JMP_r21(3)
8399731Sbenno	lwz 22, JMP_r22(3)
8499731Sbenno	lwz 23, JMP_r23(3)
8599731Sbenno	lwz 24, JMP_r24(3)
8699731Sbenno	lwz 25, JMP_r25(3)
8799731Sbenno	lwz 26, JMP_r26(3)
8899731Sbenno	lwz 27, JMP_r27(3)
8999731Sbenno	lwz 28, JMP_r28(3)
9099731Sbenno	lwz 29, JMP_r29(3)
9199731Sbenno	lwz 30, JMP_r30(3)
9299731Sbenno	/* cr, lr, ctr, xer */
9399731Sbenno	lwz 0, JMP_cr(3)
9499731Sbenno	mtcr 0
9599731Sbenno	lwz 0, JMP_lr(3)
9699731Sbenno	mtlr 0
9799731Sbenno	lwz 0, JMP_ctr(3)
9899731Sbenno	mtctr 0
9999731Sbenno	lwz 0, JMP_xer(3)
10099731Sbenno	mtxer 0
10199731Sbenno	/* f14-f31, fpscr */
10299731Sbenno	mr 3, 4
10399731Sbenno	blr
104