| 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 |