]> git.ipfire.org Git - thirdparty/qemu.git/commit
target/arm: Don't assert for 128-bit tile accesses when SVL is 128
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 22 Jul 2024 17:29:54 +0000 (18:29 +0100)
committerMichael Tokarev <mjt@tls.msk.ru>
Fri, 2 Aug 2024 07:22:33 +0000 (10:22 +0300)
commit87fd848729eab2989fd5e1424fbc257fd060729b
tree739e36a200e814fc346d5d7e93f464c7f86cac0f
parent5d64275517dd641a115ff3a1e12d16fea5a4f180
target/arm: Don't assert for 128-bit tile accesses when SVL is 128

For an instruction which accesses a 128-bit element tile when
the SVL is also 128 (for example MOV z0.Q, p0/M, ZA0H.Q[w0,0]),
we will assert in get_tile_rowcol():

qemu-system-aarch64: ../../tcg/tcg-op.c:926: tcg_gen_deposit_z_i32: Assertion `len > 0' failed.

This happens because we calculate
    len = ctz32(streaming_vec_reg_size(s)) - esz;$
but if the SVL and the element size are the same len is 0, and
the deposit operation asserts.

In this case the ZA storage contains exactly one 128 bit
element ZA tile, and the horizontal or vertical slice is just
that tile. This means that regardless of the index value in
the Ws register, we always access that tile. (In pseudocode terms,
we calculate (index + offset) MOD 1, which is 0.)

Special case the len == 0 case to avoid hitting the assertion
in tcg_gen_deposit_z_i32().

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20240722172957.1041231-2-peter.maydell@linaro.org
(cherry picked from commit 56f1c0db928aae0b83fd91c89ddb226b137e2b21)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
target/arm/translate-sme.c