summaryrefslogtreecommitdiff
path: root/py/emitbc.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-05-22 21:16:30 +1000
committerDamien George <damien.p.george@gmail.com>2018-05-23 00:22:47 +1000
commitd298013939b38fb05961cf05c03ac3aef6a4f00c (patch)
treeb57995f38fb62ea8cb76e65640490ee61195261f /py/emitbc.c
parent26b5754092134b53e03eed8c5e6c580d28a2a829 (diff)
py/emit: Combine name and global into one func for load/store/delete.
Reduces code size by: bare-arm: -56 minimal x86: -300 unix x64: -576 unix nanbox: -300 stm32: -164 cc3200: -56 esp8266: -236 esp32: -76
Diffstat (limited to 'py/emitbc.c')
-rw-r--r--py/emitbc.c43
1 files changed, 12 insertions, 31 deletions
diff --git a/py/emitbc.c b/py/emitbc.c
index 3cfc05935..ed043de3a 100644
--- a/py/emitbc.c
+++ b/py/emitbc.c
@@ -568,19 +568,12 @@ void mp_emit_bc_load_local(emit_t *emit, qstr qst, mp_uint_t local_num, int kind
}
}
-void mp_emit_bc_load_name(emit_t *emit, qstr qst) {
+void mp_emit_bc_load_global(emit_t *emit, qstr qst, int kind) {
+ MP_STATIC_ASSERT(MP_BC_LOAD_NAME + MP_EMIT_IDOP_GLOBAL_NAME == MP_BC_LOAD_NAME);
+ MP_STATIC_ASSERT(MP_BC_LOAD_NAME + MP_EMIT_IDOP_GLOBAL_GLOBAL == MP_BC_LOAD_GLOBAL);
(void)qst;
emit_bc_pre(emit, 1);
- emit_write_bytecode_byte_qstr(emit, MP_BC_LOAD_NAME, qst);
- if (MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE_DYNAMIC) {
- emit_write_bytecode_byte(emit, 0);
- }
-}
-
-void mp_emit_bc_load_global(emit_t *emit, qstr qst) {
- (void)qst;
- emit_bc_pre(emit, 1);
- emit_write_bytecode_byte_qstr(emit, MP_BC_LOAD_GLOBAL, qst);
+ emit_write_bytecode_byte_qstr(emit, MP_BC_LOAD_NAME + kind, qst);
if (MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE_DYNAMIC) {
emit_write_bytecode_byte(emit, 0);
}
@@ -621,14 +614,11 @@ void mp_emit_bc_store_local(emit_t *emit, qstr qst, mp_uint_t local_num, int kin
}
}
-void mp_emit_bc_store_name(emit_t *emit, qstr qst) {
+void mp_emit_bc_store_global(emit_t *emit, qstr qst, int kind) {
+ MP_STATIC_ASSERT(MP_BC_STORE_NAME + MP_EMIT_IDOP_GLOBAL_NAME == MP_BC_STORE_NAME);
+ MP_STATIC_ASSERT(MP_BC_STORE_NAME + MP_EMIT_IDOP_GLOBAL_GLOBAL == MP_BC_STORE_GLOBAL);
emit_bc_pre(emit, -1);
- emit_write_bytecode_byte_qstr(emit, MP_BC_STORE_NAME, qst);
-}
-
-void mp_emit_bc_store_global(emit_t *emit, qstr qst) {
- emit_bc_pre(emit, -1);
- emit_write_bytecode_byte_qstr(emit, MP_BC_STORE_GLOBAL, qst);
+ emit_write_bytecode_byte_qstr(emit, MP_BC_STORE_NAME + kind, qst);
}
void mp_emit_bc_store_attr(emit_t *emit, qstr qst) {
@@ -651,14 +641,11 @@ void mp_emit_bc_delete_local(emit_t *emit, qstr qst, mp_uint_t local_num, int ki
emit_write_bytecode_byte_uint(emit, MP_BC_DELETE_FAST + kind, local_num);
}
-void mp_emit_bc_delete_name(emit_t *emit, qstr qst) {
- emit_bc_pre(emit, 0);
- emit_write_bytecode_byte_qstr(emit, MP_BC_DELETE_NAME, qst);
-}
-
-void mp_emit_bc_delete_global(emit_t *emit, qstr qst) {
+void mp_emit_bc_delete_global(emit_t *emit, qstr qst, int kind) {
+ MP_STATIC_ASSERT(MP_BC_DELETE_NAME + MP_EMIT_IDOP_GLOBAL_NAME == MP_BC_DELETE_NAME);
+ MP_STATIC_ASSERT(MP_BC_DELETE_NAME + MP_EMIT_IDOP_GLOBAL_GLOBAL == MP_BC_DELETE_GLOBAL);
emit_bc_pre(emit, 0);
- emit_write_bytecode_byte_qstr(emit, MP_BC_DELETE_GLOBAL, qst);
+ emit_write_bytecode_byte_qstr(emit, MP_BC_DELETE_NAME + kind, qst);
}
void mp_emit_bc_delete_attr(emit_t *emit, qstr qst) {
@@ -954,17 +941,14 @@ const emit_method_table_t emit_bc_method_table = {
{
mp_emit_bc_load_local,
- mp_emit_bc_load_name,
mp_emit_bc_load_global,
},
{
mp_emit_bc_store_local,
- mp_emit_bc_store_name,
mp_emit_bc_store_global,
},
{
mp_emit_bc_delete_local,
- mp_emit_bc_delete_name,
mp_emit_bc_delete_global,
},
@@ -1032,19 +1016,16 @@ const emit_method_table_t emit_bc_method_table = {
#else
const mp_emit_method_table_id_ops_t mp_emit_bc_method_table_load_id_ops = {
mp_emit_bc_load_local,
- mp_emit_bc_load_name,
mp_emit_bc_load_global,
};
const mp_emit_method_table_id_ops_t mp_emit_bc_method_table_store_id_ops = {
mp_emit_bc_store_local,
- mp_emit_bc_store_name,
mp_emit_bc_store_global,
};
const mp_emit_method_table_id_ops_t mp_emit_bc_method_table_delete_id_ops = {
mp_emit_bc_delete_local,
- mp_emit_bc_delete_name,
mp_emit_bc_delete_global,
};
#endif