From de9cd00b39fbd66279dda69bc642ac2f3c459fa1 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 19 Dec 2016 17:42:25 +1100 Subject: [PATCH] py/compile: Add an extra pass for Xtensa inline assembler. It needs an extra pass to compute the size of the constant table for the l32r instructions. --- py/compile.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/py/compile.c b/py/compile.c index 43a0bf454a..b84793d10a 100644 --- a/py/compile.c +++ b/py/compile.c @@ -3419,6 +3419,12 @@ mp_raw_code_t *mp_compile_to_raw_code(mp_parse_tree_t *parse_tree, qstr source_f comp->emit = NULL; comp->emit_inline_asm_method_table = &ASM_EMITTER(method_table); compile_scope_inline_asm(comp, s, MP_PASS_CODE_SIZE); + #if MICROPY_EMIT_INLINE_XTENSA + // Xtensa requires an extra pass to compute size of l32r const table + // TODO this can be improved by calculating it during SCOPE pass + // but that requires some other structural changes to the asm emitters + compile_scope_inline_asm(comp, s, MP_PASS_CODE_SIZE); + #endif if (comp->compile_error == MP_OBJ_NULL) { compile_scope_inline_asm(comp, s, MP_PASS_EMIT); }