xref: /netbsd/sys/arch/powerpc/powerpc/setjmp.S (revision c371e413)
1/*	$NetBSD: setjmp.S,v 1.4 2011/01/17 08:23:56 matt Exp $	*/
2/*	from:	OpenBSD: setjmp.S,v 1.2 1996/12/28 06:22:18 rahnds Exp 	*/
3/* kernel version of this file, does not have signal goop */
4/* int setjmp(jmp_buf env) */
5
6#include <machine/asm.h>
7
8#define JMP_r1	0x04
9#define JMP_r14	0x08
10#define JMP_r15	0x0c
11#define JMP_r16	0x10
12#define JMP_r17	0x14
13#define JMP_r18	0x18
14#define JMP_r19	0x1c
15#define JMP_r20	0x20
16#define JMP_r21	0x24
17#define JMP_r22	0x28
18#define JMP_r23	0x2c
19#define JMP_r24	0x30
20#define JMP_r25	0x34
21#define JMP_r26	0x38
22#define JMP_r27	0x3c
23#define JMP_r28	0x40
24#define JMP_r29	0x44
25#define JMP_r30	0x48
26#define JMP_r31	0x4c
27#define JMP_lr  0x50
28#define JMP_cr  0x54
29#define JMP_ctr	0x58
30#define JMP_xer	0x5c
31#define JMP_sig	0x60
32
33
34.globl setjmp
35setjmp:
36	streg %r31, JMP_r31(%r3)
37	/* r1, r14-r30 */
38	streg %r1,  JMP_r1 (%r3)
39	streg %r14, JMP_r14(%r3)
40	streg %r15, JMP_r15(%r3)
41	streg %r16, JMP_r16(%r3)
42	streg %r17, JMP_r17(%r3)
43	streg %r18, JMP_r18(%r3)
44	streg %r19, JMP_r19(%r3)
45	streg %r20, JMP_r20(%r3)
46	streg %r21, JMP_r21(%r3)
47	streg %r22, JMP_r22(%r3)
48	streg %r23, JMP_r23(%r3)
49	streg %r24, JMP_r24(%r3)
50	streg %r25, JMP_r25(%r3)
51	streg %r26, JMP_r26(%r3)
52	streg %r27, JMP_r27(%r3)
53	streg %r28, JMP_r28(%r3)
54	streg %r29, JMP_r29(%r3)
55	streg %r30, JMP_r30(%r3)
56	/* cr, lr, ctr, xer */
57	mfcr %r0
58	streg %r0, JMP_cr(%r3)
59	mflr %r0
60	streg %r0, JMP_lr(%r3)
61	mfctr %r0
62	streg %r0, JMP_ctr(%r3)
63	mfxer %r0
64	streg %r0, JMP_xer(%r3)
65	/* f14-f31, fpscr */
66	li %r3, 0
67	blr
68
69
70.extern sigsetmask
71.globl longjmp
72longjmp:
73	ldreg %r31, JMP_r31(%r3)
74	/* r1, r14-r30 */
75	ldreg %r1,  JMP_r1 (%r3)
76	ldreg %r14, JMP_r14(%r3)
77	ldreg %r15, JMP_r15(%r3)
78	ldreg %r16, JMP_r16(%r3)
79	ldreg %r17, JMP_r17(%r3)
80	ldreg %r18, JMP_r18(%r3)
81	ldreg %r19, JMP_r19(%r3)
82	ldreg %r20, JMP_r20(%r3)
83	ldreg %r21, JMP_r21(%r3)
84	ldreg %r22, JMP_r22(%r3)
85	ldreg %r23, JMP_r23(%r3)
86	ldreg %r24, JMP_r24(%r3)
87	ldreg %r25, JMP_r25(%r3)
88	ldreg %r26, JMP_r26(%r3)
89	ldreg %r27, JMP_r27(%r3)
90	ldreg %r28, JMP_r28(%r3)
91	ldreg %r29, JMP_r29(%r3)
92	ldreg %r30, JMP_r30(%r3)
93	/* cr, lr, ctr, xer */
94	ldreg %r0, JMP_cr(%r3)
95	mtcr %r0
96	ldreg %r0, JMP_lr(%r3)
97	mtlr %r0
98	ldreg %r0, JMP_ctr(%r3)
99	mtctr %r0
100	ldreg %r0, JMP_xer(%r3)
101	mtxer %r0
102	/* f14-f31, fpscr */
103	mr %r3, %r4
104	blr
105