Skip to content

Commit 10b9e0c

Browse files
rth7680Michael Tokarev
authored andcommitted
target/arm: Fix VCMLA Dd, Dn, Dm[idx]
The inner loop, bounded by eltspersegment, must not be larger than the outer loop, bounded by elements. Cc: [email protected] Fixes: 18fc240 ("target/arm: Implement SVE fp complex multiply add (indexed)") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2376 Reviewed-by: Peter Maydell <[email protected]> Signed-off-by: Richard Henderson <[email protected]> Message-id: [email protected] Signed-off-by: Peter Maydell <[email protected]> (cherry picked from commit 76bccf3) Signed-off-by: Michael Tokarev <[email protected]>
1 parent 50a8a6b commit 10b9e0c

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

target/arm/tcg/vec_helper.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@ void HELPER(gvec_fcmlah_idx)(void *vd, void *vn, void *vm, void *va,
843843
intptr_t index = extract32(desc, SIMD_DATA_SHIFT + 2, 2);
844844
uint32_t neg_real = flip ^ neg_imag;
845845
intptr_t elements = opr_sz / sizeof(float16);
846-
intptr_t eltspersegment = 16 / sizeof(float16);
846+
intptr_t eltspersegment = MIN(16 / sizeof(float16), elements);
847847
intptr_t i, j;
848848

849849
/* Shift boolean to the sign bit so we can xor to negate. */
@@ -905,7 +905,7 @@ void HELPER(gvec_fcmlas_idx)(void *vd, void *vn, void *vm, void *va,
905905
intptr_t index = extract32(desc, SIMD_DATA_SHIFT + 2, 2);
906906
uint32_t neg_real = flip ^ neg_imag;
907907
intptr_t elements = opr_sz / sizeof(float32);
908-
intptr_t eltspersegment = 16 / sizeof(float32);
908+
intptr_t eltspersegment = MIN(16 / sizeof(float32), elements);
909909
intptr_t i, j;
910910

911911
/* Shift boolean to the sign bit so we can xor to negate. */

0 commit comments

Comments
 (0)