From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:53197) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TsSAd-00065q-3a for qemu-devel@nongnu.org; Tue, 08 Jan 2013 00:56:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TsSAb-0003rs-NU for qemu-devel@nongnu.org; Tue, 08 Jan 2013 00:56:19 -0500 Received: from dns1.mips.com ([12.201.5.69]:37296) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TsSAb-0003rf-0B for qemu-devel@nongnu.org; Tue, 08 Jan 2013 00:56:17 -0500 Message-ID: <50EBB213.6070904@mips.com> Date: Mon, 7 Jan 2013 21:43:47 -0800 From: Eric Johnson MIME-Version: 1.0 References: <1357099728-4916-1-git-send-email-petar.jovanovic@rt-rk.com> In-Reply-To: <1357099728-4916-1-git-send-email-petar.jovanovic@rt-rk.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] target-mips: Fix helper and tests for dot/cross-dot product instructions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Petar Jovanovic Cc: petarj@mips.com, qemu-devel@nongnu.org, aurelien@aurel32.net On 01/01/2013 08:08 PM, Petar Jovanovic wrote: > From: Petar Jovanovic > > Helper function for dpa_w_ph, dpax_w_ph, dps_w_ph and dpsx_w_ph incorrectly > defines halfword vector elements as unsigned values. This results in wrong > output which is not triggered in the tests as they also follow this logic. > > Signed-off-by: Petar Jovanovic > --- > target-mips/dsp_helper.c | 2 +- > tests/tcg/mips/mips32-dspr2/dpa_w_ph.c | 4 ++-- > tests/tcg/mips/mips32-dspr2/dpax_w_ph.c | 17 +++++++++++++++++ > tests/tcg/mips/mips32-dspr2/dps_w_ph.c | 17 +++++++++++++++++ > tests/tcg/mips/mips32-dspr2/dpsx_w_ph.c | 4 ++-- > 5 files changed, 39 insertions(+), 5 deletions(-) > > diff --git a/target-mips/dsp_helper.c b/target-mips/dsp_helper.c > index a33e2bf..4870e3d 100644 > --- a/target-mips/dsp_helper.c > +++ b/target-mips/dsp_helper.c > @@ -2473,7 +2473,7 @@ DP_OB(dpsu_h_obr, 0, 24, 16, 8, 0, 24, 16, 8, 0); > void helper_##name(uint32_t ac, target_ulong rs, target_ulong rt, \ > CPUMIPSState *env) \ > { \ > - uint16_t rsB, rsA, rtB, rtA; \ > + int16_t rsB, rsA, rtB, rtA; \ > int32_t tempA, tempB; \ > int64_t acc; \ > \ > diff --git a/tests/tcg/mips/mips32-dspr2/dpa_w_ph.c b/tests/tcg/mips/mips32-dspr2/dpa_w_ph.c > index 1cfbdb0..fae49f1 100644 > --- a/tests/tcg/mips/mips32-dspr2/dpa_w_ph.c > +++ b/tests/tcg/mips/mips32-dspr2/dpa_w_ph.c > @@ -26,8 +26,8 @@ int main() > ach = 6, acl = 7; > rs = 0xFFFF00FF; > rt = 0xFFFF0002; > - resulth = 0x05; > - resultl = 0xfffe0206; > + resulth = 0x06; > + resultl = 0x206; > __asm > ("mthi %0, $ac1\n\t" > "mtlo %1, $ac1\n\t" > diff --git a/tests/tcg/mips/mips32-dspr2/dpax_w_ph.c b/tests/tcg/mips/mips32-dspr2/dpax_w_ph.c > index f756997..514797c 100644 > --- a/tests/tcg/mips/mips32-dspr2/dpax_w_ph.c > +++ b/tests/tcg/mips/mips32-dspr2/dpax_w_ph.c > @@ -23,5 +23,22 @@ int main() > assert(ach == resulth); > assert(acl == resultl); > > + ach = 6, acl = 7; > + rs = 0xFFFF00FF; > + rt = 0xFFFF0002; > + resulth = 0x05; > + resultl = 0xFFFFFF06; > + __asm > + ("mthi %0, $ac1\n\t" > + "mtlo %1, $ac1\n\t" > + "dpax.w.ph $ac1, %2, %3\n\t" > + "mfhi %0, $ac1\n\t" > + "mflo %1, $ac1\n\t" > + : "+r"(ach), "+r"(acl) > + : "r"(rs), "r"(rt) > + ); > + assert(ach == resulth); > + assert(acl == resultl); > + > return 0; > } > diff --git a/tests/tcg/mips/mips32-dspr2/dps_w_ph.c b/tests/tcg/mips/mips32-dspr2/dps_w_ph.c > index 8303643..f51f9b9 100644 > --- a/tests/tcg/mips/mips32-dspr2/dps_w_ph.c > +++ b/tests/tcg/mips/mips32-dspr2/dps_w_ph.c > @@ -23,5 +23,22 @@ int main() > assert(ach == resulth); > assert(acl == resultl); > > + ach = 6, acl = 7; > + rs = 0xFFFF00FF; > + rt = 0xFFFF0002; > + resulth = 0x05; > + resultl = 0xFFFFFE08; > + __asm > + ("mthi %0, $ac1\n\t" > + "mtlo %1, $ac1\n\t" > + "dps.w.ph $ac1, %2, %3\n\t" > + "mfhi %0, $ac1\n\t" > + "mflo %1, $ac1\n\t" > + : "+r"(ach), "+r"(acl) > + : "r"(rs), "r"(rt) > + ); > + assert(ach == resulth); > + assert(acl == resultl); > + > return 0; > } > diff --git a/tests/tcg/mips/mips32-dspr2/dpsx_w_ph.c b/tests/tcg/mips/mips32-dspr2/dpsx_w_ph.c > index 6db59a4..bb49a40 100644 > --- a/tests/tcg/mips/mips32-dspr2/dpsx_w_ph.c > +++ b/tests/tcg/mips/mips32-dspr2/dpsx_w_ph.c > @@ -9,8 +9,8 @@ int main() > > rs = 0xBC0123AD; > rt = 0x01643721; > - resulth = 0x04; > - resultl = 0xD751F050; > + resulth = 0x05; > + resultl = 0xE72F050; > __asm > ("mthi %0, $ac1\n\t" > "mtlo %1, $ac1\n\t" Reviewed-by: Eric Johnson