blob: 66e009efa890e000ac72711d36f4584014f3dd28 [file] [log] [blame]
/*
* arch/riscv64/setjmp.S
*
* setjmp/longjmp for the RISC-V (RV64) architecture
*
* The jmp_buf is assumed to contain the following, in order:
* pc (ra)
* s0..s11
* sp
*/
#include <machine/asm.h>
ENTRY(setjmp)
sd ra, 0(a0)
sd s0, 8(a0)
sd s1, 16(a0)
sd s2, 24(a0)
sd s3, 32(a0)
sd s4, 40(a0)
sd s5, 48(a0)
sd s6, 56(a0)
sd s7, 64(a0)
sd s8, 72(a0)
sd s9, 80(a0)
sd s10, 88(a0)
sd s11, 96(a0)
sd sp, 104(a0)
mv a0, zero
jr ra
END(setjmp)
ENTRY(longjmp)
ld ra, 0(a0)
ld s0, 8(a0)
ld s1, 16(a0)
ld s2, 24(a0)
ld s3, 32(a0)
ld s4, 40(a0)
ld s5, 48(a0)
ld s6, 56(a0)
ld s7, 64(a0)
ld s8, 72(a0)
ld s9, 80(a0)
ld s10, 88(a0)
ld s11, 96(a0)
ld sp, 104(a0)
mv a0, a1
jr ra
END(longjmp)