diff options
author | Damien George <damien.p.george@gmail.com> | 2015-01-14 00:38:33 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-01-14 00:38:33 +0000 |
commit | d9dc6fff211db1fb5947ec2003a1f650a8b80c4c (patch) | |
tree | 28a51a26ea33cdd5581554195c03fb4c7658fa8c /py/asmx86.c | |
parent | bc47c287dfe15909de6b76f19b8b0968ba54724a (diff) | |
download | micropython-d9dc6fff211db1fb5947ec2003a1f650a8b80c4c.tar.gz micropython-d9dc6fff211db1fb5947ec2003a1f650a8b80c4c.zip |
py: Allocate memory for assembled code at start of PASS_EMIT.
Previously was allocating at end of PASS_COMPUTE, and this pass was
being run twice, so memory was being allocated twice.
Diffstat (limited to 'py/asmx86.c')
-rw-r--r-- | py/asmx86.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/py/asmx86.c b/py/asmx86.c index 29ceaf8f87..d35712e235 100644 --- a/py/asmx86.c +++ b/py/asmx86.c @@ -131,21 +131,20 @@ void asm_x86_free(asm_x86_t *as, bool free_code) { } void asm_x86_start_pass(asm_x86_t *as, mp_uint_t pass) { - as->pass = pass; - as->code_offset = 0; if (pass == ASM_X86_PASS_COMPUTE) { // reset all labels memset(as->label_offsets, -1, as->max_num_labels * sizeof(mp_uint_t)); + } else if (pass == ASM_X86_PASS_EMIT) { + MP_PLAT_ALLOC_EXEC(as->code_offset, (void**)&as->code_base, &as->code_size); + if (as->code_base == NULL) { + assert(0); + } } + as->pass = pass; + as->code_offset = 0; } void asm_x86_end_pass(asm_x86_t *as) { - if (as->pass == ASM_X86_PASS_COMPUTE) { - MP_PLAT_ALLOC_EXEC(as->code_offset, (void**) &as->code_base, &as->code_size); - if(as->code_base == NULL) { - assert(0); - } - } } // all functions must go through this one to emit bytes |