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