summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-06-22 01:14:28 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-06-22 01:40:45 +0300
commita96cc824bdacb34ced0edef523181c215fba313b (patch)
tree8fc6088d486ce71fae5f9bd1bb05af77d5558edd
parent59c675a64c1d9757d50ad4627da67a6f996a99fb (diff)
downloadmicropython-a96cc824bdacb34ced0edef523181c215fba313b.tar.gz
micropython-a96cc824bdacb34ced0edef523181c215fba313b.zip
py: Support arm and thumb ARM ISAs, in addition to thumb2.
These changes were tested with QEMU, and by few people of real hardware.
-rw-r--r--py/nlr.h2
-rw-r--r--py/nlrthumb.S12
-rw-r--r--unix/gccollect.c2
3 files changed, 11 insertions, 5 deletions
diff --git a/py/nlr.h b/py/nlr.h
index 83ab251344..cb2b53b854 100644
--- a/py/nlr.h
+++ b/py/nlr.h
@@ -45,7 +45,7 @@ struct _nlr_buf_t {
#else
void *regs[8];
#endif
-#elif defined(__thumb2__)
+#elif defined(__thumb2__) || defined(__thumb__) || defined(__arm__)
void *regs[10];
#else
#define MICROPY_NLR_SETJMP (1)
diff --git a/py/nlrthumb.S b/py/nlrthumb.S
index b306c01753..dabf57cf85 100644
--- a/py/nlrthumb.S
+++ b/py/nlrthumb.S
@@ -24,19 +24,21 @@
* THE SOFTWARE.
*/
-#if defined(__thumb2__) && !MICROPY_NLR_SETJMP
-/* thumb callee save: bx, bp, sp, r12, r14, r14, r15 */
+#if !MICROPY_NLR_SETJMP && (defined(__thumb2__) || defined(__thumb__) || defined(__arm__))
+/* arm callee save: bx, bp, sp, r12, r14, r14, r15 */
.syntax unified
/*.cpu cortex-m4*/
- .thumb
+ /*.thumb*/
.text
.align 2
/* uint nlr_push(r0=nlr_buf_t *nlr) */
.global nlr_push
+#if defined(__thumb2__)
.thumb
.thumb_func
+#endif
.type nlr_push, %function
nlr_push:
str lr, [r0, #8] @ store lr into nlr_buf
@@ -64,8 +66,10 @@ nlr_push:
@ void nlr_pop()
.global nlr_pop
+#if defined(__thumb2__)
.thumb
.thumb_func
+#endif
.type nlr_pop, %function
nlr_pop:
ldr r3, .L5 @ load addr of nlr_top
@@ -80,8 +84,10 @@ nlr_pop:
/* void nlr_jump(r0=uint val) */
.global nlr_jump
+#if defined(__thumb2__)
.thumb
.thumb_func
+#endif
.type nlr_jump, %function
nlr_jump:
ldr r3, .L2 @ load addr of nlr_top
diff --git a/unix/gccollect.c b/unix/gccollect.c
index 4f3b786e72..1014a2629b 100644
--- a/unix/gccollect.c
+++ b/unix/gccollect.c
@@ -97,7 +97,7 @@ void gc_helper_get_regs(regs_t arr) {
}
#endif
-#ifdef __thumb2__
+#if defined(__thumb2__) || defined(__thumb__) || defined(__arm__)
typedef machine_uint_t regs_t[10];
void gc_helper_get_regs(regs_t arr) {