Hexagon HVX (target/hexagon) helper overrides - vector assign & cmov
Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
This commit is contained in:
parent
7ba7657bc9
commit
32488192c7
@ -124,4 +124,35 @@ static inline void assert_vhist_tmp(DisasContext *ctx)
|
||||
} while (0)
|
||||
|
||||
|
||||
#define fGEN_TCG_V6_vassign(SHORTCODE) \
|
||||
tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
|
||||
sizeof(MMVector), sizeof(MMVector))
|
||||
|
||||
/* Vector conditional move */
|
||||
#define fGEN_TCG_VEC_CMOV(PRED) \
|
||||
do { \
|
||||
TCGv lsb = tcg_temp_new(); \
|
||||
TCGLabel *false_label = gen_new_label(); \
|
||||
TCGLabel *end_label = gen_new_label(); \
|
||||
tcg_gen_andi_tl(lsb, PsV, 1); \
|
||||
tcg_gen_brcondi_tl(TCG_COND_NE, lsb, PRED, false_label); \
|
||||
tcg_temp_free(lsb); \
|
||||
tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
|
||||
sizeof(MMVector), sizeof(MMVector)); \
|
||||
tcg_gen_br(end_label); \
|
||||
gen_set_label(false_label); \
|
||||
tcg_gen_ori_tl(hex_slot_cancelled, hex_slot_cancelled, \
|
||||
1 << insn->slot); \
|
||||
gen_set_label(end_label); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/* Vector conditional move (true) */
|
||||
#define fGEN_TCG_V6_vcmov(SHORTCODE) \
|
||||
fGEN_TCG_VEC_CMOV(1)
|
||||
|
||||
/* Vector conditional move (false) */
|
||||
#define fGEN_TCG_V6_vncmov(SHORTCODE) \
|
||||
fGEN_TCG_VEC_CMOV(0)
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user