mirror of https://github.com/xemu-project/xemu.git
target/riscv: Move vector translation checks
Move the checks out of `do_opiv{v,x,i}_gvec{,_shift}` functions and into the corresponding macros. This enables the functions to be reused in proceeding commits without check duplication. Signed-off-by: Nazar Kazakov <nazar.kazakov@codethink.co.uk> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn> Signed-off-by: Max Chou <max.chou@sifive.com> Message-ID: <20230711165917.2629866-6-max.chou@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
e13c7d3b5b
commit
1ac7a501f0
|
@ -1183,9 +1183,6 @@ do_opivv_gvec(DisasContext *s, arg_rmrr *a, GVecGen3Fn *gvec_fn,
|
|||
gen_helper_gvec_4_ptr *fn)
|
||||
{
|
||||
TCGLabel *over = gen_new_label();
|
||||
if (!opivv_check(s, a)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
tcg_gen_brcond_tl(TCG_COND_GEU, cpu_vstart, cpu_vl, over);
|
||||
|
||||
|
@ -1218,6 +1215,9 @@ static bool trans_##NAME(DisasContext *s, arg_rmrr *a) \
|
|||
gen_helper_##NAME##_b, gen_helper_##NAME##_h, \
|
||||
gen_helper_##NAME##_w, gen_helper_##NAME##_d, \
|
||||
}; \
|
||||
if (!opivv_check(s, a)) { \
|
||||
return false; \
|
||||
} \
|
||||
return do_opivv_gvec(s, a, tcg_gen_gvec_##SUF, fns[s->sew]); \
|
||||
}
|
||||
|
||||
|
@ -1276,10 +1276,6 @@ static inline bool
|
|||
do_opivx_gvec(DisasContext *s, arg_rmrr *a, GVecGen2sFn *gvec_fn,
|
||||
gen_helper_opivx *fn)
|
||||
{
|
||||
if (!opivx_check(s, a)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a->vm && s->vl_eq_vlmax && !(s->vta && s->lmul < 0)) {
|
||||
TCGv_i64 src1 = tcg_temp_new_i64();
|
||||
|
||||
|
@ -1301,6 +1297,9 @@ static bool trans_##NAME(DisasContext *s, arg_rmrr *a) \
|
|||
gen_helper_##NAME##_b, gen_helper_##NAME##_h, \
|
||||
gen_helper_##NAME##_w, gen_helper_##NAME##_d, \
|
||||
}; \
|
||||
if (!opivx_check(s, a)) { \
|
||||
return false; \
|
||||
} \
|
||||
return do_opivx_gvec(s, a, tcg_gen_gvec_##SUF, fns[s->sew]); \
|
||||
}
|
||||
|
||||
|
@ -1432,10 +1431,6 @@ static inline bool
|
|||
do_opivi_gvec(DisasContext *s, arg_rmrr *a, GVecGen2iFn *gvec_fn,
|
||||
gen_helper_opivx *fn, imm_mode_t imm_mode)
|
||||
{
|
||||
if (!opivx_check(s, a)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a->vm && s->vl_eq_vlmax && !(s->vta && s->lmul < 0)) {
|
||||
gvec_fn(s->sew, vreg_ofs(s, a->rd), vreg_ofs(s, a->rs2),
|
||||
extract_imm(s, a->rs1, imm_mode), MAXSZ(s), MAXSZ(s));
|
||||
|
@ -1453,6 +1448,9 @@ static bool trans_##NAME(DisasContext *s, arg_rmrr *a) \
|
|||
gen_helper_##OPIVX##_b, gen_helper_##OPIVX##_h, \
|
||||
gen_helper_##OPIVX##_w, gen_helper_##OPIVX##_d, \
|
||||
}; \
|
||||
if (!opivx_check(s, a)) { \
|
||||
return false; \
|
||||
} \
|
||||
return do_opivi_gvec(s, a, tcg_gen_gvec_##SUF, \
|
||||
fns[s->sew], IMM_MODE); \
|
||||
}
|
||||
|
@ -1775,10 +1773,6 @@ static inline bool
|
|||
do_opivx_gvec_shift(DisasContext *s, arg_rmrr *a, GVecGen2sFn32 *gvec_fn,
|
||||
gen_helper_opivx *fn)
|
||||
{
|
||||
if (!opivx_check(s, a)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a->vm && s->vl_eq_vlmax && !(s->vta && s->lmul < 0)) {
|
||||
TCGv_i32 src1 = tcg_temp_new_i32();
|
||||
|
||||
|
@ -1800,7 +1794,9 @@ static bool trans_##NAME(DisasContext *s, arg_rmrr *a) \
|
|||
gen_helper_##NAME##_b, gen_helper_##NAME##_h, \
|
||||
gen_helper_##NAME##_w, gen_helper_##NAME##_d, \
|
||||
}; \
|
||||
\
|
||||
if (!opivx_check(s, a)) { \
|
||||
return false; \
|
||||
} \
|
||||
return do_opivx_gvec_shift(s, a, tcg_gen_gvec_##SUF, fns[s->sew]); \
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue