summaryrefslogtreecommitdiff
path: root/py/persistentcode.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2024-02-09 13:25:58 +1100
committerDamien George <damien@micropython.org>2024-02-16 12:48:02 +1100
commit39bf055d23be4b0f761af115773c3db1074fc2dd (patch)
tree30fd1f642bff42e78b03ff2146100dc389cd16d3 /py/persistentcode.c
parent223e0d9a5b116246bda1621201e77945ac5746fe (diff)
py/emitglue: Reorder and resize members of mp_raw_code_t.
The mp_raw_code_t struct has been reordered and some members resized. The `n_pos_args` member is renamed to `asm_n_pos_args`, and `type_sig` renamed to `asm_type_sig` to indicate that these are used only for the inline-asm emitters. These two members are also grouped together in the struct. The justifications for resizing the members are: - `fun_data_len` can be 32-bits without issue - `n_children` is already limited to 16-bits by `mp_emit_common_t::ct_cur_child` - `scope_flags` is already limited to 16-bits by `scope_t::scope_flags` - `prelude_offset` is already limited to 16-bits by the argument to `mp_emit_glue_assign_native()` - it's reasonable to limit the maximim number of inline-asm arguments to 12 (24 bits for `asm_type_sig` divided by 2) This change helps to reduce frozen code size (and in some cases RAM usage) in the following cases: - 64-bit targets - builds with MICROPY_PY_SYS_SETTRACE enabled - builds with MICROPY_EMIT_MACHINE_CODE enabled but MICROPY_EMIT_INLINE_ASM disabled With this change, unix 64-bit builds are -4080 bytes in size. Bare-metal ports like rp2 are unchanged (because mp_raw_code_t is still 32 bytes on those 32-bit targets). Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'py/persistentcode.c')
-rw-r--r--py/persistentcode.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/py/persistentcode.c b/py/persistentcode.c
index df1003bab..83806febb 100644
--- a/py/persistentcode.c
+++ b/py/persistentcode.c
@@ -578,10 +578,12 @@ STATIC void save_raw_code(mp_print_t *print, const mp_raw_code_t *rc) {
} else if (rc->kind == MP_CODE_NATIVE_VIPER || rc->kind == MP_CODE_NATIVE_ASM) {
// Save basic scope info for viper and asm
mp_print_uint(print, rc->scope_flags & MP_SCOPE_FLAG_ALL_SIG);
+ #if MICROPY_EMIT_INLINE_ASM
if (rc->kind == MP_CODE_NATIVE_ASM) {
- mp_print_uint(print, rc->n_pos_args);
- mp_print_uint(print, rc->type_sig);
+ mp_print_uint(print, rc->asm_n_pos_args);
+ mp_print_uint(print, rc->asm_type_sig);
}
+ #endif
}
#endif