github.com/afumu/libc@v0.0.6/musl/src/thread/mipsn32/syscall_cp.s (about)

     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