qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Paul Cercueil <paul@crapouillou.net>, qemu-devel@nongnu.org
Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	qemu-stable@nongnu.org
Subject: Re: [RFC PATCH] target/sh4: Fix SUBV opcode
Date: Tue, 30 Apr 2024 16:32:51 +0200	[thread overview]
Message-ID: <84cb5da9-fdae-45d0-83c8-5d61be396c43@linaro.org> (raw)
In-Reply-To: <e21812c1594771f0a396e7ab14a1cb4b05324387.camel@crapouillou.net>

On 30/4/24 16:16, Paul Cercueil wrote:
> Hi Philippe,
> 
> If I'm not mistaken, the overflow / underflow can be calculated like
> this:
> 
> T = ((Rn ^ Rm) & (Result ^ Rn)) >> 31
> 
> Looking at what Qemu does (before this patch), it was doing this:
> T = ((Rn ^ Rm) & (Result ^ Rm)) >> 31
> 
> I changed line 936 to this, and overflow / underflow with SUBV now seem
> to work fine:
> 
> tcg_gen_xor_i32(t1, t0, REG(B11_8));
> 
> So a change from REG(B7_B4) to REG(B11_8).

Correct, thanks!

> 
> Cheers,
> -Paul
> 
> Le mardi 30 avril 2024 à 14:06 +0200, Philippe Mathieu-Daudé a écrit :
>> The documentation says:
>>
>>    SUBV Rm, Rn        Rn - Rm -> Rn, underflow -> T
>>
>> While correctly performing the substraction, the underflow
>> is not detected.
>>
>> While we can check the high xored bit for overflow, for
>> underflow we need to check the xored value is not negative.
>>
>> 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/2318
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>>   target/sh4/translate.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/target/sh4/translate.c b/target/sh4/translate.c
>> index 4a1dd0d1f4..1c48d8ebea 100644
>> --- a/target/sh4/translate.c
>> +++ b/target/sh4/translate.c
>> @@ -937,7 +937,7 @@ static void _decode_opc(DisasContext * ctx)
>>               t2 = tcg_temp_new();
>>               tcg_gen_xor_i32(t2, REG(B11_8), REG(B7_4));
>>               tcg_gen_and_i32(t1, t1, t2);
>> -            tcg_gen_shri_i32(cpu_sr_t, t1, 31);
>> +            tcg_gen_setcondi_i32(TCG_COND_GE, cpu_sr_t, t1, 0);
>>               tcg_gen_mov_i32(REG(B11_8), t0);
>>           }
>>           return;
> 



      reply	other threads:[~2024-04-30 14:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-30 12:06 [RFC PATCH] target/sh4: Fix SUBV opcode Philippe Mathieu-Daudé
2024-04-30 13:10 ` Paul Cercueil
2024-04-30 14:16 ` Paul Cercueil
2024-04-30 14:32   ` Philippe Mathieu-Daudé [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=84cb5da9-fdae-45d0-83c8-5d61be396c43@linaro.org \
    --to=philmd@linaro.org \
    --cc=glaubitz@physik.fu-berlin.de \
    --cc=paul@crapouillou.net \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-stable@nongnu.org \
    --cc=ysato@users.sourceforge.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).