On Sat, 25 May 2024 at 00:27, Richard Henderson <richard.hender...@linaro.org> wrote: > > These are the last instructions within disas_simd_three_reg_same > and disas_simd_scalar_three_reg_same, so remove them. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
> diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c > index d8e96386be..b05922b425 100644 > --- a/target/arm/tcg/vec_helper.c > +++ b/target/arm/tcg/vec_helper.c > @@ -311,6 +311,38 @@ void HELPER(neon_sqrdmulh_h)(void *vd, void *vn, void > *vm, > clear_tail(d, opr_sz, simd_maxsz(desc)); > } > > +void HELPER(neon_sqdmulh_idx_h)(void *vd, void *vn, void *vm, > + void *vq, uint32_t desc) > +{ > + intptr_t i, j, opr_sz = simd_oprsz(desc); > + int idx = simd_data(desc); > + int16_t *d = vd, *n = vn, *m = (int16_t *)vm + H2(idx); > + > + for (i = 0; i < opr_sz / 2; i += 16 / 2) { > + int16_t mm = m[i]; > + for (j = 0; j < 16 / 2; ++j) { > + d[i + j] = do_sqrdmlah_h(n[i + j], mm, 0, false, false, vq); > + } > + } > + clear_tail(d, opr_sz, simd_maxsz(desc)); > +} > + > +void HELPER(neon_sqrdmulh_idx_h)(void *vd, void *vn, void *vm, > + void *vq, uint32_t desc) > +{ > + intptr_t i, j, opr_sz = simd_oprsz(desc); > + int idx = simd_data(desc); > + int16_t *d = vd, *n = vn, *m = (int16_t *)vm + H2(idx); > + > + for (i = 0; i < opr_sz / 2; i += 16 / 2) { > + int16_t mm = m[i]; > + for (j = 0; j < 16 / 2; ++j) { > + d[i + j] = do_sqrdmlah_h(n[i + j], mm, 0, false, true, vq); > + } > + } > + clear_tail(d, opr_sz, simd_maxsz(desc)); > +} > + > void HELPER(sve2_sqrdmlah_h)(void *vd, void *vn, void *vm, > void *va, uint32_t desc) > { > @@ -474,6 +506,38 @@ void HELPER(neon_sqrdmulh_s)(void *vd, void *vn, void > *vm, > clear_tail(d, opr_sz, simd_maxsz(desc)); > } > > +void HELPER(neon_sqdmulh_idx_s)(void *vd, void *vn, void *vm, > + void *vq, uint32_t desc) > +{ > + intptr_t i, j, opr_sz = simd_oprsz(desc); > + int idx = simd_data(desc); > + int32_t *d = vd, *n = vn, *m = (int32_t *)vm + H4(idx); > + > + for (i = 0; i < opr_sz / 4; i += 16 / 4) { > + int32_t mm = m[i]; > + for (j = 0; j < 16 / 4; ++j) { > + d[i + j] = do_sqrdmlah_s(n[i + j], mm, 0, false, false, vq); > + } > + } > + clear_tail(d, opr_sz, simd_maxsz(desc)); > +} > + > +void HELPER(neon_sqrdmulh_idx_s)(void *vd, void *vn, void *vm, > + void *vq, uint32_t desc) > +{ > + intptr_t i, j, opr_sz = simd_oprsz(desc); > + int idx = simd_data(desc); > + int32_t *d = vd, *n = vn, *m = (int32_t *)vm + H4(idx); > + > + for (i = 0; i < opr_sz / 4; i += 16 / 4) { > + int32_t mm = m[i]; > + for (j = 0; j < 16 / 4; ++j) { > + d[i + j] = do_sqrdmlah_s(n[i + j], mm, 0, false, true, vq); > + } > + } > + clear_tail(d, opr_sz, simd_maxsz(desc)); > +} Missing H macros in these helpers ? thanks -- PMM