github.com/afumu/libc@v0.0.6/musl/src/thread/mips64/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  	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