kernel: scheduling fix for ARM
[minix.git] / lib / libc / arch / powerpc64 / gen / __setjmp14.S
blobf4b6af187c494eab25707e5960a2ffd42a322d34
1 /*      $NetBSD: __setjmp14.S,v 1.2 2009/03/08 18:57:12 he Exp $        */
3 #include <sys/syscall.h>
5 #include <machine/asm.h>
7 #if defined(LIBC_SCCS)
8         .text
9         .asciz "$NetBSD: __setjmp14.S,v 1.2 2009/03/08 18:57:12 he Exp $"
10 #endif
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  */
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
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)
59         li      %r3,0
60         blr
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)
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