]> git.ipfire.org Git - thirdparty/qemu.git/commit
target/ppc: Fix LQ, STQ register-pair order for big-endian
authorNicholas Piggin <npiggin@gmail.com>
Mon, 21 Aug 2023 15:30:51 +0000 (01:30 +1000)
committerMichael Tokarev <mjt@tls.msk.ru>
Thu, 21 Sep 2023 16:35:19 +0000 (19:35 +0300)
commitf64f1f8704d6db00623b67dd20958e54e18f5336
tree4168f1a615978f7ce725e1d320fcdc6a108f0f05
parent9f54fef2c00f3c710ef277c2dd3813385315afd0
target/ppc: Fix LQ, STQ register-pair order for big-endian

LQ, STQ have the same register-pair ordering as LQARX/STQARX., which is
the even (lower) register contains the most significant bits. This is
not implemented correctly for big-endian.

do_ldst_quad() has variables low_addr_gpr and high_addr_gpr which is
confusing because they are low and high addresses, whereas LQARX/STQARX.
and most such things use the low and high values for lo/hi variables.
The conversion to native 128-bit memory access functions missed this
strangeness.

Fix this by changing the if condition, and change the variable names to
hi/lo to match convention.

Cc: qemu-stable@nongnu.org
Reported-by: Ivan Warren <ivan@vmfacility.fr>
Fixes: 57b38ffd0c6f ("target/ppc: Use tcg_gen_qemu_{ld,st}_i128 for LQARX, LQ, STQ")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1836
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
(cherry picked from commit 718209358f2e4f231cbacf974c3299c4fe7beb83)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
target/ppc/translate/fixedpoint-impl.c.inc