summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorJeff Epler <jepler@unpythonic.net>2021-03-05 16:51:44 -0600
committerJeff Epler <jepler@unpythonic.net>2021-03-05 16:52:35 -0600
commit7b359d7a8add59ebd8e12ec460c8721b783e1ace (patch)
tree4409d244586d41760c9d3569a8792a9d2e77c1a2 /py
parent28638df5892e83b55e291271699ba1375f2efc74 (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.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/py/vm.c b/py/vm.c
index c7b50b81c..283d8e198 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -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();