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)