deed732f3beab0a2ba7666bfe9acd1d1a451d4c0
[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         # increase stack frame by 16
14         subi 1, 1, 16
15         # thus store r3 on the stack, to restore it later
16         stw 3, 12(1)
17         # store old link reg
18         mflr 0
19         stw 0, 8(1)
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         #restore r3
27         lwz 3, 12(1)
28         #restore link reg
29         lwz 0, 8(1)
30         mtlr 0
31         #restore sp
32         addi 1, 1, 16
33 1:
34         b setjmp