qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Fix overflow conditions for MIPS add / subtract
@ 2006-04-13 18:49 Stefan Weil
  2006-04-28 13:28 ` Daniel Jacobowitz
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Weil @ 2006-04-13 18:49 UTC (permalink / raw)
  To: qemu-devel

Hi,

I had problems with MIPS system emulation (AR7 based DSL router)
which were caused by wrong overflow exceptions.

With the patch given below emulation works. See this link for
first results: http://forum.openwrt.org/viewtopic.php?id=4381

In user mode emulation, the MIPS emulation currently ignores
exceptions. So the bug might have an effect on emulation speed
but not on functionality for user mode emulation.

Regards
Stefan Weil

PS. Please include this and also my last MIPS patch in CVS HEAD.


Index: target-mips/op.c
===================================================================
RCS file: /sources/qemu/qemu/target-mips/op.c,v
retrieving revision 1.5
diff -u -b -B -r1.5 op.c
--- target-mips/op.c    5 Dec 2005 19:59:36 -0000       1.5
+++ target-mips/op.c    13 Apr 2006 18:38:19 -0000
@@ -206,7 +206,8 @@

     tmp = T0;
     T0 += T1;
-    if ((T0 >> 31) ^ (T1 >> 31) ^ (tmp >> 31)) {
+    if (((tmp ^ T1 ^ (-1)) & (T0 ^ T1)) >> 31) {
+       /* operands of same sign, result different sign */
         CALL_FROM_TB1(do_raise_exception_direct, EXCP_OVERFLOW);
     }
     RETURN();
@@ -224,7 +225,8 @@

     tmp = T0;
     T0 = (int32_t)T0 - (int32_t)T1;
-    if (!((T0 >> 31) ^ (T1 >> 31) ^ (tmp >> 31))) {
+    if (((tmp ^ T1) & (tmp ^ T0)) >> 31) {
+       /* operands of different sign, first operand and result 
different sign */
         CALL_FROM_TB1(do_raise_exception_direct, EXCP_OVERFLOW);
     }
     RETURN();

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2006-04-28 15:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-04-13 18:49 [Qemu-devel] [PATCH] Fix overflow conditions for MIPS add / subtract Stefan Weil
2006-04-28 13:28 ` Daniel Jacobowitz
2006-04-28 14:51   ` Dirk Behme
2006-04-28 15:47     ` Daniel Jacobowitz
2006-04-28 15:52   ` Julian Seward

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).