@samitouri / QOSamiQemu / commits / 8c53023a26

target/hexagon: add GVec overrides for HVX saturating add/sub

Reviewed-by: Marco Liebel <marco.liebel@oss.qualcomm.com> Link: https://lore.kernel.org/qemu-devel/20260807152241.1576334-3-brian.cain@oss.qualcomm.com Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>

Brian Cain committed Aug 7, 2026 at 08:22 UTC 8c53023a26ec397fadaf3fd10404df1be57d2816
1 file changed +87
target/hexagon/gen_tcg_hvx.h
+87
@@ -234,6 +234,93 @@ static inline void assert_vhist_tmp(DisasContext *ctx)
234 tcg_gen_gvec_sub(MO_32, VddV_off, VuuV_off, VvvV_off, \
235 sizeof(MMVector) * 2, sizeof(MMVector) * 2)
236
237 +#define fGEN_TCG_V6_vaddbsat(SHORTCODE) \
238 + tcg_gen_gvec_ssadd(MO_8, VdV_off, VuV_off, VvV_off, \
239 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
240 +
241 +#define fGEN_TCG_V6_vaddhsat(SHORTCODE) \
242 + tcg_gen_gvec_ssadd(MO_16, VdV_off, VuV_off, VvV_off, \
243 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
244 +
245 +#define fGEN_TCG_V6_vaddwsat(SHORTCODE) \
246 + tcg_gen_gvec_ssadd(MO_32, VdV_off, VuV_off, VvV_off, \
247 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
248 +
249 +#define fGEN_TCG_V6_vaddubsat(SHORTCODE) \
250 + tcg_gen_gvec_usadd(MO_8, VdV_off, VuV_off, VvV_off, \
251 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
252 +
253 +#define fGEN_TCG_V6_vadduhsat(SHORTCODE) \
254 + tcg_gen_gvec_usadd(MO_16, VdV_off, VuV_off, VvV_off, \
255 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
256 +
257 +#define fGEN_TCG_V6_vadduwsat(SHORTCODE) \
258 + tcg_gen_gvec_usadd(MO_32, VdV_off, VuV_off, VvV_off, \
259 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
260 +
261 +#define fGEN_TCG_PAIR_ADDSUB(OP, VECE, DST, SRC_A, SRC_B) \
262 + tcg_gen_gvec_##OP(VECE, DST, SRC_A, SRC_B, \
263 + 2 * VECTOR_SIZE_BYTE, 2 * VECTOR_SIZE_BYTE)
264 +
265 +#define fGEN_TCG_V6_vaddbsat_dv(SHORTCODE) \
266 + fGEN_TCG_PAIR_ADDSUB(ssadd, MO_8, VddV_off, VuuV_off, VvvV_off)
267 +
268 +#define fGEN_TCG_V6_vaddhsat_dv(SHORTCODE) \
269 + fGEN_TCG_PAIR_ADDSUB(ssadd, MO_16, VddV_off, VuuV_off, VvvV_off)
270 +
271 +#define fGEN_TCG_V6_vaddwsat_dv(SHORTCODE) \
272 + fGEN_TCG_PAIR_ADDSUB(ssadd, MO_32, VddV_off, VuuV_off, VvvV_off)
273 +
274 +#define fGEN_TCG_V6_vaddubsat_dv(SHORTCODE) \
275 + fGEN_TCG_PAIR_ADDSUB(usadd, MO_8, VddV_off, VuuV_off, VvvV_off)
276 +
277 +#define fGEN_TCG_V6_vadduhsat_dv(SHORTCODE) \
278 + fGEN_TCG_PAIR_ADDSUB(usadd, MO_16, VddV_off, VuuV_off, VvvV_off)
279 +
280 +#define fGEN_TCG_V6_vadduwsat_dv(SHORTCODE) \
281 + fGEN_TCG_PAIR_ADDSUB(usadd, MO_32, VddV_off, VuuV_off, VvvV_off)
282 +
283 +#define fGEN_TCG_V6_vsubbsat(SHORTCODE) \
284 + tcg_gen_gvec_sssub(MO_8, VdV_off, VuV_off, VvV_off, \
285 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
286 +
287 +#define fGEN_TCG_V6_vsubhsat(SHORTCODE) \
288 + tcg_gen_gvec_sssub(MO_16, VdV_off, VuV_off, VvV_off, \
289 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
290 +
291 +#define fGEN_TCG_V6_vsubwsat(SHORTCODE) \
292 + tcg_gen_gvec_sssub(MO_32, VdV_off, VuV_off, VvV_off, \
293 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
294 +
295 +#define fGEN_TCG_V6_vsububsat(SHORTCODE) \
296 + tcg_gen_gvec_ussub(MO_8, VdV_off, VuV_off, VvV_off, \
297 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
298 +
299 +#define fGEN_TCG_V6_vsubuhsat(SHORTCODE) \
300 + tcg_gen_gvec_ussub(MO_16, VdV_off, VuV_off, VvV_off, \
301 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
302 +
303 +#define fGEN_TCG_V6_vsubuwsat(SHORTCODE) \
304 + tcg_gen_gvec_ussub(MO_32, VdV_off, VuV_off, VvV_off, \
305 + VECTOR_SIZE_BYTE, VECTOR_SIZE_BYTE)
306 +
307 +#define fGEN_TCG_V6_vsubbsat_dv(SHORTCODE) \
308 + fGEN_TCG_PAIR_ADDSUB(sssub, MO_8, VddV_off, VuuV_off, VvvV_off)
309 +
310 +#define fGEN_TCG_V6_vsubhsat_dv(SHORTCODE) \
311 + fGEN_TCG_PAIR_ADDSUB(sssub, MO_16, VddV_off, VuuV_off, VvvV_off)
312 +
313 +#define fGEN_TCG_V6_vsubwsat_dv(SHORTCODE) \
314 + fGEN_TCG_PAIR_ADDSUB(sssub, MO_32, VddV_off, VuuV_off, VvvV_off)
315 +
316 +#define fGEN_TCG_V6_vsububsat_dv(SHORTCODE) \
317 + fGEN_TCG_PAIR_ADDSUB(ussub, MO_8, VddV_off, VuuV_off, VvvV_off)
318 +
319 +#define fGEN_TCG_V6_vsubuhsat_dv(SHORTCODE) \
320 + fGEN_TCG_PAIR_ADDSUB(ussub, MO_16, VddV_off, VuuV_off, VvvV_off)
321 +
322 +#define fGEN_TCG_V6_vsubuwsat_dv(SHORTCODE) \
323 + fGEN_TCG_PAIR_ADDSUB(ussub, MO_32, VddV_off, VuuV_off, VvvV_off)
324 /* Vector shift right - various forms */
325 #define fGEN_TCG_V6_vasrh(SHORTCODE) \
326 do { \