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();



_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel

Reply via email to