summaryrefslogtreecommitdiffstats
path: root/jmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'jmp.S')
-rw-r--r--jmp.S72
1 files changed, 72 insertions, 0 deletions
diff --git a/jmp.S b/jmp.S
index f38c74bd..9acee8a9 100644
--- a/jmp.S
+++ b/jmp.S
@@ -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