30e677ce522fe48949f08e423800988f2b8434d8
[musl] / src / thread / aarch64 / syscall_cp.s
1 // __syscall_cp_asm(&self->cancel, nr, u, v, w, x, y, z)
2 //                  x0             x1  x2 x3 x4 x5 x6 x7
3
4 // syscall(nr, u, v, w, x, y, z)
5 //         x8  x0 x1 x2 x3 x4 x5
6
7 .global __cp_begin
8 .hidden __cp_begin
9 .global __cp_end
10 .hidden __cp_end
11 .global __cp_cancel
12 .hidden __cp_cancel
13 .hidden __cancel
14 .global __syscall_cp_asm
15 .hidden __syscall_cp_asm
16 .type __syscall_cp_asm,%function
17 __syscall_cp_asm:
18 __cp_begin:
19         ldr w0,[x0]
20         cbnz w0,1f
21         mov x8,x1
22         mov x0,x2
23         mov x1,x3
24         mov x2,x4
25         mov x3,x5
26         mov x4,x6
27         mov x5,x7
28         svc 0
29 __cp_end:
30         ret
31
32         // cbnz might not be able to jump far enough
33 1:      b __cancel