syscall_cp.s raw

   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