add mips64 port
[musl] / src / thread / mips64 / syscall_cp.s
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
37
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