| 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 | 	daddiu	$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 | 	daddu	$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 | 	ld	$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 | 	ld	$25, %got_disp(__sigsetjmp_tail)($3) |
| 33 | 	jr	$25 |
| 34 | 	nop |
| 35 | 1: |
| 36 | 	ld	$25, %got_disp(setjmp)($3) |
| 37 | 	jr	$25 |
| 38 | 	nop |