target/arm: Implement Floating-point square root (predicated, zeroing)
This is FRECPX and FSQRT. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260604234852.573178-14-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Richard Henderson committed
Jun 4, 2026 at 16:48 UTC
1e3e84c4717cc91e22c73c9862141471511377de
2 files changed
+8
target/arm/tcg/sve.decode
+3
@@ -1263,6 +1263,9 @@ FRINTI_z 01100100 .. 011 001 111 ... ..... ..... @rd_pg_rn
1263
FRECPX_m 01100101 .. 001 100 101 ... ..... ..... @rd_pg_rn
1264
FSQRT_m 01100101 .. 001 101 101 ... ..... ..... @rd_pg_rn
1265
1266
+FRECPX_z 01100100 .. 011 011 100 ... ..... ..... @rd_pg_rn
1267
+FSQRT_z 01100100 .. 011 011 101 ... ..... ..... @rd_pg_rn
1268
+
1269
# SVE integer convert to floating-point
1270
SCVTF_hh_m 01100101 01 010 01 0 101 ... ..... ..... @rd_pg_rn_e0
1271
SCVTF_sh_m 01100101 01 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
target/arm/tcg/translate-sve.c
+5
@@ -4736,6 +4736,8 @@ static gen_helper_gvec_3_ptr * const frecpx_fns[] = {
4736
};
4737
TRANS_FEAT(FRECPX_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4738
frecpx_fns[a->esz], a, 0, select_ah_fpst(s, a->esz))
4739
+TRANS_FEAT(FRECPX_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4740
+ frecpx_fns[a->esz], a, 1, select_ah_fpst(s, a->esz))
4741
4742
static gen_helper_gvec_3_ptr * const fsqrt_fns[] = {
4743
NULL, gen_helper_sve_fsqrt_h,
@@ -4744,6 +4746,9 @@ static gen_helper_gvec_3_ptr * const fsqrt_fns[] = {
4746
TRANS_FEAT(FSQRT_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4747
fsqrt_fns[a->esz], a, 0,
4748
a->esz == MO_16 ? FPST_A64_F16 : FPST_A64)
4749
+TRANS_FEAT(FSQRT_z, aa64_sme2p2_or_sve2p2, gen_gvec_fpst_arg_zpz,
4750
+ fsqrt_fns[a->esz], a, 1,
4751
+ a->esz == MO_16 ? FPST_A64_F16 : FPST_A64)
4752
4753
TRANS_FEAT(SCVTF_hh_m, aa64_sme_or_sve, gen_gvec_fpst_arg_zpz,
4754
gen_helper_sve_scvt_hh, a, 0, FPST_A64_F16)