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
53