__setjmp14.S revision 1.1.30.1 1 /* $NetBSD: __setjmp14.S,v 1.1.30.1 2009/05/13 19:18:21 jym Exp $ */
2
3 #include <sys/syscall.h>
4
5 #include <machine/asm.h>
6
7 #if defined(LIBC_SCCS)
8 .text
9 .asciz "$NetBSD: __setjmp14.S,v 1.1.30.1 2009/05/13 19:18:21 jym Exp $"
10 #endif
11
12 /*
13 * C library -- _setjmp, _longjmp
14 *
15 * longjmp(a,v)
16 * will generate a "return(v?v:1)" from the last call to
17 * setjmp(a)
18 * by restoring registers from the stack.
19 * The previous signal state is restored.
20 */
21
22 ENTRY(__setjmp14)
23 mr %r6,%r3
24 li %r3,1 # SIG_BLOCK
25 li %r4,0
26 addi %r5,%r6,100 # &sigmask
27 li %r0,SYS___sigprocmask14
28 sc # assume no error XXX
29 mflr %r11
30 mfcr %r12
31 mr %r10,%r1
32 mr %r9,%r2
33
34 std %r8,8(%r6) # save r8-r31
35 std %r9,16(%r6)
36 std %r10,24(%r6)
37 std %r11,32(%r6)
38 std %r12,40(%r6)
39 std %r13,48(%r6)
40 std %r14,56(%r6)
41 std %r15,64(%r6)
42 std %r16,72(%r6)
43 std %r17,80(%r6)
44 std %r18,88(%r6)
45 std %r19,96(%r6)
46 std %r20,104(%r6)
47 std %r21,112(%r6)
48 std %r22,120(%r6)
49 std %r23,128(%r6)
50 std %r24,136(%r6)
51 std %r25,144(%r6)
52 std %r26,152(%r6)
53 std %r27,160(%r6)
54 std %r28,168(%r6)
55 std %r29,176(%r6)
56 std %r30,184(%r6)
57 std %r31,192(%r6)
58
59 li %r3,0
60 blr
61
62 ENTRY(__longjmp14)
63 ld %r8,8(%r6) # load r8-r31
64 ld %r9,16(%r6)
65 ld %r10,24(%r6)
66 ld %r11,32(%r6)
67 ld %r12,40(%r6)
68 ld %r13,48(%r6)
69 ld %r14,56(%r6)
70 ld %r15,64(%r6)
71 ld %r16,72(%r6)
72 ld %r17,80(%r6)
73 ld %r18,88(%r6)
74 ld %r19,96(%r6)
75 ld %r20,104(%r6)
76 ld %r21,112(%r6)
77 ld %r22,120(%r6)
78 ld %r23,128(%r6)
79 ld %r24,136(%r6)
80 ld %r25,144(%r6)
81 ld %r26,152(%r6)
82 ld %r27,160(%r6)
83 ld %r28,168(%r6)
84 ld %r29,176(%r6)
85 ld %r30,184(%r6)
86 ld %r31,192(%r6)
87
88 mr %r6,%r4
89 mtlr %r11
90 mtcr %r12
91 mr %r2,%r9
92 mr %r1,%r10
93 addi %r4,%r3,100 # &sigmask
94 li %r3,3 # SIG_SETMASK
95 li %r5,0
96 li %r0,SYS___sigprocmask14
97 sc # assume no error XXX
98 or. %r3,%r6,%r6
99 bnelr
100 li %r3,1
101 blr
102