diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 7db8af50acde50c3bdc13a811cf7745ec18f8c61..8cef7e742dc3ec455a397296be126d1616c83d29 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,7 @@
+2002-01-25  Bryce McKinlay  <bryce@waitaki.otago.ac.nz>
+
+	* java/lang/natObject.cc (X86 compare_and_swap): Use +m constraint.
+
 2002-01-24  Per Bothner  <per@bothner.com>
 
 	* verify.cc (is_assignable_from_slow): If target is an interface,
diff --git a/libjava/java/lang/natObject.cc b/libjava/java/lang/natObject.cc
index 816268c4f37e9a09e2c11b83e0394d9515fabe28..bf38433a758bfa8d545b1995f7336690be6ebda3 100644
--- a/libjava/java/lang/natObject.cc
+++ b/libjava/java/lang/natObject.cc
@@ -327,8 +327,9 @@ typedef size_t obj_addr_t;	/* Integer type big enough for object	*/
   {
     char result;
     __asm__ __volatile__("lock; cmpxchgl %2, %0; setz %1"
-	    	: "=m"(*(addr)), "=q"(result)
-		: "r" (new_val), "0"(*(addr)), "a"(old) : "memory");
+	    	: "+m"(*(addr)), "=q"(result)
+		: "r" (new_val), "a"(old)
+		: "memory");
     return (bool) result;
   }