summaryrefslogtreecommitdiff
path: root/py/mpconfig.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2020-01-09 00:00:27 +1100
committerDamien George <damien.p.george@gmail.com>2020-01-13 01:01:45 +1100
commitd96cfd13e3a464862cecffb2718c6286b52c77b0 (patch)
treeaf399f8a18175155be1dfef08bc4ac51118b8bf8 /py/mpconfig.h
parent6f0c83f6e186eb163c4209f211ab1c959d255e81 (diff)
py/obj: Add MICROPY_OBJ_IMMEDIATE_OBJS option to reduce code size.
This option (enabled by default for object representation A, B, C) makes None/False/True objects immediate objects, ie they are no longer a concrete object in ROM but are rather just values, eg None=0x6 for representation A. Doing this saves a considerable amount of code size, due to these objects being widely used: bare-arm: -392 -0.591% minimal x86: -252 -0.170% [incl +52(data)] unix x64: -624 -0.125% [incl -128(data)] unix nanbox: +0 +0.000% stm32: -1940 -0.510% PYBV10 cc3200: -1216 -0.659% esp8266: -404 -0.062% GENERIC esp32: -732 -0.064% GENERIC[incl +48(data)] nrf: -988 -0.675% pca10040 samd: -564 -0.556% ADAFRUIT_ITSYBITSY_M4_EXPRESS Thanks go to @Jongy aka Yonatan Goldschmidt for the idea.
Diffstat (limited to 'py/mpconfig.h')
-rw-r--r--py/mpconfig.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/py/mpconfig.h b/py/mpconfig.h
index d4a9f3c50..5601cc2f7 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -113,6 +113,13 @@
#define MICROPY_OBJ_REPR (MICROPY_OBJ_REPR_A)
#endif
+// Whether to encode None/False/True as immediate objects instead of pointers to
+// real objects. Reduces code size by a decent amount without hurting
+// performance, for all representations except D on some architectures.
+#ifndef MICROPY_OBJ_IMMEDIATE_OBJS
+#define MICROPY_OBJ_IMMEDIATE_OBJS (MICROPY_OBJ_REPR != MICROPY_OBJ_REPR_D)
+#endif
+
/*****************************************************************************/
/* Memory allocation policy */