xref: /freebsd/stand/libsa/powerpc/_setjmp.S (revision 2a63c3be158216222d89a073dcbd6a72ee4aab5a)
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