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