| /* | |
| * 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) |