@samitouri / QOSamiQemu / commits / 03e944fbfe

target/arm: Implement Floating-point convert (predicated, zeroing)

This is FCVTX, FCVT and BFCVT. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260604234852.573178-13-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Richard Henderson committed Jun 4, 2026 at 16:48 UTC 03e944fbfe2e361441dd1b9c2d53d1aed87e450f
2 files changed +33
target/arm/tcg/sve.decode
+11
@@ -1215,6 +1215,17 @@ FCVT_hd_m 01100101 11 0010 01 101 ... ..... ..... @rd_pg_rn_e0
1215 FCVT_ds_m 01100101 11 0010 10 101 ... ..... ..... @rd_pg_rn_e0
1216 FCVT_sd_m 01100101 11 0010 11 101 ... ..... ..... @rd_pg_rn_e0
1217
1218 +FCVTX_ds_z 01100100 00 0110 101 10 ... ..... ..... @rd_pg_rn_e0
1219 +
1220 +FCVT_sh_z 01100100 10 0110 101 00 ... ..... ..... @rd_pg_rn_e0
1221 +FCVT_hs_z 01100100 10 0110 101 01 ... ..... ..... @rd_pg_rn_e0
1222 +BFCVT_z 01100100 10 0110 101 10 ... ..... ..... @rd_pg_rn_e0
1223 +
1224 +FCVT_dh_z 01100100 11 0110 101 00 ... ..... ..... @rd_pg_rn_e0
1225 +FCVT_hd_z 01100100 11 0110 101 01 ... ..... ..... @rd_pg_rn_e0
1226 +FCVT_ds_z 01100100 11 0110 101 10 ... ..... ..... @rd_pg_rn_e0
1227 +FCVT_sd_z 01100100 11 0110 101 11 ... ..... ..... @rd_pg_rn_e0
1228 +
1229 # SVE floating-point convert to integer
1230 FCVTZS_hh_m 01100101 01 011 01 0 101 ... ..... ..... @rd_pg_rn_e0
1231 FCVTZU_hh_m 01100101 01 011 01 1 101 ... ..... ..... @rd_pg_rn_e0
target/arm/tcg/translate-sve.c
+22
@@ -4588,21 +4588,40 @@ TRANS_FEAT(FCMLA_zzxz, aa64_sme_or_sve, gen_gvec_fpst_zzzz, fcmla_idx_fns[a->esz
4588
4589 TRANS_FEAT(FCVT_sh_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4590 gen_helper_sve_fcvt_sh, a, 0, FPST_A64)
4591 +TRANS_FEAT(FCVT_sh_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4592 + gen_helper_sve_fcvt_sh, a, 1, FPST_A64)
4593 +
4594 TRANS_FEAT(FCVT_hs_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4595 gen_helper_sve_fcvt_hs, a, 0, FPST_A64_F16)
4596 +TRANS_FEAT(FCVT_hs_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4597 + gen_helper_sve_fcvt_hs, a, 1, FPST_A64_F16)
4598
4599 TRANS_FEAT(BFCVT_m, aa64_sme_sve_bf16, gen_gvec_fpst_arg_zpz,
4600 gen_helper_sve_bfcvt, a, 0,
4601 s->fpcr_ah ? FPST_AH : FPST_A64)
4602 +TRANS_FEAT(BFCVT_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4603 + gen_helper_sve_bfcvt, a, 1,
4604 + s->fpcr_ah ? FPST_AH : FPST_A64)
4605
4606 TRANS_FEAT(FCVT_dh_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4607 gen_helper_sve_fcvt_dh, a, 0, FPST_A64)
4608 +TRANS_FEAT(FCVT_dh_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4609 + gen_helper_sve_fcvt_dh, a, 1, FPST_A64)
4610 +
4611 TRANS_FEAT(FCVT_hd_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4612 gen_helper_sve_fcvt_hd, a, 0, FPST_A64_F16)
4613 +TRANS_FEAT(FCVT_hd_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4614 + gen_helper_sve_fcvt_hd, a, 1, FPST_A64_F16)
4615 +
4616 TRANS_FEAT(FCVT_ds_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4617 gen_helper_sve_fcvt_ds, a, 0, FPST_A64)
4618 +TRANS_FEAT(FCVT_ds_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4619 + gen_helper_sve_fcvt_ds, a, 1, FPST_A64)
4620 +
4621 TRANS_FEAT(FCVT_sd_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4622 gen_helper_sve_fcvt_sd, a, 0, FPST_A64)
4623 +TRANS_FEAT(FCVT_sd_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4624 + gen_helper_sve_fcvt_sd, a, 1, FPST_A64)
4625
4626 TRANS_FEAT(FCVTZS_hh_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4627 gen_helper_sve_fcvtzs_hh, a, 0, FPST_A64_F16)
@@ -8017,6 +8036,9 @@ TRANS_FEAT(FCVTLT_sd_m, aa64_sme_or_sve2, gen_gvec_fpst_arg_zpz,
8036
8037 TRANS_FEAT(FCVTX_ds_m, aa64_sme_or_sve2, do_frint_mode, a,
8038 FPROUNDING_ODD, 0, gen_helper_sve_fcvt_ds)
8039 +TRANS_FEAT(FCVTX_ds_z, aa64_sme2p2_or_sve2p2, do_frint_mode, a,
8040 + FPROUNDING_ODD, 1, gen_helper_sve_fcvt_ds)
8041 +
8042 TRANS_FEAT(FCVTXNT_ds_m, aa64_sme_or_sve2, do_frint_mode, a,
8043 FPROUNDING_ODD, 0, gen_helper_sve2_fcvtnt_ds)
8044