switch to using trap number 31 for syscalls on sh
[musl] / src / thread / sh / syscall_cp.s
1 .text
2 .global __cp_begin
3 .hidden __cp_begin
4 .global __cp_end
5 .hidden __cp_end
6 .global __cp_cancel
7 .hidden __cp_cancel
8 .hidden __cancel
9 .global __syscall_cp_asm
10 .hidden __syscall_cp_asm
11 .type   __syscall_cp_asm, @function
12 __syscall_cp_asm:
13
14 __cp_begin:
15         mov.l @r4, r4
16         tst   r4, r4
17         bt    2f
18
19         mov.l L1, r0
20         braf  r0
21          nop
22 1:
23
24 .align 2
25 L1:     .long __cancel@PLT-(1b-.)
26
27 2:      mov   r5, r3
28         mov   r6, r4
29         mov   r7, r5
30         mov.l @r15, r6
31         mov.l @(4,r15), r7
32         mov.l @(8,r15), r0
33         mov.l @(12,r15), r1
34         trapa #31
35
36 __cp_end:
37         ! work around hardware bug
38         or   r0, r0
39         or   r0, r0
40         or   r0, r0
41         or   r0, r0
42         or   r0, r0
43
44         rts
45          nop