Sync usage with man page.
[netbsd-mini2440.git] / lib / libc / arch / powerpc / gen / __setjmp14.S
blob50a9b6d30c30294caa8d9c3249b956eaeb0830d0
1 /*      $NetBSD: compat___setjmp14.S,v 1.1 2006/02/18 00:21:28 matt Exp $       */
3 #include <sys/syscall.h>
5 #include <machine/asm.h>
7 #if defined(LIBC_SCCS)
8         .text
9         .asciz "$NetBSD: compat___setjmp14.S,v 1.1 2006/02/18 00:21:28 matt 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
33         stmw    %r8,4(%r6)              # save r8-r31
34         li      %r3,0
35         blr
37 ENTRY(__longjmp14)
38         lmw     %r8,4(%r3)              # load r8-r31
39         mr      %r6,%r4
40         mtlr    %r11
41         mtcr    %r12
42         mr      %r2,%r9
43         mr      %r1,%r10
44         addi    %r4,%r3,100             # &sigmask
45         li      %r3,3                   # SIG_SETMASK
46         li      %r5,0
47         li      %r0,SYS___sigprocmask14
48         sc                              # assume no error       XXX
49         or.     %r3,%r6,%r6
50         bnelr
51         li      %r3,1
52         blr