target/arm: Use FPST_F16 for SME FMOPA (widening)
This operation has float16 inputs and thus must use the FZ16 control not the FZ control. Cc: qemu-stable@nongnu.org Fixes:3916841ac7
("target/arm: Implement FMOPA, FMOPS (widening)") Reported-by: Daniyal Khan <danikhan632@gmail.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Message-id: 20240717060149.204788-3-richard.henderson@linaro.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2374 Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> (cherry picked from commit207d30b5fd
) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
be735533d5
commit
d5373d7bdb
@ -340,6 +340,7 @@ static bool do_outprod(DisasContext *s, arg_op *a, MemOp esz,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool do_outprod_fpst(DisasContext *s, arg_op *a, MemOp esz,
|
static bool do_outprod_fpst(DisasContext *s, arg_op *a, MemOp esz,
|
||||||
|
ARMFPStatusFlavour e_fpst,
|
||||||
gen_helper_gvec_5_ptr *fn)
|
gen_helper_gvec_5_ptr *fn)
|
||||||
{
|
{
|
||||||
int svl = streaming_vec_reg_size(s);
|
int svl = streaming_vec_reg_size(s);
|
||||||
@ -355,7 +356,7 @@ static bool do_outprod_fpst(DisasContext *s, arg_op *a, MemOp esz,
|
|||||||
zm = vec_full_reg_ptr(s, a->zm);
|
zm = vec_full_reg_ptr(s, a->zm);
|
||||||
pn = pred_full_reg_ptr(s, a->pn);
|
pn = pred_full_reg_ptr(s, a->pn);
|
||||||
pm = pred_full_reg_ptr(s, a->pm);
|
pm = pred_full_reg_ptr(s, a->pm);
|
||||||
fpst = fpstatus_ptr(FPST_FPCR);
|
fpst = fpstatus_ptr(e_fpst);
|
||||||
|
|
||||||
fn(za, zn, zm, pn, pm, fpst, tcg_constant_i32(desc));
|
fn(za, zn, zm, pn, pm, fpst, tcg_constant_i32(desc));
|
||||||
|
|
||||||
@ -367,9 +368,12 @@ static bool do_outprod_fpst(DisasContext *s, arg_op *a, MemOp esz,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TRANS_FEAT(FMOPA_h, aa64_sme, do_outprod_fpst, a, MO_32, gen_helper_sme_fmopa_h)
|
TRANS_FEAT(FMOPA_h, aa64_sme, do_outprod_fpst, a,
|
||||||
TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, MO_32, gen_helper_sme_fmopa_s)
|
MO_32, FPST_FPCR_F16, gen_helper_sme_fmopa_h)
|
||||||
TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a, MO_64, gen_helper_sme_fmopa_d)
|
TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a,
|
||||||
|
MO_32, FPST_FPCR, gen_helper_sme_fmopa_s)
|
||||||
|
TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a,
|
||||||
|
MO_64, FPST_FPCR, gen_helper_sme_fmopa_d)
|
||||||
|
|
||||||
/* TODO: FEAT_EBF16 */
|
/* TODO: FEAT_EBF16 */
|
||||||
TRANS_FEAT(BFMOPA, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_bfmopa)
|
TRANS_FEAT(BFMOPA, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_bfmopa)
|
||||||
|
Loading…
Reference in New Issue
Block a user