summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-12-08 19:07:00 +1100
committerDamien George <damien.p.george@gmail.com>2017-12-08 19:07:00 +1100
commit53e111800f9e53733042442eefea0ffc293a35df (patch)
tree240053c18ec59ee838c37c3b411a38d937ccf405
parentf935bce3c52e8eb8f48f7f4947b1210074c359a6 (diff)
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).
-rw-r--r--py/asmbase.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/py/asmbase.c b/py/asmbase.c
index 83a699cd4..4c84c3b25 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);