blob: 4d293757ec73cee8f7388447e68137c22bc4a371 [file] [log] [blame]
#
# arch/mips/setjmp.S
#
# setjmp/longjmp for the MIPS architecture
#
# The jmp_buf is assumed to contain the following, in order:
# s0..s7
# gp
# sp
# s8
# ra
# f20..f31
# fcr31
#
#include <machine/asm.h>
LEAF(setjmp)
sw s0, 0(a0)
sw s1, 4(a0)
sw s2, 8(a0)
sw s3, 12(a0)
sw s4, 16(a0)
sw s5, 20(a0)
sw s6, 24(a0)
sw s7, 28(a0)
sw gp, 32(a0)
sw sp, 36(a0)
sw s8, 40(a0)
sw ra, 44(a0)
cfc1 t0,$31
swc1 $f20,48(a0)
swc1 $f21,52(a0)
swc1 $f22,56(a0)
swc1 $f23,60(a0)
swc1 $f24,64(a0)
swc1 $f25,68(a0)
swc1 $f26,72(a0)
swc1 $f27,76(a0)
swc1 $f28,80(a0)
swc1 $f29,84(a0)
swc1 $f30,88(a0)
swc1 $f31,92(a0)
sw t0,96(a0)
move v0,zero
jr ra
END(setjmp)
LEAF(longjmp)
lw s0, 0(a0)
lw s1, 4(a0)
lw s2, 8(a0)
lw s3, 12(a0)
lw s4, 16(a0)
lw s5, 20(a0)
lw s6, 24(a0)
lw s7, 28(a0)
lw gp, 32(a0)
lw sp, 36(a0)
lw s8, 40(a0)
lw ra, 44(a0)
lw t0, 96(a0)
lwc1 $f20,48(a0)
lwc1 $f21,52(a0)
lwc1 $f22,56(a0)
lwc1 $f23,60(a0)
lwc1 $f24,64(a0)
lwc1 $f25,68(a0)
lwc1 $f26,72(a0)
lwc1 $f27,76(a0)
lwc1 $f28,80(a0)
lwc1 $f29,84(a0)
lwc1 $f30,88(a0)
lwc1 $f31,92(a0)
ctc1 t0,$31
move v0,a1
jr ra
END(longjmp)