diff --git a/py/mpconfig.h b/py/mpconfig.h
index 58ef43d316a1277a31e302e08da7b49dc5aef122..7fd7067953c63755ba8153b3331f090bf156e573 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -156,8 +156,8 @@ typedef double mp_float_t;
 
 // Whether to use computed gotos in the VM, or a switch
 // Computed gotos are roughly 10% faster, and increase VM code size by a little
-#ifndef MICROPY_USE_COMPUTED_GOTO
-#define MICROPY_USE_COMPUTED_GOTO (0)
+#ifndef MICROPY_USE_COMPUTED_GOTOS
+#define MICROPY_USE_COMPUTED_GOTOS (0)
 #endif
 
 // Additional builtin function definitions - see builtintables.c:builtin_object_table for format.
diff --git a/py/vm.c b/py/vm.c
index 6c117c7cb42c2410809253d39edddb0dd88755ee..1c154007cafa3c8e460b267e2955d7261c6b820c 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -167,107 +167,19 @@ mp_vm_return_kind_t mp_execute_byte_code_2(const byte *code_info, const byte **i
                                            volatile mp_obj_t inject_exc) {
     // careful: be sure to declare volatile any variables read in the exception handler (written is ok, I think)
 
-#if MICROPY_USE_COMPUTED_GOTO
-
-#   define DISPATCH() do { \
-      save_ip = ip; \
-      op = *ip++; \
-      goto *entry_table[op]; \
+#if MICROPY_USE_COMPUTED_GOTOS
+    #include "vmentrytable.h"
+    #define DISPATCH() do { \
+        save_ip = ip; \
+        op = *ip++; \
+        goto *entry_table[op]; \
     } while(0)
