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
---
target/arm/helper.h| 10 ++
target/arm/tcg/a64.decode | 18 +++
target/arm/tcg/translate-a64.c | 276 ++---
target/arm/tcg/vec_helper.c| 64
4 files changed, 172 insertions(+), 196 deletions(-)
diff --git a/target/arm/helper.h b/target/arm/helper.h
index 85f9302563..24feecee9b 100644
--- a/target/arm/helper.h
+++ b/target/arm/helper.h
@@ -968,6 +968,16 @@ DEF_HELPER_FLAGS_5(neon_sqrdmulh_h, TCG_CALL_NO_RWG,
DEF_HELPER_FLAGS_5(neon_sqrdmulh_s, TCG_CALL_NO_RWG,
void, ptr, ptr, ptr, ptr, i32)
+DEF_HELPER_FLAGS_5(neon_sqdmulh_idx_h, TCG_CALL_NO_RWG,
+ void, ptr, ptr, ptr, ptr, i32)
+DEF_HELPER_FLAGS_5(neon_sqdmulh_idx_s, TCG_CALL_NO_RWG,
+ void, ptr, ptr, ptr, ptr, i32)
+
+DEF_HELPER_FLAGS_5(neon_sqrdmulh_idx_h, TCG_CALL_NO_RWG,
+ void, ptr, ptr, ptr, ptr, i32)
+DEF_HELPER_FLAGS_5(neon_sqrdmulh_idx_s, TCG_CALL_NO_RWG,
+ void, ptr, ptr, ptr, ptr, i32)
+
DEF_HELPER_FLAGS_4(sve2_sqdmulh_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
DEF_HELPER_FLAGS_4(sve2_sqdmulh_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
DEF_HELPER_FLAGS_4(sve2_sqdmulh_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
index 8f7ae63e17..b9dc02c46f 100644
--- a/target/arm/tcg/a64.decode
+++ b/target/arm/tcg/a64.decode
@@ -774,6 +774,9 @@ CMHS_s 0111 1110 111 . 00111 1 . .
@rrr_d
CMTST_s 0101 1110 111 . 10001 1 . . @rrr_d
CMEQ_s 0111 1110 111 . 10001 1 . . @rrr_d
+SQDMULH_s 0101 1110 ..1 . 10110 1 . . @rrr_e
+SQRDMULH_s 0111 1110 ..1 . 10110 1 . . @rrr_e
+
### Advanced SIMD scalar pairwise
FADDP_s 0101 1110 0011 1101 10 . . @rr_h
@@ -931,6 +934,9 @@ PMUL_v 0.10 1110 001 . 10011 1 . .
@qrrr_b
MLA_v 0.00 1110 ..1 . 10010 1 . . @qrrr_e
MLS_v 0.10 1110 ..1 . 10010 1 . . @qrrr_e
+SQDMULH_v 0.00 1110 ..1 . 10110 1 . . @qrrr_e
+SQRDMULH_v 0.10 1110 ..1 . 10110 1 . . @qrrr_e
+
### Advanced SIMD scalar x indexed element
FMUL_si 0101 00 .. 1001 . 0 . . @rrx_h
@@ -949,6 +955,12 @@ FMULX_si0111 00 .. 1001 . 0 . .
@rrx_h
FMULX_si0111 10 . . 1001 . 0 . . @rrx_s
FMULX_si0111 11 0 . 1001 . 0 . . @rrx_d
+SQDMULH_si 0101 01 .. 1100 . 0 . . @rrx_h
+SQDMULH_si 0101 10 .. 1100 . 0 . . @rrx_s
+
+SQRDMULH_si 0101 01 .. 1101 . 0 . . @rrx_h
+SQRDMULH_si 0101 10 . . 1101 . 0 . . @rrx_s
+
### Advanced SIMD vector x indexed element
FMUL_vi 0.00 00 .. 1001 . 0 . . @qrrx_h
@@ -980,3 +992,9 @@ MLA_vi 0.10 10 . . . 0 . .
@qrrx_s
MLS_vi 0.10 01 .. 0100 . 0 . . @qrrx_h
MLS_vi 0.10 10 . . 0100 . 0 . . @qrrx_s
+
+SQDMULH_vi 0.00 01 .. 1100 . 0 . . @qrrx_h
+SQDMULH_vi 0.00 10 . . 1100 . 0 . . @qrrx_s
+
+SQRDMULH_vi 0.00 01 .. 1101 . 0 . . @qrrx_h
+SQRDMULH_vi 0.00 10 . . 1101 . 0 . . @qrrx_s
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 0d8aba7a88..56f78b415f 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -1351,6 +1351,14 @@ static bool do_gvec_fn3_no64(DisasContext *s, arg_qrrr_e
*a, GVecGen3Fn *fn)
return true;
}
+static bool do_gvec_fn3_no8_no64(DisasContext *s, arg_qrrr_e *a, GVecGen3Fn
*fn)
+{
+if (a->esz == MO_8) {
+return false;
+}
+return do_gvec_fn3_no64(s, a, fn);
+}
+
static bool do_gvec_fn4(DisasContext *s, arg_q_e *a, GVecGen4Fn *fn)
{
if (!a->q && a->esz == MO_64) {
@@ -5168,6 +5176,25 @@ static const ENVScalar2 f_scalar_uqrshl = {
};
TRANS(UQRSHL_s, do_env_scalar2, a, _scalar_uqrshl)
+static bool do_env_scalar2_hs(DisasContext *s, arg_rrr_e *a,
+ const ENVScalar2 *f)
+{
+if (a->esz == MO_16 || a->esz == MO_32) {
+return do_env_scalar2(s, a, f);
+}
+return false;
+}
+
+static const ENVScalar2 f_scalar_sqdmulh = {
+{ NULL, gen_helper_neon_qdmulh_s16, gen_helper_neon_qdmulh_s32 }
+};
+TRANS(SQDMULH_s, do_env_scalar2_hs, a, _scalar_sqdmulh)
+
+static const ENVScalar2 f_scalar_sqrdmulh = {
+{ NULL, gen_helper_neon_qrdmulh_s16, gen_helper_neon_qrdmulh_s32 }
+};
+TRANS(SQRDMULH_s, do_env_scalar2_hs, a, _scalar_sqrdmulh)
+
static bool do_cmop_d(DisasContext *s,