@samitouri / QOSamiQemu / commits / b0caf328dd

target/arm: Hoist MO_TE into MVE DO_VSTR() macro

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20260414005348.4767-5-philmd@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Philippe Mathieu-Daudé committed Apr 14, 2026 at 02:53 UTC b0caf328ddb244ae394327bef73201d12b5cac42
1 file changed +20 -23
target/arm/tcg/mve_helper.c
+20 -23
@@ -235,7 +235,8 @@ DO_VSTR(vstrh_w, MO_UW, 2, stw, 4, int32_t)
235 unsigned e; \
236 uint32_t addr; \
237 int mmu_idx = arm_to_core_mmu_idx(arm_mmu_idx(env)); \
238 - MemOpIdx oi = make_memop_idx(MFLAG | MO_ALIGN, mmu_idx); \
238 + MemOpIdx oi = make_memop_idx(MO_TE | MFLAG | MO_ALIGN, \
239 + mmu_idx); \
240 for (e = 0; e < 16 / ESIZE; e++, mask >>= ESIZE, eci_mask >>= ESIZE) { \
241 if (!(eci_mask & 1)) { \
242 continue; \
@@ -262,7 +263,8 @@ DO_VSTR(vstrh_w, MO_UW, 2, stw, 4, int32_t)
263 unsigned e; \
264 uint32_t addr; \
265 int mmu_idx = arm_to_core_mmu_idx(arm_mmu_idx(env)); \
265 - MemOpIdx oi = make_memop_idx(MFLAG | MO_ALIGN, mmu_idx); \
266 + MemOpIdx oi = make_memop_idx(MO_TE | MFLAG | MO_ALIGN, \
267 + mmu_idx); \
268 for (e = 0; e < 16 / ESIZE; e++, mask >>= ESIZE, eci_mask >>= ESIZE) { \
269 if (!(eci_mask & 1)) { \
270 continue; \
@@ -347,47 +349,42 @@ DO_VSTR(vstrh_w, MO_UW, 2, stw, 4, int32_t)
349
350 DO_VLDR_SG(vldrb_sg_sh, MO_SB, int8_t, ldb, 2, int16_t, uint16_t, ADDR_ADD, false)
351 DO_VLDR_SG(vldrb_sg_sw, MO_SB, int8_t, ldb, 4, int32_t, uint32_t, ADDR_ADD, false)
350 -DO_VLDR_SG(vldrh_sg_sw, MO_TE | MO_SW, int16_t, ldw, 4,
351 - int32_t, uint32_t, ADDR_ADD, false)
352 +DO_VLDR_SG(vldrh_sg_sw, MO_SW, int16_t, ldw, 4, int32_t, uint32_t, ADDR_ADD, false)
353
354 DO_VLDR_SG(vldrb_sg_ub, MO_UB, uint8_t, ldb, 1, uint8_t, uint8_t, ADDR_ADD, false)
355 DO_VLDR_SG(vldrb_sg_uh, MO_UB, uint8_t, ldb, 2, uint16_t, uint16_t, ADDR_ADD, false)
356 DO_VLDR_SG(vldrb_sg_uw, MO_UB, uint8_t, ldb, 4, uint32_t, uint32_t, ADDR_ADD, false)
356 -DO_VLDR_SG(vldrh_sg_uh, MO_TE | MO_UW, uint16_t, ldw, 2,
357 - uint16_t, uint16_t, ADDR_ADD, false)
358 -DO_VLDR_SG(vldrh_sg_uw, MO_TE | MO_UW, uint16_t, ldw, 4,
359 - uint32_t, uint32_t, ADDR_ADD, false)
360 -DO_VLDR_SG(vldrw_sg_uw, MO_TE | MO_UL, uint32_t, ldl, 4,
361 - uint32_t, uint32_t, ADDR_ADD, false)
357 +DO_VLDR_SG(vldrh_sg_uh, MO_UW, uint16_t, ldw, 2, uint16_t, uint16_t, ADDR_ADD, false)
358 +DO_VLDR_SG(vldrh_sg_uw, MO_UW, uint16_t, ldw, 4, uint32_t, uint32_t, ADDR_ADD, false)
359 +DO_VLDR_SG(vldrw_sg_uw, MO_UL, uint32_t, ldl, 4, uint32_t, uint32_t, ADDR_ADD, false)
360 DO_VLDR64_SG(vldrd_sg_ud, ADDR_ADD, false)
361
364 -DO_VLDR_SG(vldrh_sg_os_sw, MO_TE | MO_SW, int16_t, ldw, 4,
362 +DO_VLDR_SG(vldrh_sg_os_sw, MO_SW, int16_t, ldw, 4,
363 int32_t, uint32_t, ADDR_ADD_OSH, false)
366 -DO_VLDR_SG(vldrh_sg_os_uh, MO_TE | MO_UW, uint16_t, ldw, 2,
364 +DO_VLDR_SG(vldrh_sg_os_uh, MO_UW, uint16_t, ldw, 2,
365 uint16_t, uint16_t, ADDR_ADD_OSH, false)
368 -DO_VLDR_SG(vldrh_sg_os_uw, MO_TE | MO_UW, uint16_t, ldw, 4,
366 +DO_VLDR_SG(vldrh_sg_os_uw, MO_UW, uint16_t, ldw, 4,
367 uint32_t, uint32_t, ADDR_ADD_OSH, false)
370 -DO_VLDR_SG(vldrw_sg_os_uw, MO_TE | MO_UL, uint32_t, ldl, 4,
368 +DO_VLDR_SG(vldrw_sg_os_uw, MO_UL, uint32_t, ldl, 4,
369 uint32_t, uint32_t, ADDR_ADD_OSW, false)
370 DO_VLDR64_SG(vldrd_sg_os_ud, ADDR_ADD_OSD, false)
371
372 DO_VSTR_SG(vstrb_sg_ub, MO_UB, stb, 1, uint8_t, ADDR_ADD, false)
373 DO_VSTR_SG(vstrb_sg_uh, MO_UB, stb, 2, uint16_t, ADDR_ADD, false)
374 DO_VSTR_SG(vstrb_sg_uw, MO_UB, stb, 4, uint32_t, ADDR_ADD, false)
377 -DO_VSTR_SG(vstrh_sg_uh, MO_TE | MO_UW, stw, 2, uint16_t, ADDR_ADD, false)
378 -DO_VSTR_SG(vstrh_sg_uw, MO_TE | MO_UW, stw, 4, uint32_t, ADDR_ADD, false)
379 -DO_VSTR_SG(vstrw_sg_uw, MO_TE | MO_UL, stl, 4, uint32_t, ADDR_ADD, false)
375 +DO_VSTR_SG(vstrh_sg_uh, MO_UW, stw, 2, uint16_t, ADDR_ADD, false)
376 +DO_VSTR_SG(vstrh_sg_uw, MO_UW, stw, 4, uint32_t, ADDR_ADD, false)
377 +DO_VSTR_SG(vstrw_sg_uw, MO_UL, stl, 4, uint32_t, ADDR_ADD, false)
378 DO_VSTR64_SG(vstrd_sg_ud, ADDR_ADD, false)
379
382 -DO_VSTR_SG(vstrh_sg_os_uh, MO_TE | MO_UW, stw, 2, uint16_t, ADDR_ADD_OSH, false)
383 -DO_VSTR_SG(vstrh_sg_os_uw, MO_TE | MO_UW, stw, 4, uint32_t, ADDR_ADD_OSH, false)
384 -DO_VSTR_SG(vstrw_sg_os_uw, MO_TE | MO_UL, stl, 4, uint32_t, ADDR_ADD_OSW, false)
380 +DO_VSTR_SG(vstrh_sg_os_uh, MO_UW, stw, 2, uint16_t, ADDR_ADD_OSH, false)
381 +DO_VSTR_SG(vstrh_sg_os_uw, MO_UW, stw, 4, uint32_t, ADDR_ADD_OSH, false)
382 +DO_VSTR_SG(vstrw_sg_os_uw, MO_UL, stl, 4, uint32_t, ADDR_ADD_OSW, false)
383 DO_VSTR64_SG(vstrd_sg_os_ud, ADDR_ADD_OSD, false)
384
387 -DO_VLDR_SG(vldrw_sg_wb_uw, MO_TE | MO_UL, uint32_t, ldl, 4,
388 - uint32_t, uint32_t, ADDR_ADD, true)
385 +DO_VLDR_SG(vldrw_sg_wb_uw, MO_UL, uint32_t, ldl, 4, uint32_t, uint32_t, ADDR_ADD, true)
386 DO_VLDR64_SG(vldrd_sg_wb_ud, ADDR_ADD, true)
390 -DO_VSTR_SG(vstrw_sg_wb_uw, MO_TE | MO_UL, stl, 4, uint32_t, ADDR_ADD, true)
387 +DO_VSTR_SG(vstrw_sg_wb_uw, MO_UL, stl, 4, uint32_t, ADDR_ADD, true)
388 DO_VSTR64_SG(vstrd_sg_wb_ud, ADDR_ADD, true)
389
390 /*