[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 29/69] target/arm: Convert BFCVT to decodetree
From: |
Richard Henderson |
Subject: |
[PATCH v3 29/69] target/arm: Convert BFCVT to decodetree |
Date: |
Wed, 11 Dec 2024 10:29:56 -0600 |
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/tcg/translate-a64.c | 26 +++++++-------------------
target/arm/tcg/a64.decode | 3 +++
2 files changed, 10 insertions(+), 19 deletions(-)
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
index 5a347bece3..5b30b4caca 100644
--- a/target/arm/tcg/translate-a64.c
+++ b/target/arm/tcg/translate-a64.c
@@ -8420,6 +8420,11 @@ static const FPScalar1 f_scalar_frintx = {
};
TRANS(FRINTX_s, do_fp1_scalar, a, &f_scalar_frintx, -1)
+static const FPScalar1 f_scalar_bfcvt = {
+ .gen_s = gen_helper_bfcvt,
+};
+TRANS_FEAT(BFCVT_s, aa64_bf16, do_fp1_scalar, a, &f_scalar_bfcvt, -1)
+
/* Floating-point data-processing (1 source) - single precision */
static void handle_fp_1src_single(DisasContext *s, int opcode, int rd, int rn)
{
@@ -8432,9 +8437,6 @@ static void handle_fp_1src_single(DisasContext *s, int
opcode, int rd, int rn)
tcg_res = tcg_temp_new_i32();
switch (opcode) {
- case 0x6: /* BFCVT */
- gen_fpst = gen_helper_bfcvt;
- break;
case 0x10: /* FRINT32Z */
rmode = FPROUNDING_ZERO;
gen_fpst = gen_helper_frint32_s;
@@ -8454,6 +8456,7 @@ static void handle_fp_1src_single(DisasContext *s, int
opcode, int rd, int rn)
case 0x1: /* FABS */
case 0x2: /* FNEG */
case 0x3: /* FSQRT */
+ case 0x6: /* BFCVT */
case 0x8: /* FRINTN */
case 0x9: /* FRINTP */
case 0xa: /* FRINTM */
@@ -8652,28 +8655,13 @@ static void disas_fp_1src(DisasContext *s, uint32_t
insn)
}
break;
- case 0x6:
- switch (type) {
- case 1: /* BFCVT */
- if (!dc_isar_feature(aa64_bf16, s)) {
- goto do_unallocated;
- }
- if (!fp_access_check(s)) {
- return;
- }
- handle_fp_1src_single(s, opcode, rd, rn);
- break;
- default:
- goto do_unallocated;
- }
- break;
-
default:
do_unallocated:
case 0x0: /* FMOV */
case 0x1: /* FABS */
case 0x2: /* FNEG */
case 0x3: /* FSQRT */
+ case 0x6: /* BFCVT */
case 0x8: /* FRINTN */
case 0x9: /* FRINTP */
case 0xa: /* FRINTM */
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
index 9d2f099c9c..4a48fcff1d 100644
--- a/target/arm/tcg/a64.decode
+++ b/target/arm/tcg/a64.decode
@@ -45,6 +45,7 @@
&qrrrr_e q rd rn rm ra esz
@rr_h ........ ... ..... ...... rn:5 rd:5 &rr_e esz=1
+@rr_s ........ ... ..... ...... rn:5 rd:5 &rr_e esz=2
@rr_d ........ ... ..... ...... rn:5 rd:5 &rr_e esz=3
@rr_sd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_sd
@rr_hsd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_hsd
@@ -1337,6 +1338,8 @@ FRINTA_s 00011110 .. 1 001100 10000 ..... .....
@rr_hsd
FRINTX_s 00011110 .. 1 001110 10000 ..... ..... @rr_hsd
FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd
+BFCVT_s 00011110 01 1 000110 10000 ..... ..... @rr_s
+
# Floating-point Immediate
FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd
--
2.43.0
- [PATCH v3 39/69] target/arm: Introduce gen_gvec_cnt, gen_gvec_rbit, (continued)
- [PATCH v3 39/69] target/arm: Introduce gen_gvec_cnt, gen_gvec_rbit, Richard Henderson, 2024/12/11
- [PATCH v3 21/69] target/arm: Introduce fp_access_check_vector_hsd, Richard Henderson, 2024/12/11
- [PATCH v3 26/69] target/arm: Remove helper_sqrt_f16, Richard Henderson, 2024/12/11
- [PATCH v3 25/69] target/arm: Pass fpstatus to vfp_sqrt*, Richard Henderson, 2024/12/11
- [PATCH v3 31/69] target/arm: Convert FCVT (scalar) to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 37/69] target/arm: Introduce gen_gvec_cls, gen_gvec_clz, Richard Henderson, 2024/12/11
- [PATCH v3 32/69] target/arm: Convert handle_fpfpcvt to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 23/69] target/arm: Fix decode of fp16 vector fabs, fneg, fsqrt, Richard Henderson, 2024/12/11
- [PATCH v3 27/69] target/arm: Convert FSQRT (scalar) to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 29/69] target/arm: Convert BFCVT to decodetree,
Richard Henderson <=
- [PATCH v3 28/69] target/arm: Convert FRINT[NPMSAXI] (scalar) to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 35/69] target/arm: Convert SQABS, SQNEG to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 34/69] target/arm: Convert handle_fmov to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 36/69] target/arm: Convert ABS, NEG to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 41/69] target/arm: Convert CMGT, CMGE, GMLT, GMLE, CMEQ (zero) to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 43/69] target/arm: Convert handle_rev to decodetree, Richard Henderson, 2024/12/11
- [PATCH v3 42/69] target/arm: Introduce gen_gvec_rev{16,32,64}, Richard Henderson, 2024/12/11
- [PATCH v3 44/69] target/arm: Move helper_neon_addlp_{s8, s16} to neon_helper.c, Richard Henderson, 2024/12/11