summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authoradminpete <peter@hinch.me.uk>2015-10-31 09:38:22 +0000
committerDamien George <damien.p.george@gmail.com>2015-10-31 10:50:45 +0000
commitd6201fc4b74e78e7eb9cec91c444884df2efbb7c (patch)
tree4faba6b9e25dd22a4bbcf9ba4c945e579acd6fab
parent165734522ee48f4452125d9c56b1a9e41d24f630 (diff)
downloadmicropython-d6201fc4b74e78e7eb9cec91c444884df2efbb7c.tar.gz
micropython-d6201fc4b74e78e7eb9cec91c444884df2efbb7c.zip
py: In inline asm, vldr and vstr offsets now in bytes not words.
As per ARM convention.
-rw-r--r--py/emitinlinethumb.c2
-rw-r--r--tests/inlineasm/asmfpldrstr.py4
2 files changed, 3 insertions, 3 deletions
diff --git a/py/emitinlinethumb.c b/py/emitinlinethumb.c
index c7310d7422..6e341d0b0a 100644
--- a/py/emitinlinethumb.c
+++ b/py/emitinlinethumb.c
@@ -473,7 +473,7 @@ STATIC void emit_inline_thumb_op(emit_inline_asm_t *emit, qstr op, mp_uint_t n_a
if (get_arg_addr(emit, op_str, pn_args[1], &pn_base, &pn_offset)) {
mp_uint_t rlo_base = get_arg_reg(emit, op_str, pn_base, 7);
mp_uint_t i8;
- i8 = get_arg_i(emit, op_str, pn_offset, 0xff);
+ i8 = get_arg_i(emit, op_str, pn_offset, 0x3fc) >> 2;
asm_thumb_op32(emit->as,
op_code_hi | rlo_base | ((vd & 1) << 6),
0x0a00 | ((vd & 0x1e) << 11) | i8);
diff --git a/tests/inlineasm/asmfpldrstr.py b/tests/inlineasm/asmfpldrstr.py
index 75054a6796..8fa9af6369 100644
--- a/tests/inlineasm/asmfpldrstr.py
+++ b/tests/inlineasm/asmfpldrstr.py
@@ -2,9 +2,9 @@ import array
@micropython.asm_thumb # test vldr, vstr
def arrayadd(r0):
vldr(s0, [r0, 0])
- vldr(s1, [r0, 1])
+ vldr(s1, [r0, 4])
vadd(s2, s0, s1)
- vstr(s2, [r0, 2])
+ vstr(s2, [r0, 8])
z = array.array("f", [2, 4, 10])
arrayadd(z)