From: Yoshinori Sato <ysato@users.sourceforge.jp>
To: "Philippe Mathieu-Daudé" <philmd@linaro.org>
Cc: Zack Buhman <zack@buhman.org>,
qemu-devel@nongnu.org, Samuel Tardieu <sam@rfc1149.net>,
Aurelien Jarno <aurelien@aurel32.net>
Subject: Re: [PATCH] sh4: mac.w: memory accesses are 16-bit words
Date: Wed, 03 Apr 2024 15:32:55 +0900 [thread overview]
Message-ID: <87o7arvtuw.wl-ysato@users.sourceforge.jp> (raw)
In-Reply-To: <16cb6ac0-818b-4393-8b27-20879a150a79@linaro.org>
On Tue, 02 Apr 2024 22:26:25 +0900,
Philippe Mathieu-Daudé wrote:
>
> On 2/4/24 11:37, Zack Buhman wrote:
> > Before this change, executing a code sequence such as:
> >
> > mova tblm,r0
> > mov r0,r1
> > mova tbln,r0
> > clrs
> > clrmac
> > mac.w @r0+,@r1+
> > mac.w @r0+,@r1+
> >
> > .align 4
> > tblm: .word 0x1234
> > .word 0x5678
> > tbln: .word 0x9abc
> > .word 0xdefg
> >
> > Does not result in correct behavior:
> >
> > Expected behavior:
> > first macw : macl = 0x1234 * 0x9abc + 0x0
> > mach = 0x0
> >
> > second macw: macl = 0x5678 * 0xdefg + 0xb00a630
> > mach = 0x0
> >
> > Observed behavior (qemu-sh4eb, prior to this commit):
> >
> > first macw : macl = 0x5678 * 0xdefg + 0x0
> > mach = 0x0
> >
> > second macw: (unaligned longword memory access, SIGBUS)
> >
> > Various SH-4 ISA manuals also confirm that `mac.w` is a 16-bit word memory
> > access, not a 32-bit longword memory access.
> >
> > Signed-off-by: Zack Buhman <zack@buhman.org>
> > ---
> > target/sh4/translate.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/target/sh4/translate.c b/target/sh4/translate.c
> > index a9b1bc7524..6643c14dde 100644
> > --- a/target/sh4/translate.c
> > +++ b/target/sh4/translate.c
> > @@ -816,10 +816,10 @@ static void _decode_opc(DisasContext * ctx)
> > TCGv arg0, arg1;
> > arg0 = tcg_temp_new();
> > tcg_gen_qemu_ld_i32(arg0, REG(B7_4), ctx->memidx,
> > - MO_TESL | MO_ALIGN);
> > + MO_TESW | MO_ALIGN);
> > arg1 = tcg_temp_new();
> > tcg_gen_qemu_ld_i32(arg1, REG(B11_8), ctx->memidx,
> > - MO_TESL | MO_ALIGN);
> > + MO_TESW | MO_ALIGN);
>
> Apparently invalid since its introduction in commit fdf9b3e831.
>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>
> > gen_helper_macw(tcg_env, arg0, arg1);
> > tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 2);
> > tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 2);
>
SH4 Software manual said.
https://www.renesas.com/us/en/document/mas/sh-4-software-manual
> This instruction performs signed multiplication of the 16-bit operands
> whose addresses are the contents of general registers Rm and Rn,
> adds the 32-bit result to the MAC register contents, and stores the
> result in the MAC register. Operands Rm and Rn are each incremented
> by 2 each time they are read.
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
--
Yosinori Sato
next prev parent reply other threads:[~2024-04-03 6:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-02 9:37 [PATCH] sh4: mac.w: memory accesses are 16-bit words Zack Buhman
2024-04-02 13:26 ` Philippe Mathieu-Daudé
2024-04-03 6:32 ` Yoshinori Sato [this message]
2024-04-05 22:54 ` Richard Henderson
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=87o7arvtuw.wl-ysato@users.sourceforge.jp \
--to=ysato@users.sourceforge.jp \
--cc=aurelien@aurel32.net \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=sam@rfc1149.net \
--cc=zack@buhman.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.