diff options
Diffstat (limited to 'jmp.S')
-rw-r--r-- | jmp.S | 72 |
1 files changed, 72 insertions, 0 deletions
@@ -60,6 +60,11 @@ NAME: ; .globl NAME ; \ .def NAME; .scl 2; .type 32; .endef; \ NAME: ; +#elif __riscv +#define DEFUN(NAME) \ +.global NAME ; \ +.type NAME, %function ; \ +NAME: ; #else #define DEFUN(NAME) \ .global NAME ; \ @@ -414,6 +419,73 @@ DEFUN(jmp_restore) ld $30, 88($4) jr $ra move $2, $5 + +#elif __riscv + +DEFUN(jmp_save) + sd ra, 0(a0) + sd sp, 8(a0) + sd fp, 16(a0) + sd s1, 24(a0) + sd s2, 32(a0) + sd s3, 40(a0) + sd s4, 48(a0) + sd s5, 56(a0) + sd s6, 64(a0) + sd s7, 72(a0) + sd s8, 80(a0) + sd s9, 88(a0) + sd s10, 96(a0) + sd s11, 104(a0) +#if 0 && !__riscv_float_abi_soft + fsd fs0, 112(a0) + fsd fs1, 120(a0) + fsd fs2, 128(a0) + fsd fs3, 136(a0) + fsd fs4, 144(a0) + fsd fs5, 152(a0) + fsd fs6, 160(a0) + fsd fs7, 168(a0) + fsd fs8, 176(a0) + fsd fs9, 184(a0) + fsd fs10, 192(a0) + fsd fs11, 200(a0) +#endif + li a0, 0 + ret + +DEFUN(jmp_restore) + ld ra, 0(a0) + ld sp, 8(a0) + ld fp, 16(a0) + ld s1, 24(a0) + ld s2, 32(a0) + ld s3, 40(a0) + ld s4, 48(a0) + ld s5, 56(a0) + ld s6, 64(a0) + ld s7, 72(a0) + ld s8, 80(a0) + ld s9, 88(a0) + ld s10, 96(a0) + ld s11, 104(a0) +#if 0 && !__riscv_float_abi_soft + fld fs0, 112(a0) + fld fs1, 120(a0) + fld fs2, 128(a0) + fld fs3, 136(a0) + fld fs4, 144(a0) + fld fs5, 152(a0) + fld fs6, 160(a0) + fld fs7, 168(a0) + fld fs8, 176(a0) + fld fs9, 184(a0) + fld fs10, 192(a0) + fld fs11, 200(a0) +#endif + mv a0, a1 + ret + #else #error port me! #endif |