target/arm: Optimize MVE VDUP
Optimize the MVE VDUP insns by using TCG vector ops when possible. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20210913095440.13462-8-peter.maydell@linaro.org
This commit is contained in:
parent
4b1561c472
commit
f8d94803f1
|
@ -500,11 +500,15 @@ static bool trans_VDUP(DisasContext *s, arg_VDUP *a)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qd = mve_qreg_ptr(a->qd);
|
|
||||||
rt = load_reg(s, a->rt);
|
rt = load_reg(s, a->rt);
|
||||||
tcg_gen_dup_i32(a->size, rt, rt);
|
if (mve_no_predication(s)) {
|
||||||
gen_helper_mve_vdup(cpu_env, qd, rt);
|
tcg_gen_gvec_dup_i32(a->size, mve_qreg_offset(a->qd), 16, 16, rt);
|
||||||
tcg_temp_free_ptr(qd);
|
} else {
|
||||||
|
qd = mve_qreg_ptr(a->qd);
|
||||||
|
tcg_gen_dup_i32(a->size, rt, rt);
|
||||||
|
gen_helper_mve_vdup(cpu_env, qd, rt);
|
||||||
|
tcg_temp_free_ptr(qd);
|
||||||
|
}
|
||||||
tcg_temp_free_i32(rt);
|
tcg_temp_free_i32(rt);
|
||||||
mve_update_eci(s);
|
mve_update_eci(s);
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in a new issue