target/arm: Add data argument to do_fp3_vector
Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20240625183536.1672454-11-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
9676c9d9b5
commit
6515b13e87
@ -5290,7 +5290,7 @@ TRANS(CMHS_s, do_cmop_d, a, TCG_COND_GEU)
|
|||||||
TRANS(CMEQ_s, do_cmop_d, a, TCG_COND_EQ)
|
TRANS(CMEQ_s, do_cmop_d, a, TCG_COND_EQ)
|
||||||
TRANS(CMTST_s, do_cmop_d, a, TCG_COND_TSTNE)
|
TRANS(CMTST_s, do_cmop_d, a, TCG_COND_TSTNE)
|
||||||
|
|
||||||
static bool do_fp3_vector(DisasContext *s, arg_qrrr_e *a,
|
static bool do_fp3_vector(DisasContext *s, arg_qrrr_e *a, int data,
|
||||||
gen_helper_gvec_3_ptr * const fns[3])
|
gen_helper_gvec_3_ptr * const fns[3])
|
||||||
{
|
{
|
||||||
MemOp esz = a->esz;
|
MemOp esz = a->esz;
|
||||||
@ -5313,7 +5313,7 @@ static bool do_fp3_vector(DisasContext *s, arg_qrrr_e *a,
|
|||||||
}
|
}
|
||||||
if (fp_access_check(s)) {
|
if (fp_access_check(s)) {
|
||||||
gen_gvec_op3_fpst(s, a->q, a->rd, a->rn, a->rm,
|
gen_gvec_op3_fpst(s, a->q, a->rd, a->rn, a->rm,
|
||||||
esz == MO_16, 0, fns[esz - 1]);
|
esz == MO_16, data, fns[esz - 1]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -5323,168 +5323,168 @@ static gen_helper_gvec_3_ptr * const f_vector_fadd[3] = {
|
|||||||
gen_helper_gvec_fadd_s,
|
gen_helper_gvec_fadd_s,
|
||||||
gen_helper_gvec_fadd_d,
|
gen_helper_gvec_fadd_d,
|
||||||
};
|
};
|
||||||
TRANS(FADD_v, do_fp3_vector, a, f_vector_fadd)
|
TRANS(FADD_v, do_fp3_vector, a, 0, f_vector_fadd)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fsub[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fsub[3] = {
|
||||||
gen_helper_gvec_fsub_h,
|
gen_helper_gvec_fsub_h,
|
||||||
gen_helper_gvec_fsub_s,
|
gen_helper_gvec_fsub_s,
|
||||||
gen_helper_gvec_fsub_d,
|
gen_helper_gvec_fsub_d,
|
||||||
};
|
};
|
||||||
TRANS(FSUB_v, do_fp3_vector, a, f_vector_fsub)
|
TRANS(FSUB_v, do_fp3_vector, a, 0, f_vector_fsub)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fdiv[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fdiv[3] = {
|
||||||
gen_helper_gvec_fdiv_h,
|
gen_helper_gvec_fdiv_h,
|
||||||
gen_helper_gvec_fdiv_s,
|
gen_helper_gvec_fdiv_s,
|
||||||
gen_helper_gvec_fdiv_d,
|
gen_helper_gvec_fdiv_d,
|
||||||
};
|
};
|
||||||
TRANS(FDIV_v, do_fp3_vector, a, f_vector_fdiv)
|
TRANS(FDIV_v, do_fp3_vector, a, 0, f_vector_fdiv)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmul[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmul[3] = {
|
||||||
gen_helper_gvec_fmul_h,
|
gen_helper_gvec_fmul_h,
|
||||||
gen_helper_gvec_fmul_s,
|
gen_helper_gvec_fmul_s,
|
||||||
gen_helper_gvec_fmul_d,
|
gen_helper_gvec_fmul_d,
|
||||||
};
|
};
|
||||||
TRANS(FMUL_v, do_fp3_vector, a, f_vector_fmul)
|
TRANS(FMUL_v, do_fp3_vector, a, 0, f_vector_fmul)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmax[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmax[3] = {
|
||||||
gen_helper_gvec_fmax_h,
|
gen_helper_gvec_fmax_h,
|
||||||
gen_helper_gvec_fmax_s,
|
gen_helper_gvec_fmax_s,
|
||||||
gen_helper_gvec_fmax_d,
|
gen_helper_gvec_fmax_d,
|
||||||
};
|
};
|
||||||
TRANS(FMAX_v, do_fp3_vector, a, f_vector_fmax)
|
TRANS(FMAX_v, do_fp3_vector, a, 0, f_vector_fmax)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmin[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmin[3] = {
|
||||||
gen_helper_gvec_fmin_h,
|
gen_helper_gvec_fmin_h,
|
||||||
gen_helper_gvec_fmin_s,
|
gen_helper_gvec_fmin_s,
|
||||||
gen_helper_gvec_fmin_d,
|
gen_helper_gvec_fmin_d,
|
||||||
};
|
};
|
||||||
TRANS(FMIN_v, do_fp3_vector, a, f_vector_fmin)
|
TRANS(FMIN_v, do_fp3_vector, a, 0, f_vector_fmin)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmaxnm[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmaxnm[3] = {
|
||||||
gen_helper_gvec_fmaxnum_h,
|
gen_helper_gvec_fmaxnum_h,
|
||||||
gen_helper_gvec_fmaxnum_s,
|
gen_helper_gvec_fmaxnum_s,
|
||||||
gen_helper_gvec_fmaxnum_d,
|
gen_helper_gvec_fmaxnum_d,
|
||||||
};
|
};
|
||||||
TRANS(FMAXNM_v, do_fp3_vector, a, f_vector_fmaxnm)
|
TRANS(FMAXNM_v, do_fp3_vector, a, 0, f_vector_fmaxnm)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fminnm[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fminnm[3] = {
|
||||||
gen_helper_gvec_fminnum_h,
|
gen_helper_gvec_fminnum_h,
|
||||||
gen_helper_gvec_fminnum_s,
|
gen_helper_gvec_fminnum_s,
|
||||||
gen_helper_gvec_fminnum_d,
|
gen_helper_gvec_fminnum_d,
|
||||||
};
|
};
|
||||||
TRANS(FMINNM_v, do_fp3_vector, a, f_vector_fminnm)
|
TRANS(FMINNM_v, do_fp3_vector, a, 0, f_vector_fminnm)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmulx[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmulx[3] = {
|
||||||
gen_helper_gvec_fmulx_h,
|
gen_helper_gvec_fmulx_h,
|
||||||
gen_helper_gvec_fmulx_s,
|
gen_helper_gvec_fmulx_s,
|
||||||
gen_helper_gvec_fmulx_d,
|
gen_helper_gvec_fmulx_d,
|
||||||
};
|
};
|
||||||
TRANS(FMULX_v, do_fp3_vector, a, f_vector_fmulx)
|
TRANS(FMULX_v, do_fp3_vector, a, 0, f_vector_fmulx)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmla[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmla[3] = {
|
||||||
gen_helper_gvec_vfma_h,
|
gen_helper_gvec_vfma_h,
|
||||||
gen_helper_gvec_vfma_s,
|
gen_helper_gvec_vfma_s,
|
||||||
gen_helper_gvec_vfma_d,
|
gen_helper_gvec_vfma_d,
|
||||||
};
|
};
|
||||||
TRANS(FMLA_v, do_fp3_vector, a, f_vector_fmla)
|
TRANS(FMLA_v, do_fp3_vector, a, 0, f_vector_fmla)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmls[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmls[3] = {
|
||||||
gen_helper_gvec_vfms_h,
|
gen_helper_gvec_vfms_h,
|
||||||
gen_helper_gvec_vfms_s,
|
gen_helper_gvec_vfms_s,
|
||||||
gen_helper_gvec_vfms_d,
|
gen_helper_gvec_vfms_d,
|
||||||
};
|
};
|
||||||
TRANS(FMLS_v, do_fp3_vector, a, f_vector_fmls)
|
TRANS(FMLS_v, do_fp3_vector, a, 0, f_vector_fmls)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fcmeq[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fcmeq[3] = {
|
||||||
gen_helper_gvec_fceq_h,
|
gen_helper_gvec_fceq_h,
|
||||||
gen_helper_gvec_fceq_s,
|
gen_helper_gvec_fceq_s,
|
||||||
gen_helper_gvec_fceq_d,
|
gen_helper_gvec_fceq_d,
|
||||||
};
|
};
|
||||||
TRANS(FCMEQ_v, do_fp3_vector, a, f_vector_fcmeq)
|
TRANS(FCMEQ_v, do_fp3_vector, a, 0, f_vector_fcmeq)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fcmge[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fcmge[3] = {
|
||||||
gen_helper_gvec_fcge_h,
|
gen_helper_gvec_fcge_h,
|
||||||
gen_helper_gvec_fcge_s,
|
gen_helper_gvec_fcge_s,
|
||||||
gen_helper_gvec_fcge_d,
|
gen_helper_gvec_fcge_d,
|
||||||
};
|
};
|
||||||
TRANS(FCMGE_v, do_fp3_vector, a, f_vector_fcmge)
|
TRANS(FCMGE_v, do_fp3_vector, a, 0, f_vector_fcmge)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fcmgt[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fcmgt[3] = {
|
||||||
gen_helper_gvec_fcgt_h,
|
gen_helper_gvec_fcgt_h,
|
||||||
gen_helper_gvec_fcgt_s,
|
gen_helper_gvec_fcgt_s,
|
||||||
gen_helper_gvec_fcgt_d,
|
gen_helper_gvec_fcgt_d,
|
||||||
};
|
};
|
||||||
TRANS(FCMGT_v, do_fp3_vector, a, f_vector_fcmgt)
|
TRANS(FCMGT_v, do_fp3_vector, a, 0, f_vector_fcmgt)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_facge[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_facge[3] = {
|
||||||
gen_helper_gvec_facge_h,
|
gen_helper_gvec_facge_h,
|
||||||
gen_helper_gvec_facge_s,
|
gen_helper_gvec_facge_s,
|
||||||
gen_helper_gvec_facge_d,
|
gen_helper_gvec_facge_d,
|
||||||
};
|
};
|
||||||
TRANS(FACGE_v, do_fp3_vector, a, f_vector_facge)
|
TRANS(FACGE_v, do_fp3_vector, a, 0, f_vector_facge)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_facgt[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_facgt[3] = {
|
||||||
gen_helper_gvec_facgt_h,
|
gen_helper_gvec_facgt_h,
|
||||||
gen_helper_gvec_facgt_s,
|
gen_helper_gvec_facgt_s,
|
||||||
gen_helper_gvec_facgt_d,
|
gen_helper_gvec_facgt_d,
|
||||||
};
|
};
|
||||||
TRANS(FACGT_v, do_fp3_vector, a, f_vector_facgt)
|
TRANS(FACGT_v, do_fp3_vector, a, 0, f_vector_facgt)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fabd[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fabd[3] = {
|
||||||
gen_helper_gvec_fabd_h,
|
gen_helper_gvec_fabd_h,
|
||||||
gen_helper_gvec_fabd_s,
|
gen_helper_gvec_fabd_s,
|
||||||
gen_helper_gvec_fabd_d,
|
gen_helper_gvec_fabd_d,
|
||||||
};
|
};
|
||||||
TRANS(FABD_v, do_fp3_vector, a, f_vector_fabd)
|
TRANS(FABD_v, do_fp3_vector, a, 0, f_vector_fabd)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_frecps[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_frecps[3] = {
|
||||||
gen_helper_gvec_recps_h,
|
gen_helper_gvec_recps_h,
|
||||||
gen_helper_gvec_recps_s,
|
gen_helper_gvec_recps_s,
|
||||||
gen_helper_gvec_recps_d,
|
gen_helper_gvec_recps_d,
|
||||||
};
|
};
|
||||||
TRANS(FRECPS_v, do_fp3_vector, a, f_vector_frecps)
|
TRANS(FRECPS_v, do_fp3_vector, a, 0, f_vector_frecps)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_frsqrts[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_frsqrts[3] = {
|
||||||
gen_helper_gvec_rsqrts_h,
|
gen_helper_gvec_rsqrts_h,
|
||||||
gen_helper_gvec_rsqrts_s,
|
gen_helper_gvec_rsqrts_s,
|
||||||
gen_helper_gvec_rsqrts_d,
|
gen_helper_gvec_rsqrts_d,
|
||||||
};
|
};
|
||||||
TRANS(FRSQRTS_v, do_fp3_vector, a, f_vector_frsqrts)
|
TRANS(FRSQRTS_v, do_fp3_vector, a, 0, f_vector_frsqrts)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_faddp[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_faddp[3] = {
|
||||||
gen_helper_gvec_faddp_h,
|
gen_helper_gvec_faddp_h,
|
||||||
gen_helper_gvec_faddp_s,
|
gen_helper_gvec_faddp_s,
|
||||||
gen_helper_gvec_faddp_d,
|
gen_helper_gvec_faddp_d,
|
||||||
};
|
};
|
||||||
TRANS(FADDP_v, do_fp3_vector, a, f_vector_faddp)
|
TRANS(FADDP_v, do_fp3_vector, a, 0, f_vector_faddp)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmaxp[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmaxp[3] = {
|
||||||
gen_helper_gvec_fmaxp_h,
|
gen_helper_gvec_fmaxp_h,
|
||||||
gen_helper_gvec_fmaxp_s,
|
gen_helper_gvec_fmaxp_s,
|
||||||
gen_helper_gvec_fmaxp_d,
|
gen_helper_gvec_fmaxp_d,
|
||||||
};
|
};
|
||||||
TRANS(FMAXP_v, do_fp3_vector, a, f_vector_fmaxp)
|
TRANS(FMAXP_v, do_fp3_vector, a, 0, f_vector_fmaxp)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fminp[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fminp[3] = {
|
||||||
gen_helper_gvec_fminp_h,
|
gen_helper_gvec_fminp_h,
|
||||||
gen_helper_gvec_fminp_s,
|
gen_helper_gvec_fminp_s,
|
||||||
gen_helper_gvec_fminp_d,
|
gen_helper_gvec_fminp_d,
|
||||||
};
|
};
|
||||||
TRANS(FMINP_v, do_fp3_vector, a, f_vector_fminp)
|
TRANS(FMINP_v, do_fp3_vector, a, 0, f_vector_fminp)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fmaxnmp[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fmaxnmp[3] = {
|
||||||
gen_helper_gvec_fmaxnump_h,
|
gen_helper_gvec_fmaxnump_h,
|
||||||
gen_helper_gvec_fmaxnump_s,
|
gen_helper_gvec_fmaxnump_s,
|
||||||
gen_helper_gvec_fmaxnump_d,
|
gen_helper_gvec_fmaxnump_d,
|
||||||
};
|
};
|
||||||
TRANS(FMAXNMP_v, do_fp3_vector, a, f_vector_fmaxnmp)
|
TRANS(FMAXNMP_v, do_fp3_vector, a, 0, f_vector_fmaxnmp)
|
||||||
|
|
||||||
static gen_helper_gvec_3_ptr * const f_vector_fminnmp[3] = {
|
static gen_helper_gvec_3_ptr * const f_vector_fminnmp[3] = {
|
||||||
gen_helper_gvec_fminnump_h,
|
gen_helper_gvec_fminnump_h,
|
||||||
gen_helper_gvec_fminnump_s,
|
gen_helper_gvec_fminnump_s,
|
||||||
gen_helper_gvec_fminnump_d,
|
gen_helper_gvec_fminnump_d,
|
||||||
};
|
};
|
||||||
TRANS(FMINNMP_v, do_fp3_vector, a, f_vector_fminnmp)
|
TRANS(FMINNMP_v, do_fp3_vector, a, 0, f_vector_fminnmp)
|
||||||
|
|
||||||
static bool do_fmlal(DisasContext *s, arg_qrrr_e *a, bool is_s, bool is_2)
|
static bool do_fmlal(DisasContext *s, arg_qrrr_e *a, bool is_s, bool is_2)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user