From: Aurelien Jarno <aurelien@aurel32.net>
To: Petar Jovanovic <petar.jovanovic@rt-rk.com>
Cc: rth7680@gmail.com, qemu-stable@nongnu.org, qemu-devel@nongnu.org,
blauwirbel@gmail.com, petarj@mips.com, afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH v2] target-mips: Fix incorrect shift for SHILO and SHILOV
Date: Thu, 6 Dec 2012 09:11:17 +0100 [thread overview]
Message-ID: <20121206081117.GB4244@ohm.aurel32.net> (raw)
In-Reply-To: <1354663750-2163-1-git-send-email-petar.jovanovic@rt-rk.com>
On Wed, Dec 05, 2012 at 12:29:10AM +0100, Petar Jovanovic wrote:
> From: Petar Jovanovic <petarj@mips.com>
>
> helper_shilo has not been shifting an accumulator value correctly for negative
> values in 'shift' field. Minor optimization for shift=0 case.
> This change also adds tests that will trigger issue and check for regressions.
>
> Signed-off-by: Petar Jovanovic <petarj@mips.com>
> ---
> target-mips/dsp_helper.c | 17 +++++++++--------
> tests/tcg/mips/mips32-dsp/shilo.c | 18 ++++++++++++++++++
> tests/tcg/mips/mips32-dsp/shilov.c | 20 ++++++++++++++++++++
> 3 files changed, 47 insertions(+), 8 deletions(-)
>
> diff --git a/target-mips/dsp_helper.c b/target-mips/dsp_helper.c
> index e7949c2..44f6dc7 100644
> --- a/target-mips/dsp_helper.c
> +++ b/target-mips/dsp_helper.c
> @@ -3814,17 +3814,18 @@ void helper_shilo(target_ulong ac, target_ulong rs, CPUMIPSState *env)
>
> rs5_0 = rs & 0x3F;
> rs5_0 = (int8_t)(rs5_0 << 2) >> 2;
> - rs5_0 = MIPSDSP_ABS(rs5_0);
> +
> + if (unlikely(rs5_0 == 0)) {
> + return;
> + }
> +
> acc = (((uint64_t)env->active_tc.HI[ac] << 32) & MIPSDSP_LHI) |
> ((uint64_t)env->active_tc.LO[ac] & MIPSDSP_LLO);
> - if (rs5_0 == 0) {
> - temp = acc;
> +
> + if (rs5_0 > 0) {
> + temp = acc >> rs5_0;
> } else {
> - if (rs5_0 > 0) {
> - temp = acc >> rs5_0;
> - } else {
> - temp = acc << rs5_0;
> - }
> + temp = acc << -rs5_0;
> }
>
> env->active_tc.HI[ac] = (target_ulong)(int32_t)((temp & MIPSDSP_LHI) >> 32);
> diff --git a/tests/tcg/mips/mips32-dsp/shilo.c b/tests/tcg/mips/mips32-dsp/shilo.c
> index b686616..ce8ebc6 100644
> --- a/tests/tcg/mips/mips32-dsp/shilo.c
> +++ b/tests/tcg/mips/mips32-dsp/shilo.c
> @@ -23,5 +23,23 @@ int main()
> assert(ach == resulth);
> assert(acl == resultl);
>
> +
> + ach = 0x1;
> + acl = 0x80000000;
> +
> + resulth = 0x3;
> + resultl = 0x0;
> +
> + __asm
> + ("mthi %0, $ac1\n\t"
> + "mtlo %1, $ac1\n\t"
> + "shilo $ac1, -1\n\t"
> + "mfhi %0, $ac1\n\t"
> + "mflo %1, $ac1\n\t"
> + : "+r"(ach), "+r"(acl)
> + );
> + assert(ach == resulth);
> + assert(acl == resultl);
> +
> return 0;
> }
> diff --git a/tests/tcg/mips/mips32-dsp/shilov.c b/tests/tcg/mips/mips32-dsp/shilov.c
> index f186032..e1d6cea 100644
> --- a/tests/tcg/mips/mips32-dsp/shilov.c
> +++ b/tests/tcg/mips/mips32-dsp/shilov.c
> @@ -25,5 +25,25 @@ int main()
> assert(ach == resulth);
> assert(acl == resultl);
>
> +
> + rs = 0xffffffff;
> + ach = 0x1;
> + acl = 0x80000000;
> +
> + resulth = 0x3;
> + resultl = 0x0;
> +
> + __asm
> + ("mthi %0, $ac1\n\t"
> + "mtlo %1, $ac1\n\t"
> + "shilov $ac1, %2\n\t"
> + "mfhi %0, $ac1\n\t"
> + "mflo %1, $ac1\n\t"
> + : "+r"(ach), "+r"(acl)
> + : "r"(rs)
> + );
> + assert(ach == resulth);
> + assert(acl == resultl);
> +
> return 0;
> }
Thanks, applied. I added a CC: to qemu-stable@nongnu.org, as it is
definitely stable material.
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien@aurel32.net http://www.aurel32.net
prev parent reply other threads:[~2012-12-06 8:12 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-04 23:29 [Qemu-devel] [PATCH v2] target-mips: Fix incorrect shift for SHILO and SHILOV Petar Jovanovic
2012-12-05 15:36 ` Richard Henderson
2012-12-05 15:49 ` Peter Maydell
2012-12-05 15:51 ` Richard Henderson
2012-12-05 16:38 ` Peter Maydell
2012-12-05 23:16 ` Richard Henderson
2012-12-06 8:17 ` Aurelien Jarno
2012-12-05 20:41 ` Johnson, Eric
2012-12-05 21:36 ` Johnson, Eric
2012-12-05 23:31 ` Jovanovic, Petar
2012-12-06 0:13 ` Johnson, Eric
2012-12-06 8:11 ` Aurelien Jarno [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=20121206081117.GB4244@ohm.aurel32.net \
--to=aurelien@aurel32.net \
--cc=afaerber@suse.de \
--cc=blauwirbel@gmail.com \
--cc=petar.jovanovic@rt-rk.com \
--cc=petarj@mips.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@nongnu.org \
--cc=rth7680@gmail.com \
/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.