All of lore.kernel.org
 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 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.