a23463d2f566c6faa2970e9c7a7bb29b07e5c30a
[musl] / src / signal / powerpc / sigsetjmp.s
1         .global sigsetjmp
2         .type sigsetjmp,%function
3 sigsetjmp:
4         #int sigsetjmp(sigjmp_buf buf, int save)
5         #               r3              r4
6         #0) store save into buf->__fl
7         stw 4, 256(3)
8         #1) compare save with 0
9         cmpwi cr7, 4, 0
10         #2) if its 0, goto setjmp code
11         beq- cr7, 1f
12         #3) else: we must call pthread_sigmask(SIG_SETMASK, 0, (sigset_t *)buf->__ss);
13         # store non-volatile regs 30, 31 into the setjmp buf
14         stw 30, 0(3)
15         stw 31, 4(3)
16         # use them to store the pointer to the jmpbuf and the link reg
17         mr 30, 3
18         mflr 31
19         
20         # put pointer to ss buf into r5 (3rd arg)
21         addi 5, 3, 260
22         # put "2" i.e. SIG_SETMASK in r3
23         li 3, 2
24         li 4, 0
25         bl pthread_sigmask
26         
27         #restore jmpbuf pointer and link reg
28         mr 3, 30
29         mtlr 31
30         #resore non-volatile regs
31         lwz 30, 0(3)
32         lwz 31, 4(3)
33
34 1:
35         b setjmp