target/arm/tcg: Allow vector FP conversions with FPRCVT
FEAT_FPRCVT allows the vector forms of FCVTXX and [US]CVTF in streaming mode which would otherwise only be available in nonstreaming mode. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Jim MacArthur <jim.macarthur@linaro.org> Message-id: 20260630-jmac-fprcvt-v3-2-f4840d5e0a7f@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Jim MacArthur committed
Jun 30, 2026 at 14:16 UTC
bb336e518b703d104fe367e7c9e402a2fb2379f9
1 file changed
+16
-2
target/arm/tcg/translate-a64.c
+16
-2
@@ -9915,7 +9915,14 @@ static bool do_cvtf_f(DisasContext *s, arg_fcvt *a, MemOp src_mop_int,
9915
bool is_signed)
9916
{
9917
TCGv_i64 tcg_int;
9918
- int check = fp_access_check_scalar_hsd(s, a->esz);
9918
+ int check;
9919
+
9920
+ /* FEAT_FPRCVT allows vector forms in streaming mode */
9921
+ if (dc_isar_feature(aa64_fprcvt, s)) {
9922
+ s->is_nonstreaming = false;
9923
+ }
9924
+
9925
+ check = fp_access_check_scalar_hsd(s, a->esz);
9926
9927
if (check <= 0) {
9928
return check == 0;
@@ -10073,7 +10080,14 @@ static bool do_fcvt_f(DisasContext *s, arg_fcvt *a,
10080
ARMFPRounding rmode, MemOp dst_mop_int, bool is_signed)
10081
{
10082
TCGv_i64 tcg_int;
10076
- int check = fp_access_check_scalar_hsd(s, a->esz);
10083
+ int check;
10084
+
10085
+ /* FEAT_FPRCVT allows vector forms in streaming mode */
10086
+ if (dc_isar_feature(aa64_fprcvt, s)) {
10087
+ s->is_nonstreaming = false;
10088
+ }
10089
+
10090
+ check = fp_access_check_scalar_hsd(s, a->esz);
10091
10092
if (check <= 0) {
10093
return check == 0;