riscv32: add setjmp/longjmp and sigreturn
[musl.git] / src / signal / sh / sigsetjmp.s
blobf0f604e2efb2e61dc1b2763ff6663cf1fcdab6e0
1 .global sigsetjmp
2 .global __sigsetjmp
3 .type sigsetjmp,@function
4 .type __sigsetjmp,@function
5 sigsetjmp:
6 __sigsetjmp:
7 tst r5, r5
8 bt 9f
10 mov r4, r6
11 add #60, r6
12 sts pr, r0
13 mov.l r0, @r6
14 mov.l r8, @(4+8,r6)
16 mov.l 1f, r0
17 2: bsrf r0
18 mov r4, r8
20 mov r0, r5
21 mov r8, r4
22 mov r4, r6
23 add #60, r6
25 mov.l @r6, r0
26 lds r0, pr
28 mov.l 3f, r0
29 4: braf r0
30 mov.l @(4+8,r6), r8
32 9: mov.l 5f, r0
33 6: braf r0
34 nop
36 .align 2
37 .hidden ___setjmp
38 1: .long ___setjmp@PLT-(2b+4-.)
39 .hidden __sigsetjmp_tail
40 3: .long __sigsetjmp_tail@PLT-(4b+4-.)
41 5: .long ___setjmp@PLT-(6b+4-.)