@samitouri / QOSamiQemu / commits / caf3bef5f0

target/riscv: rvv: Handle source overlap of vector widening reduction instructions

Widening reductions read vs2 as a vector of SEW elements and vs1[0] as a scalar of 2*SEW. The ISA does not allow the same vector register to be read with different EEWs, so they must not overlap. vs1 is read as a scalar from element 0, so it is treated as a single vector register (independent of LMUL) when checking overlap. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3208 Signed-off-by: Anton Blanchard <antonb@tenstorrent.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260417080328.31918-1-antonb@tenstorrent.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Anton Blanchard committed Apr 17, 2026 at 08:03 UTC caf3bef5f01e85b8bbd24e1851b50616fa03a5bb
1 file changed +1
target/riscv/insn_trans/trans_rvv.c.inc
+1
@@ -3283,6 +3283,7 @@ GEN_OPIVV_TRANS(vredxor_vs, reduction_check)
3283 static bool reduction_widen_check(DisasContext *s, arg_rmrr *a)
3284 {
3285 return reduction_check(s, a) && (s->sew < MO_64) &&
3286 + !is_overlapped(a->rs1, 1, a->rs2, 1 << MAX(s->lmul, 0)) &&
3287 ((s->sew + 1) <= (s->cfg_ptr->elen >> 4));
3288 }
3289