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
39