diff options
Diffstat (limited to 'shared/runtime/gchelper_generic.c')
| -rw-r--r-- | shared/runtime/gchelper_generic.c | 31 |
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." |
