This is the various FRINT rounding modes.
Signed-off-by: Richard Henderson <[email protected]>
---
target/arm/tcg/translate-sve.c | 17 +++++++++++++++++
target/arm/tcg/sve.decode | 8 ++++++++
2 files changed, 25 insertions(+)
diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c
index e9c0a73e90..3b346aed35 100644
--- a/target/arm/tcg/translate-sve.c
+++ b/target/arm/tcg/translate-sve.c
@@ -4644,6 +4644,9 @@ static gen_helper_gvec_3_ptr * const frint_fns[] = {
TRANS_FEAT(FRINTI_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
frint_fns[a->esz], a, 0,
a->esz == MO_16 ? FPST_A64_F16 : FPST_A64)
+TRANS_FEAT(FRINTI_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
+ frint_fns[a->esz], a, 1,
+ a->esz == MO_16 ? FPST_A64_F16 : FPST_A64)
static gen_helper_gvec_3_ptr * const frintx_fns[] = {
NULL,
@@ -4654,6 +4657,9 @@ static gen_helper_gvec_3_ptr * const frintx_fns[] = {
TRANS_FEAT(FRINTX_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
frintx_fns[a->esz], a, 0,
a->esz == MO_16 ? FPST_A64_F16 : FPST_A64);
+TRANS_FEAT(FRINTX_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
+ frintx_fns[a->esz], a, 1,
+ a->esz == MO_16 ? FPST_A64_F16 : FPST_A64);
static bool do_frint_mode(DisasContext *s, arg_rpr_esz *a,
ARMFPRounding mode, int data,
@@ -4694,6 +4700,17 @@ TRANS_FEAT(FRINTZ_m, aa64_sme_or_sve, do_frint_mode, a,
TRANS_FEAT(FRINTA_m, aa64_sme_or_sve, do_frint_mode, a,
FPROUNDING_TIEAWAY, 0, frint_fns[a->esz])
+TRANS_FEAT(FRINTN_z, aa64_sme2p2_or_sve2p2, do_frint_mode, a,
+ FPROUNDING_TIEEVEN, 1, frint_fns[a->esz])
+TRANS_FEAT(FRINTP_z, aa64_sme2p2_or_sve2p2, do_frint_mode, a,
+ FPROUNDING_POSINF, 1, frint_fns[a->esz])
+TRANS_FEAT(FRINTM_z, aa64_sme2p2_or_sve2p2, do_frint_mode, a,
+ FPROUNDING_NEGINF, 1, frint_fns[a->esz])
+TRANS_FEAT(FRINTZ_z, aa64_sme2p2_or_sve2p2, do_frint_mode, a,
+ FPROUNDING_ZERO, 1, frint_fns[a->esz])
+TRANS_FEAT(FRINTA_z, aa64_sme2p2_or_sve2p2, do_frint_mode, a,
+ FPROUNDING_TIEAWAY, 1, frint_fns[a->esz])
+
static gen_helper_gvec_3_ptr * const frecpx_fns[] = {
NULL, gen_helper_sve_frecpx_h,
gen_helper_sve_frecpx_s, gen_helper_sve_frecpx_d,
diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode
index f1cf7a628d..099cd4e93d 100644
--- a/target/arm/tcg/sve.decode
+++ b/target/arm/tcg/sve.decode
@@ -1240,6 +1240,14 @@ FRINTA_m 01100101 .. 000 100 101 ... ..... .....
@rd_pg_rn
FRINTX_m 01100101 .. 000 110 101 ... ..... ..... @rd_pg_rn
FRINTI_m 01100101 .. 000 111 101 ... ..... ..... @rd_pg_rn
+FRINTN_z 01100100 .. 011 000 100 ... ..... ..... @rd_pg_rn
+FRINTP_z 01100100 .. 011 000 101 ... ..... ..... @rd_pg_rn
+FRINTM_z 01100100 .. 011 000 110 ... ..... ..... @rd_pg_rn
+FRINTZ_z 01100100 .. 011 000 111 ... ..... ..... @rd_pg_rn
+FRINTA_z 01100100 .. 011 001 100 ... ..... ..... @rd_pg_rn
+FRINTX_z 01100100 .. 011 001 110 ... ..... ..... @rd_pg_rn
+FRINTI_z 01100100 .. 011 001 111 ... ..... ..... @rd_pg_rn
+
# SVE floating-point unary operations
FRECPX_m 01100101 .. 001 100 101 ... ..... ..... @rd_pg_rn
FSQRT_m 01100101 .. 001 101 101 ... ..... ..... @rd_pg_rn
--
2.43.0