summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/bc.h1
-rw-r--r--py/py.mk7
-rw-r--r--py/showbc.c6
-rw-r--r--py/vm.c7
-rw-r--r--windows/README2
5 files changed, 20 insertions, 3 deletions
diff --git a/py/bc.h b/py/bc.h
index fb672ea03b..964c29f045 100644
--- a/py/bc.h
+++ b/py/bc.h
@@ -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)))
diff --git a/py/py.mk b/py/py.mk
index 5b0dd3d3a8..aa282b3808 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -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) {
diff --git a/py/vm.c b/py/vm.c
index b1c1719b72..8a0bc7dbe8 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -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.