add mips n32 port (ILP32 ABI for mips64)
[musl] / src / thread / mipsn32 / 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         lw      $10, 0($sp)
30         syscall
31 __cp_end:
32         beq     $7, $0, 1f
33         nop
34         subu    $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         bal     1f
42         nop
43 __cp_cancel_data:
44         .gpword __cp_cancel_data
45         .gpword __cancel
46 1:      lw      $3, 0($ra)
47         subu    $3, $ra, $3
48         lw      $25, 4($ra)
49         addu    $25, $25, $3
50         jr      $25
51         move    $ra, $2