From ceeba528e769825957d5d03128380c8393130440 Mon Sep 17 00:00:00 2001 From: Jaden Weiss Date: Sat, 18 Apr 2020 20:48:03 -0400 Subject: [PATCH] runtime: copy stack scan assembly for GBA The GC stack scanning code was implemented in the Cortex-M assembly, which meant that it was not available on the GBA which is pre-cortex. This change adds a copy of the relevant code into a new asembly file which is used on the GBA. --- src/runtime/scheduler_gba.S | 19 +++++++++++++++++++ targets/gameboy-advance.json | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/runtime/scheduler_gba.S diff --git a/src/runtime/scheduler_gba.S b/src/runtime/scheduler_gba.S new file mode 100644 index 00000000..6eea9826 --- /dev/null +++ b/src/runtime/scheduler_gba.S @@ -0,0 +1,19 @@ +.section .text.tinygo_scanCurrentStack +.global tinygo_scanCurrentStack +.type tinygo_scanCurrentStack, %function +tinygo_scanCurrentStack: + // Save callee-saved registers onto the stack. + mov r0, r8 + mov r1, r9 + mov r2, r10 + mov r3, r11 + push {r0-r3, lr} + push {r4-r7} + + // Scan the stack. + mov r0, sp + bl tinygo_scanstack + + // Restore stack state and return. + add sp, #32 + pop {pc} diff --git a/targets/gameboy-advance.json b/targets/gameboy-advance.json index 8051acf3..711f9a83 100644 --- a/targets/gameboy-advance.json +++ b/targets/gameboy-advance.json @@ -25,7 +25,8 @@ ], "linkerscript": "targets/gameboy-advance.ld", "extra-files": [ - "targets/gameboy-advance.s" + "targets/gameboy-advance.s", + "src/runtime/scheduler_gba.S" ], "gdb": "gdb-multiarch", "emulator": ["mgba", "-3"]