diff options
-rw-r--r-- | py/bc.h | 1 | ||||
-rw-r--r-- | py/py.mk | 7 | ||||
-rw-r--r-- | py/showbc.c | 6 | ||||
-rw-r--r-- | py/vm.c | 7 | ||||
-rw-r--r-- | windows/README | 2 |
5 files changed, 20 insertions, 3 deletions
@@ -13,6 +13,7 @@ typedef struct _mp_exc_stack { mp_vm_return_kind_t mp_execute_byte_code(const byte *code, const mp_obj_t *args, uint n_args, const mp_obj_t *args2, uint n_args2, mp_obj_t *ret); mp_vm_return_kind_t mp_execute_byte_code_2(const byte *code_info, const byte **ip_in_out, mp_obj_t *fastn, mp_obj_t **sp_in_out, mp_exc_stack_t *exc_stack, mp_exc_stack_t **exc_sp_in_out, volatile mp_obj_t inject_exc); void mp_byte_code_print(const byte *code, int len); +void mp_byte_code_print2(const byte *code, int len); // Helper macros to access pointer with least significant bit holding a flag #define MP_TAGPTR_PTR(x) ((void*)((machine_uint_t)(x) & ~((machine_uint_t)1))) @@ -7,6 +7,9 @@ HEADER_BUILD = $(BUILD)/genhdr # file containing qstr defs for the core Python bit PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h +# some code is performance bottleneck and compiled with other optimization options +CSUPEROPT = -O3 + # py object files PY_O_BASENAME = \ nlrx86.o \ @@ -135,8 +138,8 @@ $(PY_BUILD)/emitnthumb.o: py/emitnative.c $(call compile_c) # optimising gc for speed; 5ms down to 4ms on pybv2 -$(PY_BUILD)/gc.o: CFLAGS += -O3 +$(PY_BUILD)/gc.o: CFLAGS += $(CSUPEROPT) # optimising vm for speed, adds only a small amount to code size but makes a huge difference to speed (20% faster) -$(PY_BUILD)/vm.o: CFLAGS += -O3 +$(PY_BUILD)/vm.o: CFLAGS += $(CSUPEROPT) diff --git a/py/showbc.c b/py/showbc.c index 2adbd01beb..17cb2eadd6 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -28,6 +28,8 @@ ip += sizeof(machine_uint_t); \ } while (0) +void mp_byte_code_print2(const byte *ip, int len); + void mp_byte_code_print(const byte *ip, int len) { const byte *ip_start = ip; @@ -71,7 +73,11 @@ void mp_byte_code_print(const byte *ip, int len) { printf(" bc=" INT_FMT " line=" UINT_FMT "\n", bc, source_line); } } + mp_byte_code_print2(ip, len - 0); +} +void mp_byte_code_print2(const byte *ip, int len) { + const byte *ip_start = ip; machine_uint_t unum; qstr qstr; while (ip - ip_start < len) { @@ -14,6 +14,11 @@ #include "objgenerator.h" #define DETECT_VM_STACK_OVERFLOW (0) +#if 0 +#define TRACE(ip) mp_byte_code_print2(ip, 1); +#else +#define TRACE(ip) +#endif // Value stack grows up (this makes it incompatible with native C stack, but // makes sure that arguments to functions are in natural order arg1..argN @@ -168,6 +173,7 @@ mp_vm_return_kind_t mp_execute_byte_code_2(const byte *code_info, const byte **i #if MICROPY_USE_COMPUTED_GOTO #include "vmentrytable.h" #define DISPATCH() do { \ + TRACE(ip); \ save_ip = ip; \ op = *ip++; \ goto *entry_table[op]; \ @@ -223,6 +229,7 @@ dispatch_loop: #if MICROPY_USE_COMPUTED_GOTO DISPATCH(); #else + TRACE(ip); save_ip = ip; op = *ip++; diff --git a/windows/README b/windows/README index 615ada2012..28940f2c3d 100644 --- a/windows/README +++ b/windows/README @@ -4,7 +4,7 @@ It is based on Unix port, and expected to remain so. To cross-compile under Debian/Ubuntu Linux system: sudo apt-get install mingw32 mingw32-binutils mingw32-runtime -make CC=i586-mingw32msvc-gcc +make CROSS_COMPILE=i586-mingw32msvc- The port requires additional testing, debugging, and patches. Please consider to contribute. |