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

     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