target/sh4: Fix ADDV opcode
commitc365e6b0705788866a65e7b8206bd4c5332595cd
authorPhilippe Mathieu-Daudé <philmd@linaro.org>
Tue, 30 Apr 2024 10:41:53 +0000 (30 12:41 +0200)
committerPhilippe Mathieu-Daudé <philmd@linaro.org>
Fri, 3 May 2024 15:33:26 +0000 (3 17:33 +0200)
treecc2b466af0bb5a823c15360a451562194b169453
parenta0dbef9f337062eaf8af37bf904dba181469d550
target/sh4: Fix ADDV opcode

The documentation says:

  ADDV Rm, Rn        Rn + Rm -> Rn, overflow -> T

But QEMU implementation was:

  ADDV Rm, Rn        Rn + Rm -> Rm, overflow -> T

Fix by filling the correct Rm register.

Add tests provided by Paul Cercueil.

Cc: qemu-stable@nongnu.org
Fixes: ad8d25a11f ("target-sh4: implement addv and subv using TCG")
Reported-by: Paul Cercueil <paul@crapouillou.net>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2317
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Message-Id: <20240430163125.77430-2-philmd@linaro.org>
target/sh4/translate.c
tests/tcg/sh4/Makefile.target
tests/tcg/sh4/test-addv.c [new file with mode: 0644]