summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-09-01 15:25:29 +1000
committerDamien George <damien.p.george@gmail.com>2017-09-01 15:25:29 +1000
commitdd376a239dc4f47b0ee7866810fcda151f3cf6dd (patch)
treed19281d8820658791b9d2650fa3e19ba5a7ddf49
parent860eeeea9b3a56e15e9adf9128548a4df4775d9d (diff)
downloadmicropython-dd376a239dc4f47b0ee7866810fcda151f3cf6dd.tar.gz
micropython-dd376a239dc4f47b0ee7866810fcda151f3cf6dd.zip
py/nlrthumb: Get working again on standard Thumb arch (ie not Thumb2).
"b" on Thumb might not be long enough for the jump to nlr_push_tail so it must be done indirectly.
-rw-r--r--py/nlrthumb.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/py/nlrthumb.c b/py/nlrthumb.c
index 08a71ac7d6..8ff1bb2d22 100644
--- a/py/nlrthumb.c
+++ b/py/nlrthumb.c
@@ -67,7 +67,14 @@ __attribute__((naked)) unsigned int nlr_push(nlr_buf_t *nlr) {
"str lr, [r0, #8] \n" // store lr into nlr_buf
#endif
+#if defined(__ARM_ARCH_6M__)
+ "ldr r1, nlr_push_tail_var \n"
+ "bx r1 \n" // do the rest in C
+ ".align 2 \n"
+ "nlr_push_tail_var: .word nlr_push_tail \n"
+#else
"b nlr_push_tail \n" // do the rest in C
+#endif
);
return 0; // needed to silence compiler warning