-#   define ENTRY(op) entry_##op
-#   define ENTRY_DEFAULT entry_default
-
-    static void* entry_table[256] = {
-        [0 ... 255] = &&entry_default,
-        [MP_BC_LOAD_CONST_FALSE] = &&entry_MP_BC_LOAD_CONST_FALSE,
-        [MP_BC_LOAD_CONST_NONE] = &&entry_MP_BC_LOAD_CONST_NONE,
-        [MP_BC_LOAD_CONST_TRUE] = &&entry_MP_BC_LOAD_CONST_TRUE,
-        [MP_BC_LOAD_CONST_ELLIPSIS] = &&entry_MP_BC_LOAD_CONST_ELLIPSIS,
-        [MP_BC_LOAD_CONST_SMALL_INT] = &&entry_MP_BC_LOAD_CONST_SMALL_INT,
-        [MP_BC_LOAD_CONST_INT] = &&entry_MP_BC_LOAD_CONST_INT,
-        [MP_BC_LOAD_CONST_DEC] = &&entry_MP_BC_LOAD_CONST_DEC,
-        [MP_BC_LOAD_CONST_ID] = &&entry_MP_BC_LOAD_CONST_ID,
-        [MP_BC_LOAD_CONST_BYTES] = &&entry_MP_BC_LOAD_CONST_BYTES,
-        [MP_BC_LOAD_CONST_STRING] = &&entry_MP_BC_LOAD_CONST_STRING,
-        [MP_BC_LOAD_NULL] = &&entry_MP_BC_LOAD_NULL,
-        [MP_BC_LOAD_FAST_0] = &&entry_MP_BC_LOAD_FAST_0,
-        [MP_BC_LOAD_FAST_1] = &&entry_MP_BC_LOAD_FAST_1,
-        [MP_BC_LOAD_FAST_2] = &&entry_MP_BC_LOAD_FAST_2,
-        [MP_BC_LOAD_FAST_N] = &&entry_MP_BC_LOAD_FAST_N,
-        [MP_BC_LOAD_DEREF] = &&entry_MP_BC_LOAD_DEREF,
-        [MP_BC_LOAD_NAME] = &&entry_MP_BC_LOAD_NAME,
-        [MP_BC_LOAD_GLOBAL] = &&entry_MP_BC_LOAD_GLOBAL,
-        [MP_BC_LOAD_ATTR] = &&entry_MP_BC_LOAD_ATTR,
-        [MP_BC_LOAD_METHOD] = &&entry_MP_BC_LOAD_METHOD,
-        [MP_BC_LOAD_BUILD_CLASS] = &&entry_MP_BC_LOAD_BUILD_CLASS,
-        [MP_BC_STORE_FAST_0] = &&entry_MP_BC_STORE_FAST_0,
-        [MP_BC_STORE_FAST_1] = &&entry_MP_BC_STORE_FAST_1,
-        [MP_BC_STORE_FAST_2] = &&entry_MP_BC_STORE_FAST_2,
-        [MP_BC_STORE_FAST_N] = &&entry_MP_BC_STORE_FAST_N,
-        [MP_BC_STORE_DEREF] = &&entry_MP_BC_STORE_DEREF,
-        [MP_BC_STORE_NAME] = &&entry_MP_BC_STORE_NAME,
-        [MP_BC_STORE_GLOBAL] = &&entry_MP_BC_STORE_GLOBAL,
-        [MP_BC_STORE_ATTR] = &&entry_MP_BC_STORE_ATTR,
-        [MP_BC_STORE_SUBSCR] = &&entry_MP_BC_STORE_SUBSCR,
-        [MP_BC_DELETE_FAST] = &&entry_MP_BC_DELETE_FAST,
-        [MP_BC_DELETE_DEREF] = &&entry_MP_BC_DELETE_DEREF,
-        [MP_BC_DELETE_NAME] = &&entry_MP_BC_DELETE_NAME,
-        [MP_BC_DELETE_GLOBAL] = &&entry_MP_BC_DELETE_GLOBAL,
-        [MP_BC_DUP_TOP] = &&entry_MP_BC_DUP_TOP,
-        [MP_BC_DUP_TOP_TWO] = &&entry_MP_BC_DUP_TOP_TWO,
-        [MP_BC_POP_TOP] = &&entry_MP_BC_POP_TOP,
-        [MP_BC_ROT_TWO] = &&entry_MP_BC_ROT_TWO,
-        [MP_BC_ROT_THREE] = &&entry_MP_BC_ROT_THREE,
-        [MP_BC_JUMP] = &&entry_MP_BC_JUMP,
-        [MP_BC_POP_JUMP_IF_TRUE] = &&entry_MP_BC_POP_JUMP_IF_TRUE,
-        [MP_BC_POP_JUMP_IF_FALSE] = &&entry_MP_BC_POP_JUMP_IF_FALSE,
-        [MP_BC_JUMP_IF_TRUE_OR_POP] = &&entry_MP_BC_JUMP_IF_TRUE_OR_POP,
-        [MP_BC_JUMP_IF_FALSE_OR_POP] = &&entry_MP_BC_JUMP_IF_FALSE_OR_POP,
-//        [MP_BC_SETUP_LOOP] = &&entry_MP_BC_SETUP_LOOP,
-        [MP_BC_SETUP_WITH] = &&entry_MP_BC_SETUP_WITH,
-        [MP_BC_WITH_CLEANUP] = &&entry_MP_BC_WITH_CLEANUP,
-        [MP_BC_UNWIND_JUMP] = &&entry_MP_BC_UNWIND_JUMP,
-        [MP_BC_SETUP_EXCEPT] = &&entry_MP_BC_SETUP_EXCEPT,
-        [MP_BC_SETUP_FINALLY] = &&entry_MP_BC_SETUP_FINALLY,
-        [MP_BC_END_FINALLY] = &&entry_MP_BC_END_FINALLY,
-        [MP_BC_GET_ITER] = &&entry_MP_BC_GET_ITER,
-        [MP_BC_FOR_ITER] = &&entry_MP_BC_FOR_ITER,
-        [MP_BC_POP_BLOCK] = &&entry_MP_BC_POP_BLOCK,
-        [MP_BC_POP_EXCEPT] = &&entry_MP_BC_POP_EXCEPT,
-        [MP_BC_NOT] = &&entry_MP_BC_NOT,
-        [MP_BC_UNARY_OP] = &&entry_MP_BC_UNARY_OP,
-        [MP_BC_BINARY_OP] = &&entry_MP_BC_BINARY_OP,
-        [MP_BC_BUILD_TUPLE] = &&entry_MP_BC_BUILD_TUPLE,
-        [MP_BC_BUILD_LIST] = &&entry_MP_BC_BUILD_LIST,
-        [MP_BC_LIST_APPEND] = &&entry_MP_BC_LIST_APPEND,
-        [MP_BC_BUILD_MAP] = &&entry_MP_BC_BUILD_MAP,
-        [MP_BC_STORE_MAP] = &&entry_MP_BC_STORE_MAP,
-        [MP_BC_MAP_ADD] = &&entry_MP_BC_MAP_ADD,
-        [MP_BC_BUILD_SET] = &&entry_MP_BC_BUILD_SET,
-        [MP_BC_SET_ADD] = &&entry_MP_BC_SET_ADD,
-        [MP_BC_BUILD_SLICE] = &&entry_MP_BC_BUILD_SLICE,
-        [MP_BC_UNPACK_SEQUENCE] = &&entry_MP_BC_UNPACK_SEQUENCE,
-        [MP_BC_UNPACK_EX] = &&entry_MP_BC_UNPACK_EX,
-        [MP_BC_MAKE_FUNCTION] = &&entry_MP_BC_MAKE_FUNCTION,
-        [MP_BC_MAKE_FUNCTION_DEFARGS] = &&entry_MP_BC_MAKE_FUNCTION_DEFARGS,
-        [MP_BC_MAKE_CLOSURE] = &&entry_MP_BC_MAKE_CLOSURE,
-        [MP_BC_MAKE_CLOSURE_DEFARGS] = &&entry_MP_BC_MAKE_CLOSURE_DEFARGS,
-        [MP_BC_CALL_FUNCTION] = &&entry_MP_BC_CALL_FUNCTION,
-        [MP_BC_CALL_FUNCTION_VAR_KW] = &&entry_MP_BC_CALL_FUNCTION_VAR_KW,
-        [MP_BC_CALL_METHOD] = &&entry_MP_BC_CALL_METHOD,
-        [MP_BC_CALL_METHOD_VAR_KW] = &&entry_MP_BC_CALL_METHOD_VAR_KW,
-        [MP_BC_RETURN_VALUE] = &&entry_MP_BC_RETURN_VALUE,
-        [MP_BC_RAISE_VARARGS] = &&entry_MP_BC_RAISE_VARARGS,
-        [MP_BC_YIELD_VALUE] = &&entry_MP_BC_YIELD_VALUE,
-        [MP_BC_YIELD_FROM] = &&entry_MP_BC_YIELD_FROM,
-        [MP_BC_IMPORT_NAME] = &&entry_MP_BC_IMPORT_NAME,
-        [MP_BC_IMPORT_FROM] = &&entry_MP_BC_IMPORT_FROM,
-        [MP_BC_IMPORT_STAR] = &&entry_MP_BC_IMPORT_STAR,
-    };
+    #define ENTRY(op) entry_##op
+    #define ENTRY_DEFAULT entry_default
 #else
