From 53e111800f9e53733042442eefea0ffc293a35df Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 8 Dec 2017 19:07:00 +1100 Subject: [PATCH] py/asmbase: Revert removal of clearing of label offsets for native emit. The assembler back-end for most architectures needs to know if a jump is backwards in order to emit optimised machine code, and they do this by checking if the destination label has been set or not. So always reset label offsets to -1 (this reverts partially the previous commit, with some minor optimisation for the if-logic with the pass variable). --- py/asmbase.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/py/asmbase.c b/py/asmbase.c index 83a699cd41..4c84c3b255 100644 --- a/py/asmbase.c +++ b/py/asmbase.c @@ -46,12 +46,10 @@ void mp_asm_base_deinit(mp_asm_base_t *as, bool free_code) { } void mp_asm_base_start_pass(mp_asm_base_t *as, int pass) { - if (pass == MP_ASM_PASS_COMPUTE) { - #ifndef NDEBUG - // With debugging enabled labels are checked for unique assignment + if (pass < MP_ASM_PASS_EMIT) { + // Reset labels so we can detect backwards jumps (and verify unique assignment) memset(as->label_offsets, -1, as->max_num_labels * sizeof(size_t)); - #endif - } else if (pass == MP_ASM_PASS_EMIT) { + } else { // allocating executable RAM is platform specific MP_PLAT_ALLOC_EXEC(as->code_offset, (void**)&as->code_base, &as->code_size); assert(as->code_base != NULL);