sigsetjmp.s raw

   1  .set	noreorder
   2  .global	sigsetjmp
   3  .global	__sigsetjmp
   4  .type	sigsetjmp,@function
   5  .type	__sigsetjmp,@function
   6  sigsetjmp:
   7  __sigsetjmp:
   8  	lui	$3, %hi(%neg(%gp_rel(sigsetjmp)))
   9  	addiu	$3, $3, %lo(%neg(%gp_rel(sigsetjmp)))
  10  
  11  	# comparing save mask with 0, if equals to 0 then
  12  	# sigsetjmp is equal to setjmp.
  13  	beq	$5, $0, 1f
  14  	addu	$3, $3, $25
  15  	sd	$ra, 160($4)
  16  	sd	$16, 168($4)
  17  
  18  	# save base of got so that we can use it later
  19  	# once we return from 'longjmp'
  20  	sd	$3, 176($4)
  21  	lw	$25, %got_disp(setjmp)($3)
  22  	jalr	$25
  23  	move	$16, $4
  24  
  25  	move	$5, $2		# Return from 'setjmp' or 'longjmp'
  26  	move	$4, $16		# Restore the pointer-to-sigjmp_buf
  27  	ld	$ra, 160($4)	# Restore ra of sigsetjmp
  28  	ld	$16, 168($4)	# Restore $16 of sigsetjmp
  29  	ld	$3, 176($4)	# Restore base of got
  30  
  31  .hidden	__sigsetjmp_tail
  32  	lw	$25, %got_disp(__sigsetjmp_tail)($3)
  33  	jr	$25
  34  	nop
  35  1:
  36  	lw	$25, %got_disp(setjmp)($3)
  37  	jr	$25
  38  	nop
  39