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 351: 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 461: 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 52