Hexagon HVX (target/hexagon) helper overrides - vector shifts
Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
This commit is contained in:
parent
928f0ce4e8
commit
8866635caf
@ -205,4 +205,126 @@ static inline void assert_vhist_tmp(DisasContext *ctx)
|
|||||||
tcg_gen_gvec_sub(MO_32, VddV_off, VuuV_off, VvvV_off, \
|
tcg_gen_gvec_sub(MO_32, VddV_off, VuuV_off, VvvV_off, \
|
||||||
sizeof(MMVector) * 2, sizeof(MMVector) * 2)
|
sizeof(MMVector) * 2, sizeof(MMVector) * 2)
|
||||||
|
|
||||||
|
/* Vector shift right - various forms */
|
||||||
|
#define fGEN_TCG_V6_vasrh(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 15); \
|
||||||
|
tcg_gen_gvec_sars(MO_16, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vasrh_acc(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 15); \
|
||||||
|
tcg_gen_gvec_sars(MO_16, tmpoff, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vasrw(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 31); \
|
||||||
|
tcg_gen_gvec_sars(MO_32, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vasrw_acc(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 31); \
|
||||||
|
tcg_gen_gvec_sars(MO_32, tmpoff, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vlsrb(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 7); \
|
||||||
|
tcg_gen_gvec_shrs(MO_8, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vlsrh(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 15); \
|
||||||
|
tcg_gen_gvec_shrs(MO_16, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vlsrw(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 31); \
|
||||||
|
tcg_gen_gvec_shrs(MO_32, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Vector shift left - various forms */
|
||||||
|
#define fGEN_TCG_V6_vaslb(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 7); \
|
||||||
|
tcg_gen_gvec_shls(MO_8, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vaslh(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 15); \
|
||||||
|
tcg_gen_gvec_shls(MO_16, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vaslh_acc(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 15); \
|
||||||
|
tcg_gen_gvec_shls(MO_16, tmpoff, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vaslw(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 31); \
|
||||||
|
tcg_gen_gvec_shls(MO_32, VdV_off, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define fGEN_TCG_V6_vaslw_acc(SHORTCODE) \
|
||||||
|
do { \
|
||||||
|
intptr_t tmpoff = offsetof(CPUHexagonState, vtmp); \
|
||||||
|
TCGv shift = tcg_temp_new(); \
|
||||||
|
tcg_gen_andi_tl(shift, RtV, 31); \
|
||||||
|
tcg_gen_gvec_shls(MO_32, tmpoff, VuV_off, shift, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
|
||||||
|
sizeof(MMVector), sizeof(MMVector)); \
|
||||||
|
tcg_temp_free(shift); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user