diff options
| author | Jeff Epler <jepler@unpythonic.net> | 2021-03-05 16:51:44 -0600 |
|---|---|---|
| committer | Jeff Epler <jepler@unpythonic.net> | 2021-03-05 16:52:35 -0600 |
| commit | 7b359d7a8add59ebd8e12ec460c8721b783e1ace (patch) | |
| tree | 4409d244586d41760c9d3569a8792a9d2e77c1a2 /py | |
| parent | 28638df5892e83b55e291271699ba1375f2efc74 (diff) | |
vm: Consolodate all dispatch instructions
Flash savings: 1268 bytes
Performance: 10,000 iteration loop .665 -> .676s (+1.7%)
Diffstat (limited to 'py')
| -rw-r--r-- | py/vm.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -129,11 +129,12 @@ mp_vm_return_kind_t PLACE_IN_ITCM(mp_execute_bytecode)(mp_code_state_t *code_sta #endif #if MICROPY_OPT_COMPUTED_GOTO #include "py/vmentrytable.h" - #define DISPATCH() do { \ + #define ONE_TRUE_DISPATCH() one_true_dispatch: do { \ TRACE(ip); \ MARK_EXC_IP_GLOBAL(); \ goto *(void*)((char*)&&entry_MP_BC_LOAD_CONST_FALSE + entry_table[*ip++]); \ } while (0) + #define DISPATCH() do { goto one_true_dispatch; } while(0) #define DISPATCH_WITH_PEND_EXC_CHECK() goto pending_exception_check #define ENTRY(op) entry_##op #define ENTRY_DEFAULT entry_default @@ -199,7 +200,7 @@ outer_dispatch_loop: for (;;) { dispatch_loop: #if MICROPY_OPT_COMPUTED_GOTO - DISPATCH(); + ONE_TRUE_DISPATCH(); #else TRACE(ip); MARK_EXC_IP_GLOBAL(); |
