summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bare-arm/mpconfigport.h2
-rw-r--r--minimal/mpconfigport.h2
-rw-r--r--py/compile.c6
-rw-r--r--py/mpconfig.h12
-rw-r--r--stmhal/mpconfigport.h1
-rw-r--r--unix-cpy/mpconfigport.h1
-rw-r--r--unix/mpconfigport.h1
-rw-r--r--windows/mpconfigport.h1
8 files changed, 24 insertions, 2 deletions
diff --git a/bare-arm/mpconfigport.h b/bare-arm/mpconfigport.h
index e9a755294..7b8f8168b 100644
--- a/bare-arm/mpconfigport.h
+++ b/bare-arm/mpconfigport.h
@@ -8,6 +8,8 @@
#define MICROPY_EMIT_INLINE_THUMB (0)
#define MICROPY_COMP_MODULE_CONST (0)
#define MICROPY_COMP_CONST (0)
+#define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (0)
+#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (0)
#define MICROPY_MEM_STATS (0)
#define MICROPY_DEBUG_PRINTERS (0)
#define MICROPY_ENABLE_GC (0)
diff --git a/minimal/mpconfigport.h b/minimal/mpconfigport.h
index 4addae578..188a00958 100644
--- a/minimal/mpconfigport.h
+++ b/minimal/mpconfigport.h
@@ -8,6 +8,8 @@
#define MICROPY_EMIT_INLINE_THUMB (0)
#define MICROPY_COMP_MODULE_CONST (0)
#define MICROPY_COMP_CONST (0)
+#define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (0)
+#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (0)
#define MICROPY_MEM_STATS (0)
#define MICROPY_DEBUG_PRINTERS (0)
#define MICROPY_ENABLE_GC (1)
diff --git a/py/compile.c b/py/compile.c
index 38f4eb18d..d95d8f73b 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -2165,7 +2165,8 @@ STATIC void compile_expr_stmt(compiler_t *comp, mp_parse_node_struct_t *pns) {
}
} else {
assert(kind == PN_expr_stmt_assign); // should be
- if (MP_PARSE_NODE_IS_STRUCT_KIND(pns1->nodes[0], PN_testlist_star_expr)
+ if (MICROPY_COMP_DOUBLE_TUPLE_ASSIGN
+ && MP_PARSE_NODE_IS_STRUCT_KIND(pns1->nodes[0], PN_testlist_star_expr)
&& MP_PARSE_NODE_IS_STRUCT_KIND(pns->nodes[0], PN_testlist_star_expr)
&& MP_PARSE_NODE_STRUCT_NUM_NODES((mp_parse_node_struct_t*)pns1->nodes[0]) == 2
&& MP_PARSE_NODE_STRUCT_NUM_NODES((mp_parse_node_struct_t*)pns->nodes[0]) == 2) {
@@ -2182,7 +2183,8 @@ STATIC void compile_expr_stmt(compiler_t *comp, mp_parse_node_struct_t *pns) {
EMIT(rot_two);
c_assign(comp, pns0->nodes[0], ASSIGN_STORE); // lhs store
c_assign(comp, pns0->nodes[1], ASSIGN_STORE); // lhs store
- } else if (MP_PARSE_NODE_IS_STRUCT_KIND(pns1->nodes[0], PN_testlist_star_expr)
+ } else if (MICROPY_COMP_TRIPLE_TUPLE_ASSIGN
+ && MP_PARSE_NODE_IS_STRUCT_KIND(pns1->nodes[0], PN_testlist_star_expr)
&& MP_PARSE_NODE_IS_STRUCT_KIND(pns->nodes[0], PN_testlist_star_expr)
&& MP_PARSE_NODE_STRUCT_NUM_NODES((mp_parse_node_struct_t*)pns1->nodes[0]) == 3
&& MP_PARSE_NODE_STRUCT_NUM_NODES((mp_parse_node_struct_t*)pns->nodes[0]) == 3) {
diff --git a/py/mpconfig.h b/py/mpconfig.h
index bfa412167..aac3ade08 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -175,6 +175,18 @@
#define MICROPY_COMP_CONST (1)
#endif
+// Whether to enable optimisation of: a, b = c, d
+// Costs 124 bytes (Thumb2)
+#ifndef MICROPY_COMP_DOUBLE_TUPLE_ASSIGN
+#define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (1)
+#endif
+
+// Whether to enable optimisation of: a, b, c = d, e, f
+// Cost 156 bytes (Thumb2)
+#ifndef MICROPY_COMP_TRIPLE_TUPLE_ASSIGN
+#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (0)
+#endif
+
/*****************************************************************************/
/* Internal debugging stuff */
diff --git a/stmhal/mpconfigport.h b/stmhal/mpconfigport.h
index b353fd72a..c1420da5c 100644
--- a/stmhal/mpconfigport.h
+++ b/stmhal/mpconfigport.h
@@ -34,6 +34,7 @@
#define MICROPY_EMIT_THUMB (1)
#define MICROPY_EMIT_INLINE_THUMB (1)
#define MICROPY_COMP_MODULE_CONST (1)
+#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1)
#define MICROPY_ENABLE_GC (1)
#define MICROPY_ENABLE_FINALISER (1)
#define MICROPY_STACK_CHECK (1)
diff --git a/unix-cpy/mpconfigport.h b/unix-cpy/mpconfigport.h
index 2c1d5d7b2..9d446b68a 100644
--- a/unix-cpy/mpconfigport.h
+++ b/unix-cpy/mpconfigport.h
@@ -27,6 +27,7 @@
// options to control how Micro Python is built
#define MICROPY_EMIT_CPYTHON (1)
+#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1)
#define MICROPY_HELPER_LEXER_UNIX (1)
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_DOUBLE)
#define MICROPY_PY_IO (0)
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index 7eb4d548f..c8ba26897 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -40,6 +40,7 @@
#define MICROPY_EMIT_ARM (1)
#endif
#define MICROPY_COMP_MODULE_CONST (1)
+#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1)
#define MICROPY_ENABLE_GC (1)
#define MICROPY_ENABLE_FINALISER (1)
#define MICROPY_STACK_CHECK (1)
diff --git a/windows/mpconfigport.h b/windows/mpconfigport.h
index 4ae0bbfb1..6e342f0d3 100644
--- a/windows/mpconfigport.h
+++ b/windows/mpconfigport.h
@@ -36,6 +36,7 @@
#define MICROPY_EMIT_THUMB (0)
#define MICROPY_EMIT_INLINE_THUMB (0)
#define MICROPY_COMP_MODULE_CONST (1)
+#define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1)
#define MICROPY_ENABLE_GC (1)
#define MICROPY_ENABLE_FINALISER (1)
#define MICROPY_STACK_CHECK (1)