summaryrefslogtreecommitdiffstats
path: root/tests/tcg/mips
diff options
context:
space:
mode:
authorPetar Jovanovic2013-05-23 19:37:53 +0200
committerAurelien Jarno2013-07-28 18:26:36 +0200
commit4877866ee4fbd760c943577bb6d1eba489fb6c6e (patch)
treee90c5764a969b376b2a420a1a974c966ffe6516d /tests/tcg/mips
parentMerge remote-tracking branch 'afaerber/tags/qom-cpu-for-anthony' into staging (diff)
downloadqemu-4877866ee4fbd760c943577bb6d1eba489fb6c6e.tar.gz
qemu-4877866ee4fbd760c943577bb6d1eba489fb6c6e.tar.xz
qemu-4877866ee4fbd760c943577bb6d1eba489fb6c6e.zip
target-mips: fix multiplication in mipsdsp_rndq15_mul_q15_q15
Multiplication of Q15 fractional halfword vectors was incorrect in the previous implementation of mipsdsp_rndq15_mul_q15_q15. It failed to take element signs into account. This change fixes it, and it adds a test case for it. The change also removes unnecessary cast in the function mipsdsp_mul_q15_q15_overflowflag21(). Signed-off-by: Petar Jovanovic <petar.jovanovic@imgtec.com> Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'tests/tcg/mips')
-rw-r--r--tests/tcg/mips/mips32-dsp/mulq_rs_ph.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/tests/tcg/mips/mips32-dsp/mulq_rs_ph.c b/tests/tcg/mips/mips32-dsp/mulq_rs_ph.c
index c7206039ea..370c2a8018 100644
--- a/tests/tcg/mips/mips32-dsp/mulq_rs_ph.c
+++ b/tests/tcg/mips/mips32-dsp/mulq_rs_ph.c
@@ -12,7 +12,24 @@ int main()
resultdsp = 1;
__asm
- ("mulq_rs.ph %0, %2, %3\n\t"
+ ("wrdsp $0\n\t"
+ "mulq_rs.ph %0, %2, %3\n\t"
+ "rddsp %1\n\t"
+ : "=r"(rd), "=r"(dsp)
+ : "r"(rs), "r"(rt)
+ );
+ dsp = (dsp >> 21) & 0x01;
+ assert(rd == result);
+ assert(dsp == resultdsp);
+
+ rs = 0x80011234;
+ rt = 0x80024321;
+ result = 0x7FFD098C;
+ resultdsp = 0;
+
+ __asm
+ ("wrdsp $0\n\t"
+ "mulq_rs.ph %0, %2, %3\n\t"
"rddsp %1\n\t"
: "=r"(rd), "=r"(dsp)
: "r"(rs), "r"(rt)