-#   define DISPATCH() break
-#   define ENTRY(op) case op
-#   define ENTRY_DEFAULT default
+    #define DISPATCH() break
+    #define ENTRY(op) case op
+    #define ENTRY_DEFAULT default
 #endif
 
     int op = 0;
@@ -299,7 +211,7 @@ outer_dispatch_loop:
             // loop to execute byte code
             for (;;) {
 dispatch_loop:
-#if MICROPY_USE_COMPUTED_GOTO
+#if MICROPY_USE_COMPUTED_GOTOS
                 DISPATCH();
 #else
                 save_ip = ip;
@@ -1005,8 +917,8 @@ yield:
                     nlr_pop();
                     fastn[0] = obj1;
                     return MP_VM_RETURN_EXCEPTION;
-#if !MICROPY_USE_COMPUTED_GOTO
-                }
+#if !MICROPY_USE_COMPUTED_GOTOS
+                } // switch
 #endif
             }
 
diff --git a/py/vmentrytable.h b/py/vmentrytable.h
new file mode 100644
index 0000000000000000000000000000000000000000..27b5638df54b9af159e36bdd4c8dbfca724b7ccb
--- /dev/null
+++ b/py/vmentrytable.h
@@ -0,0 +1,87 @@
+static void* entry_table[256] = {
+    [0 ... 255] = &&entry_default,
+    [MP_BC_LOAD_CONST_FALSE] = &&entry_MP_BC_LOAD_CONST_FALSE,
+    [MP_BC_LOAD_CONST_NONE] = &&entry_MP_BC_LOAD_CONST_NONE,
+    [MP_BC_LOAD_CONST_TRUE] = &&entry_MP_BC_LOAD_CONST_TRUE,
+    [MP_BC_LOAD_CONST_ELLIPSIS] = &&entry_MP_BC_LOAD_CONST_ELLIPSIS,
+    [MP_BC_LOAD_CONST_SMALL_INT] = &&entry_MP_BC_LOAD_CONST_SMALL_INT,
+    [MP_BC_LOAD_CONST_INT] = &&entry_MP_BC_LOAD_CONST_INT,
+    [MP_BC_LOAD_CONST_DEC] = &&entry_MP_BC_LOAD_CONST_DEC,
+    [MP_BC_LOAD_CONST_ID] = &&entry_MP_BC_LOAD_CONST_ID,
+    [MP_BC_LOAD_CONST_BYTES] = &&entry_MP_BC_LOAD_CONST_BYTES,
+    [MP_BC_LOAD_CONST_STRING] = &&entry_MP_BC_LOAD_CONST_STRING,
+    [MP_BC_LOAD_NULL] = &&entry_MP_BC_LOAD_NULL,
+    [MP_BC_LOAD_FAST_0] = &&entry_MP_BC_LOAD_FAST_0,
+    [MP_BC_LOAD_FAST_1] = &&entry_MP_BC_LOAD_FAST_1,
+    [MP_BC_LOAD_FAST_2] = &&entry_MP_BC_LOAD_FAST_2,
+    [MP_BC_LOAD_FAST_N] = &&entry_MP_BC_LOAD_FAST_N,
+    [MP_BC_LOAD_DEREF] = &&entry_MP_BC_LOAD_DEREF,
+    [MP_BC_LOAD_NAME] = &&entry_MP_BC_LOAD_NAME,
+    [MP_BC_LOAD_GLOBAL] = &&entry_MP_BC_LOAD_GLOBAL,
+    [MP_BC_LOAD_ATTR] = &&entry_MP_BC_LOAD_ATTR,
+    [MP_BC_LOAD_METHOD] = &&entry_MP_BC_LOAD_METHOD,
+    [MP_BC_LOAD_BUILD_CLASS] = &&entry_MP_BC_LOAD_BUILD_CLASS,
+    [MP_BC_STORE_FAST_0] = &&entry_MP_BC_STORE_FAST_0,
+    [MP_BC_STORE_FAST_1] = &&entry_MP_BC_STORE_FAST_1,
+    [MP_BC_STORE_FAST_2] = &&entry_MP_BC_STORE_FAST_2,
+    [MP_BC_STORE_FAST_N] = &&entry_MP_BC_STORE_FAST_N,
+    [MP_BC_STORE_DEREF] = &&entry_MP_BC_STORE_DEREF,
+    [MP_BC_STORE_NAME] = &&entry_MP_BC_STORE_NAME,
+    [MP_BC_STORE_GLOBAL] = &&entry_MP_BC_STORE_GLOBAL,
+    [MP_BC_STORE_ATTR] = &&entry_MP_BC_STORE_ATTR,
+    [MP_BC_STORE_SUBSCR] = &&entry_MP_BC_STORE_SUBSCR,
+    [MP_BC_DELETE_FAST] = &&entry_MP_BC_DELETE_FAST,
+    [MP_BC_DELETE_DEREF] = &&entry_MP_BC_DELETE_DEREF,
+    [MP_BC_DELETE_NAME] = &&entry_MP_BC_DELETE_NAME,
+    [MP_BC_DELETE_GLOBAL] = &&entry_MP_BC_DELETE_GLOBAL,
+    [MP_BC_DUP_TOP] = &&entry_MP_BC_DUP_TOP,
+    [MP_BC_DUP_TOP_TWO] = &&entry_MP_BC_DUP_TOP_TWO,
+    [MP_BC_POP_TOP] = &&entry_MP_BC_POP_TOP,
+    [MP_BC_ROT_TWO] = &&entry_MP_BC_ROT_TWO,
+    [MP_BC_ROT_THREE] = &&entry_MP_BC_ROT_THREE,
+    [MP_BC_JUMP] = &&entry_MP_BC_JUMP,
+    [MP_BC_POP_JUMP_IF_TRUE] = &&entry_MP_BC_POP_JUMP_IF_TRUE,
+    [MP_BC_POP_JUMP_IF_FALSE] = &&entry_MP_BC_POP_JUMP_IF_FALSE,
+    [MP_BC_JUMP_IF_TRUE_OR_POP] = &&entry_MP_BC_JUMP_IF_TRUE_OR_POP,
+    [MP_BC_JUMP_IF_FALSE_OR_POP] = &&entry_MP_BC_JUMP_IF_FALSE_OR_POP,
+//        [MP_BC_SETUP_LOOP] = &&entry_MP_BC_SETUP_LOOP,
+    [MP_BC_SETUP_WITH] = &&entry_MP_BC_SETUP_WITH,
+    [MP_BC_WITH_CLEANUP] = &&entry_MP_BC_WITH_CLEANUP,
+    [MP_BC_UNWIND_JUMP] = &&entry_MP_BC_UNWIND_JUMP,
+    [MP_BC_SETUP_EXCEPT] = &&entry_MP_BC_SETUP_EXCEPT,
+    [MP_BC_SETUP_FINALLY] = &&entry_MP_BC_SETUP_FINALLY,
+    [MP_BC_END_FINALLY] = &&entry_MP_BC_END_FINALLY,
+    [MP_BC_GET_ITER] = &&entry_MP_BC_GET_ITER,
+    [MP_BC_FOR_ITER] = &&entry_MP_BC_FOR_ITER,
+    [MP_BC_POP_BLOCK] = &&entry_MP_BC_POP_BLOCK,
+    [MP_BC_POP_EXCEPT] = &&entry_MP_BC_POP_EXCEPT,
+    [MP_BC_NOT] = &&entry_MP_BC_NOT,
+    [MP_BC_UNARY_OP] = &&entry_MP_BC_UNARY_OP,
+    [MP_BC_BINARY_OP] = &&entry_MP_BC_BINARY_OP,
+    [MP_BC_BUILD_TUPLE] = &&entry_MP_BC_BUILD_TUPLE,
+    [MP_BC_BUILD_LIST] = &&entry_MP_BC_BUILD_LIST,
+    [MP_BC_LIST_APPEND] = &&entry_MP_BC_LIST_APPEND,
+    [MP_BC_BUILD_MAP] = &&entry_MP_BC_BUILD_MAP,
+    [MP_BC_STORE_MAP] = &&entry_MP_BC_STORE_MAP,
+    [MP_BC_MAP_ADD] = &&entry_MP_BC_MAP_ADD,
+    [MP_BC_BUILD_SET] = &&entry_MP_BC_BUILD_SET,
+    [MP_BC_SET_ADD] = &&entry_MP_BC_SET_ADD,
+    [MP_BC_BUILD_SLICE] = &&entry_MP_BC_BUILD_SLICE,
+    [MP_BC_UNPACK_SEQUENCE] = &&entry_MP_BC_UNPACK_SEQUENCE,
+    [MP_BC_UNPACK_EX] = &&entry_MP_BC_UNPACK_EX,
+    [MP_BC_MAKE_FUNCTION] = &&entry_MP_BC_MAKE_FUNCTION,
+    [MP_BC_MAKE_FUNCTION_DEFARGS] = &&entry_MP_BC_MAKE_FUNCTION_DEFARGS,
+    [MP_BC_MAKE_CLOSURE] = &&entry_MP_BC_MAKE_CLOSURE,
+    [MP_BC_MAKE_CLOSURE_DEFARGS] = &&entry_MP_BC_MAKE_CLOSURE_DEFARGS,
+    [MP_BC_CALL_FUNCTION] = &&entry_MP_BC_CALL_FUNCTION,
+    [MP_BC_CALL_FUNCTION_VAR_KW] = &&entry_MP_BC_CALL_FUNCTION_VAR_KW,
+    [MP_BC_CALL_METHOD] = &&entry_MP_BC_CALL_METHOD,
+    [MP_BC_CALL_METHOD_VAR_KW] = &&entry_MP_BC_CALL_METHOD_VAR_KW,
+    [MP_BC_RETURN_VALUE] = &&entry_MP_BC_RETURN_VALUE,
+    [MP_BC_RAISE_VARARGS] = &&entry_MP_BC_RAISE_VARARGS,
+    [MP_BC_YIELD_VALUE] = &&entry_MP_BC_YIELD_VALUE,
+    [MP_BC_YIELD_FROM] = &&entry_MP_BC_YIELD_FROM,
+    [MP_BC_IMPORT_NAME] = &&entry_MP_BC_IMPORT_NAME,
+    [MP_BC_IMPORT_FROM] = &&entry_MP_BC_IMPORT_FROM,
+    [MP_BC_IMPORT_STAR] = &&entry_MP_BC_IMPORT_STAR,
+};
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index 75f119e9184873de1f54b26513a4ef7afe6afd34..9c91b757a827c4d3a9418f5406e1f1cb0fc78c75 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -14,7 +14,7 @@
 #define MICROPY_FLOAT_IMPL          (MICROPY_FLOAT_IMPL_DOUBLE)
 #define MICROPY_LONGINT_IMPL        (MICROPY_LONGINT_IMPL_MPZ)
 #define MICROPY_PATH_MAX            (PATH_MAX)
-#define MICROPY_USE_COMPUTED_GOTO   (1)
+#define MICROPY_USE_COMPUTED_GOTOS  (1)
 #define MICROPY_MOD_SYS_STDFILES    (1)
 
 // type definitions for the specific machine