add mips64 port
[musl.git] / src / thread / mips64 / syscall_cp.s
blob0d4ede7635f4e8613066bd09ae85b4481d5573bc
1 .set noreorder
2 .global __cp_begin
3 .hidden __cp_begin
4 .type __cp_begin,@function
5 .global __cp_end
6 .hidden __cp_end
7 .type __cp_end,@function
8 .global __cp_cancel
9 .hidden __cp_cancel
10 .type __cp_cancel,@function
11 .global __cp_cancel_data
12 .hidden __cp_cancel_data
13 .type __cp_cancel_data,@function
14 .hidden __cancel
15 .global __syscall_cp_asm
16 .hidden __syscall_cp_asm
17 .type __syscall_cp_asm,@function
18 __syscall_cp_asm:
19 __cp_begin:
20 lw $4, 0($4)
21 bne $4, $0, __cp_cancel
22 move $2, $5
23 move $4, $6
24 move $5, $7
25 move $6, $8
26 move $7, $9
27 move $8, $10
28 move $9, $11
29 ld $10, 0($sp)
30 syscall
31 __cp_end:
32 beq $7, $0, 1f
33 nop
34 dsubu $2, $0, $2
35 1: jr $ra
36 nop
38 # if cancellation flag is 1 then call __cancel
39 __cp_cancel:
40 move $2, $ra
41 .align 8
42 bal 1f
43 nop
44 __cp_cancel_data:
45 .gpdword __cp_cancel_data
46 .gpdword __cancel
47 1: ld $3, ($ra)
48 dsubu $3, $ra, $3
49 ld $25, 8($ra)
50 daddu $25, $25, $3
51 jr $25
52 move $ra, $2