qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Leon Alrae <leon.alrae@imgtec.com>
To: Miodrag Dinic <Miodrag.Dinic@imgtec.com>,
	Aurelien Jarno <aurelien@aurel32.net>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	Petar Jovanovic <Petar.Jovanovic@imgtec.com>
Subject: Re: [Qemu-devel] [PATCH v2] target-mips: Fix ALIGN instruction when bp=0
Date: Fri, 8 Jan 2016 16:09:22 +0000	[thread overview]
Message-ID: <568FDF32.60701@imgtec.com> (raw)
In-Reply-To: <232DDC0A2B605E4F9E85F6904417885F91581A83@BADAG02.ba.imgtec.org>

Hi Miodrag,

Thanks for the fix; I've applied it to the target-mips queue (in future
please send patches inline).

Thanks,
Leon

On 04/01/16 15:52, Miodrag Dinic wrote:
> Hello Aurelien,
> 
> thanks for your comments and review.
> Version 2 of the patch is in the attachment.
> 
> Diff between versions 1 & 2 according to your comments is :
> 
> diff --git a/target-mips/translate.c b/target-mips/translate.c
> index f20678c..d2443d3 100644
> --- a/target-mips/translate.c
> +++ b/target-mips/translate.c
> @@ -4632,12 +4632,13 @@ static void gen_align(DisasContext *ctx, int opc, int rd, int rs, int rt,
>      if (bp == 0) {
>          switch (opc) {
>          case OPC_ALIGN:
> +            tcg_gen_ext32s_tl(cpu_gpr[rd], t0);
> +            break;
>  #if defined(TARGET_MIPS64)
> -            tcg_gen_ext32s_i64(cpu_gpr[rd], t0);
> +        case OPC_DALIGN:
> +            tcg_gen_mov_tl(cpu_gpr[rd], t0);
>              break;
>  #endif
> -        default:
> -            tcg_gen_mov_tl(cpu_gpr[rd], t0);
>          }
>      } else {
>          TCGv t1 = tcg_temp_new();
> 
> * As you suggested I used tcg_gen_ext32s_tl() instead of tcg_gen_ext32s_i64() for the OPC_ALIGN case.
> 
> * I've kept the "TARGET_MIPS64" ifdef guard for the OPC_DALIGN case, to keep the change in-line with the rest of the code where this 64-bit instruction opcode is used.
> 
> Thank you.
> 
> Regards,
> Miodrag
> 
> ________________________________________
> From: Aurelien Jarno [aurelien@aurel32.net]
> Sent: Friday, January 01, 2016 2:02 PM
> To: Miodrag Dinic
> Cc: qemu-devel@nongnu.org; Petar Jovanovic
> Subject: Re: [PATCH] target-mips: Fix ALIGN instruction when bp=0
> 
> [snip]
> 
>> From e01539a11061c447bece8dccde1715da9534024d Mon Sep 17 00:00:00 2001
>> From: Miodrag Dinic <miodrag.dinic@imgtec.com>
>> Date: Thu, 3 Dec 2015 16:48:57 +0100
>> Subject: [PATCH] target-mips: Fix ALIGN instruction when bp=0
>>
>> If executing ALIGN with shift count bp=0 within mips64 emulation,
>> the result of the operation should be sign extended.
>>
>> Taken from the official documentation (pseudo code) :
>>
>> ALIGN:
>>       tmp_rt_hi = unsigned_word(GPR[rt]) << (8*bp)
>>       tmp_rs_lo = unsigned_word(GPR[rs]) >> (8*(4-bp))
>>       tmp = tmp_rt_hi || tmp_rt_lo
>>       GPR[rd] = sign_extend.32(tmp)
>>
>> Signed-off-by: Miodrag Dinic <miodrag.dinic@imgtec.com>
>> ---
>>  target-mips/translate.c | 10 +++++++++-
>>  1 file changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/target-mips/translate.c b/target-mips/translate.c
>> index 5626647..f20678c 100644
>> --- a/target-mips/translate.c
>> +++ b/target-mips/translate.c
>> @@ -4630,7 +4630,15 @@ static void gen_align(DisasContext *ctx, int opc, int rd, int rs, int rt,
>>      t0 = tcg_temp_new();
>>      gen_load_gpr(t0, rt);
>>      if (bp == 0) {
>> -        tcg_gen_mov_tl(cpu_gpr[rd], t0);
>> +        switch (opc) {
>> +        case OPC_ALIGN:
>> +#if defined(TARGET_MIPS64)
>> +            tcg_gen_ext32s_i64(cpu_gpr[rd], t0);
>> +            break;
>> +#endif
> 
> The way to fix that is basically ok. However you should just use
> tcg_gen_ext32s_tl instead of tcg_gen_ext32s_i64 and drop the
> TARGET_MIPS64 #ifdef.
> 
>> +        default:
> 
> Then you can replace this by OPC_DALIGN for more clarity.
> 
>> +            tcg_gen_mov_tl(cpu_gpr[rd], t0);
>> +        }
>>      } else {
>>          TCGv t1 = tcg_temp_new();
>>          gen_load_gpr(t1, rs);
> 
> The resulting binary code should be the same, but less #ifdef means less
> risk of breakage, as the code is always compiled.
> 
> --
> Aurelien Jarno                          GPG: 4096R/1DDD8C9B
> aurelien@aurel32.net                 http://www.aurel32.net
> 

  parent reply	other threads:[~2016-01-08 16:29 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-04 15:52 [Qemu-devel] [PATCH v2] target-mips: Fix ALIGN instruction when bp=0 Miodrag Dinic
2016-01-04 18:01 ` P J P
2016-01-07 17:31 ` Aurelien Jarno
2016-01-08 16:09 ` Leon Alrae [this message]
2016-01-09 15:22   ` Miodrag Dinic

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=568FDF32.60701@imgtec.com \
    --to=leon.alrae@imgtec.com \
    --cc=Miodrag.Dinic@imgtec.com \
    --cc=Petar.Jovanovic@imgtec.com \
    --cc=aurelien@aurel32.net \
    --cc=qemu-devel@nongnu.org \
    /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).