fix async thread cancellation stack alignment
[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         bf    __cp_cancel
18         mov   r5, r3
19         mov   r6, r4
20         mov   r7, r5
21         mov.l @r15, r6
22         mov.l @(4,r15), r7
23         mov.l @(8,r15), r0
24         mov.l @(12,r15), r1
25         trapa #31
26
27 __cp_end:
28         ! work around hardware bug
29         or   r0, r0
30         or   r0, r0
31         or   r0, r0
32         or   r0, r0
33         or   r0, r0
34
35         rts
36          nop
37
38 __cp_cancel:
39         mov.l 2f, r0
40         braf  r0
41          nop
42 1:
43
44 .align 2
45 2:      .long __cancel@PCREL-(1b-.)