qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [4755] cmpxchg fixes


From: Fabrice Bellard
Subject: [Qemu-devel] [4755] cmpxchg fixes
Date: Fri, 20 Jun 2008 14:18:36 +0000

Revision: 4755
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4755
Author:   bellard
Date:     2008-06-20 14:18:35 +0000 (Fri, 20 Jun 2008)

Log Message:
-----------
cmpxchg fixes

Modified Paths:
--------------
    trunk/target-i386/op_helper.c

Modified: trunk/target-i386/op_helper.c
===================================================================
--- trunk/target-i386/op_helper.c       2008-06-19 18:38:40 UTC (rev 4754)
+++ trunk/target-i386/op_helper.c       2008-06-20 14:18:35 UTC (rev 4755)
@@ -1837,6 +1837,8 @@
         stq(a0, ((uint64_t)ECX << 32) | (uint32_t)EBX);
         eflags |= CC_Z;
     } else {
+        /* always do the store */
+        stq(a0, d); 
         EDX = (uint32_t)(d >> 32);
         EAX = (uint32_t)d;
         eflags &= ~CC_Z;
@@ -1850,6 +1852,8 @@
     uint64_t d0, d1;
     int eflags;
 
+    if ((a0 & 0xf) != 0)
+        raise_exception(EXCP0D_GPF);
     eflags = cc_table[CC_OP].compute_all();
     d0 = ldq(a0);
     d1 = ldq(a0 + 8);
@@ -1858,6 +1862,9 @@
         stq(a0 + 8, ECX);
         eflags |= CC_Z;
     } else {
+        /* always do the store */
+        stq(a0, d0); 
+        stq(a0 + 8, d1); 
         EDX = d1;
         EAX = d0;
         eflags &= ~CC_Z;






reply via email to

[Prev in Thread] Current Thread [Next in Thread]