From 99dde4ed1f8edd5ff566a6f0cfec0c83f01ef657 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 12 Jan 2015 12:07:42 +0000 Subject: qemu-arm: Enable GC and native code-gen; enable more tests. --- qemu-arm/main.c | 4 ++++ qemu-arm/mpconfigport.h | 6 +++--- qemu-arm/test_main.c | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) (limited to 'qemu-arm') diff --git a/qemu-arm/main.c b/qemu-arm/main.c index a35005e9d..3750dde45 100644 --- a/qemu-arm/main.c +++ b/qemu-arm/main.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "py/nlr.h" #include "py/obj.h" @@ -9,6 +10,7 @@ #include "py/runtime0.h" #include "py/runtime.h" #include "py/stackctrl.h" +#include "py/gc.h" #include "py/repl.h" #include "py/pfenv.h" @@ -51,6 +53,8 @@ void do_str(const char *src) { int main(int argc, char **argv) { mp_stack_set_limit(10240); + void *heap = malloc(16 * 1024); + gc_init(heap, (char*)heap + 16 * 1024); mp_init(); do_str("print('hello world!')"); mp_deinit(); diff --git a/qemu-arm/mpconfigport.h b/qemu-arm/mpconfigport.h index f9f048655..f5e5d029d 100644 --- a/qemu-arm/mpconfigport.h +++ b/qemu-arm/mpconfigport.h @@ -4,11 +4,11 @@ #define MICROPY_ALLOC_PATH_MAX (512) #define MICROPY_EMIT_X64 (0) -#define MICROPY_EMIT_THUMB (0) -#define MICROPY_EMIT_INLINE_THUMB (0) +#define MICROPY_EMIT_THUMB (1) +#define MICROPY_EMIT_INLINE_THUMB (1) #define MICROPY_MEM_STATS (0) #define MICROPY_DEBUG_PRINTERS (0) -#define MICROPY_ENABLE_GC (0) +#define MICROPY_ENABLE_GC (1) #define MICROPY_STACK_CHECK (1) #define MICROPY_HELPER_REPL (0) #define MICROPY_HELPER_LEXER_UNIX (0) diff --git a/qemu-arm/test_main.c b/qemu-arm/test_main.c index 30bd16904..cc4e15357 100644 --- a/qemu-arm/test_main.c +++ b/qemu-arm/test_main.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "py/nlr.h" #include "py/obj.h" @@ -9,6 +10,7 @@ #include "py/runtime0.h" #include "py/runtime.h" #include "py/stackctrl.h" +#include "py/gc.h" #include "py/repl.h" #include "py/pfenv.h" @@ -58,6 +60,8 @@ end: int main() { const char a[] = {"sim"}; mp_stack_set_limit(10240); + void *heap = malloc(256 * 1024); + gc_init(heap, (char*)heap + 256 * 1024); mp_init(); int r = tinytest_main(1, (const char **) a, groups); mp_deinit(); @@ -66,6 +70,18 @@ int main() { } void gc_collect(void) { + gc_collect_start(); + + // get the registers and the sp + jmp_buf env; + setjmp(env); + volatile mp_uint_t dummy; + void *sp = (void*)&dummy; + + // trace the stack, including the registers (since they live on the stack in this function) + gc_collect_root((void**)sp, ((uint32_t)MP_STATE_VM(stack_top) - (uint32_t)sp) / sizeof(uint32_t)); + + gc_collect_end(); } mp_lexer_t *mp_lexer_new_from_file(const char *filename) { -- cgit v1.2.3