aboutsummaryrefslogtreecommitdiff
path: root/qapi
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2022-09-11 14:04:36 +0200
committerRichard Henderson <richard.henderson@linaro.org>2022-11-15 09:34:42 +1000
commitd1bb978ba1654ddc6e927621b554eebb216fb9dd (patch)
tree90ee84e4dde9310b4175200161b9db54a8bacdde /qapi
parent98f10f0e2613ba1ac2ad3f57a5174014f6dcb03d (diff)
downloadqemu-d1bb978ba1654ddc6e927621b554eebb216fb9dd.zip
qemu-d1bb978ba1654ddc6e927621b554eebb216fb9dd.tar.gz
qemu-d1bb978ba1654ddc6e927621b554eebb216fb9dd.tar.bz2
target/i386: fix cmpxchg with 32-bit register destination
Unlike the memory case, where "the destination operand receives a write cycle without regard to the result of the comparison", rm must not be touched altogether if the write fails, including not zero-extending it on 64-bit processors. This is not how the movcond currently works, because it is always followed by a gen_op_mov_reg_v to rm. To fix it, introduce a new function that is similar to gen_op_mov_reg_v but writes to a TCG temporary. Considering that gen_extu(ot, oldv) is not needed in the memory case either, the two cases for register and memory destinations are different enough that one might as well fuse the two "if (mod == 3)" into one. So do that too. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/508 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> [rth: Add a test case ] Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'qapi')
0 files changed, 0 insertions, 0 deletions