summaryrefslogtreecommitdiff
path: root/shared/runtime/gchelper_generic.c
diff options
context:
space:
mode:
Diffstat (limited to 'shared/runtime/gchelper_generic.c')
-rw-r--r--shared/runtime/gchelper_generic.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/shared/runtime/gchelper_generic.c b/shared/runtime/gchelper_generic.c
index 4ef2e73f7..f1087e199 100644
--- a/shared/runtime/gchelper_generic.c
+++ b/shared/runtime/gchelper_generic.c
@@ -150,6 +150,37 @@ static void gc_helper_get_regs(gc_helper_regs_t arr) {
arr[10] = x29;
}
+#elif defined(__riscv) && defined(__riscv_xlen) && (__riscv_xlen == 32)
+
+// Fallback implementation for RV32I, prefer gchelper_rv32i.s
+
+static void gc_helper_get_regs(gc_helper_regs_t arr) {
+ register long s0 asm ("x8");
+ register long s1 asm ("x9");
+ register long s2 asm ("x18");
+ register long s3 asm ("x19");
+ register long s4 asm ("x20");
+ register long s5 asm ("x21");
+ register long s6 asm ("x22");
+ register long s7 asm ("x23");
+ register long s8 asm ("x24");
+ register long s9 asm ("x25");
+ register long s10 asm ("x26");
+ register long s11 asm ("x27");
+ arr[0] = s0;
+ arr[1] = s1;
+ arr[2] = s2;
+ arr[3] = s3;
+ arr[4] = s4;
+ arr[5] = s5;
+ arr[6] = s6;
+ arr[7] = s7;
+ arr[8] = s8;
+ arr[9] = s9;
+ arr[10] = s10;
+ arr[11] = s11;
+}
+
#else
#error "Architecture not supported for gc_helper_get_regs. Set MICROPY_GCREGS_SETJMP to use the fallback implementation."