#include "SYS.h"
#include <machine/setjmp.h>
ENTRY(sigsetjmp)
RETGUARD_SETUP(setjmp, t6)
mv a2, a0
sw a1, (0 * 8)(a2)
beqz a1, 1f
li a0, 1
li a1, 0
SYSTRAP(sigprocmask)
sw a0, (_JB_SIGMASK * 8)(a2)
1:
mv a0, a2
sd sp, (1 * 8)(a0)
sd s0, (2 * 8)(a0)
sd s1, (3 * 8)(a0)
sd s2, (4 * 8)(a0)
sd s3, (5 * 8)(a0)
sd s4, (6 * 8)(a0)
sd s5, (7 * 8)(a0)
sd s6, (8 * 8)(a0)
sd s7, (9 * 8)(a0)
sd s8, (10 * 8)(a0)
sd s9, (11 * 8)(a0)
sd s10, (12 * 8)(a0)
sd s11, (13 * 8)(a0)
sd ra, (14 * 8)(a0)
fsd fs0, (15 * 8)(a0)
fsd fs1, (16 * 8)(a0)
fsd fs2, (17 * 8)(a0)
fsd fs3, (18 * 8)(a0)
fsd fs4, (19 * 8)(a0)
fsd fs5, (20 * 8)(a0)
fsd fs6, (21 * 8)(a0)
fsd fs7, (22 * 8)(a0)
fsd fs8, (23 * 8)(a0)
fsd fs9, (24 * 8)(a0)
fsd fs10, (25 * 8)(a0)
fsd fs11, (26 * 8)(a0)
frcsr t0
sd t0, (27 * 8)(a0)
li a0, 0
RETGUARD_CHECK(setjmp, t6)
ret
END_STRONG(sigsetjmp)
ENTRY(siglongjmp)
RETGUARD_SYMBOL(longjmp)
RETGUARD_LOAD_RANDOM(longjmp, t6)
mv a2, a0
mv a3, a1
lw a1, (0 * 8)(a2)
beqz a1, 1f
li a0, 3
lw a1, (_JB_SIGMASK * 8)(a2)
SYSTRAP(sigprocmask)
1:
mv a0, a2
mv a1, a3
ld t0, (1 * 8)(a0)
mv sp, t0
ld s0, (2 * 8)(a0)
ld s1, (3 * 8)(a0)
ld s2, (4 * 8)(a0)
ld s3, (5 * 8)(a0)
ld s4, (6 * 8)(a0)
ld s5, (7 * 8)(a0)
ld s6, (8 * 8)(a0)
ld s7, (9 * 8)(a0)
ld s8, (10 * 8)(a0)
ld s9, (11 * 8)(a0)
ld s10, (12 * 8)(a0)
ld s11, (13 * 8)(a0)
ld ra, (14 * 8)(a0)
fld fs0, (15 * 8)(a0)
fld fs1, (16 * 8)(a0)
fld fs2, (17 * 8)(a0)
fld fs3, (18 * 8)(a0)
fld fs4, (19 * 8)(a0)
fld fs5, (20 * 8)(a0)
fld fs6, (21 * 8)(a0)
fld fs7, (22 * 8)(a0)
fld fs8, (23 * 8)(a0)
fld fs9, (24 * 8)(a0)
fld fs10, (25 * 8)(a0)
fld fs11, (26 * 8)(a0)
ld t0, (27 * 8)(a0)
fscsr t0
li a0, 1
beqz a1, 1f
mv a0, a1
1:
RETGUARD_CHECK(longjmp, t6)
ret
END_STRONG(siglongjmp)