From bd9975a8ab346d88b02576f16b70e810b520d1e2 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 17 Jul 2018 12:32:47 -0400 Subject: [PATCH] target/arm: Fix LD1W and LDFF1W (scalar plus vector) 'I' was being double-incremented; correctly within the inner loop and incorrectly within the outer loop. Backports commit 628fc75f3a3bb115de3b445c1a18547c44613cfe from qemu --- qemu/target/arm/sve_helper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qemu/target/arm/sve_helper.c b/qemu/target/arm/sve_helper.c index 93c0dd08..f18aacd1 100644 --- a/qemu/target/arm/sve_helper.c +++ b/qemu/target/arm/sve_helper.c @@ -4456,7 +4456,7 @@ void HELPER(NAME)(CPUARMState *env, void *vd, void *vg, void *vm, \ intptr_t i, oprsz = simd_oprsz(desc); \ unsigned scale = simd_data(desc); \ uintptr_t ra = GETPC(); \ - for (i = 0; i < oprsz; i++) { \ + for (i = 0; i < oprsz; ) { \ uint16_t pg = *(uint16_t *)(vg + H1_2(i >> 3)); \ do { \ TYPEM m = 0; \ @@ -4537,7 +4537,7 @@ void HELPER(NAME)(CPUARMState *env, void *vd, void *vg, void *vm, \ uintptr_t ra = GETPC(); \ bool first = true; \ mmap_lock(); \ - for (i = 0; i < oprsz; i++) { \ + for (i = 0; i < oprsz; ) { \ uint16_t pg = *(uint16_t *)(vg + H1_2(i >> 3)); \ do { \ TYPEM m = 0; \