Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git] / include / asm-i386 / atomic.h
index 51a1662..4ddce52 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __ARCH_I386_ATOMIC__
 #define __ARCH_I386_ATOMIC__
 
+#include <linux/config.h>
 #include <linux/compiler.h>
 #include <asm/processor.h>
 
@@ -46,8 +47,8 @@ static __inline__ void atomic_add(int i, atomic_t *v)
 {
        __asm__ __volatile__(
                LOCK_PREFIX "addl %1,%0"
-               :"+m" (v->counter)
-               :"ir" (i));
+               :"=m" (v->counter)
+               :"ir" (i), "m" (v->counter));
 }
 
 /**
@@ -61,8 +62,8 @@ static __inline__ void atomic_sub(int i, atomic_t *v)
 {
        __asm__ __volatile__(
                LOCK_PREFIX "subl %1,%0"
-               :"+m" (v->counter)
-               :"ir" (i));
+               :"=m" (v->counter)
+               :"ir" (i), "m" (v->counter));
 }
 
 /**
@@ -80,8 +81,8 @@ static __inline__ int atomic_sub_and_test(int i, atomic_t *v)
 
        __asm__ __volatile__(
                LOCK_PREFIX "subl %2,%0; sete %1"
-               :"+m" (v->counter), "=qm" (c)
-               :"ir" (i) : "memory");
+               :"=m" (v->counter), "=qm" (c)
+               :"ir" (i), "m" (v->counter) : "memory");
        return c;
 }
 
@@ -95,7 +96,8 @@ static __inline__ void atomic_inc(atomic_t *v)
 {
        __asm__ __volatile__(
                LOCK_PREFIX "incl %0"
-               :"+m" (v->counter));
+               :"=m" (v->counter)
+               :"m" (v->counter));
 }
 
 /**
@@ -108,7 +110,8 @@ static __inline__ void atomic_dec(atomic_t *v)
 {
        __asm__ __volatile__(
                LOCK_PREFIX "decl %0"
-               :"+m" (v->counter));
+               :"=m" (v->counter)
+               :"m" (v->counter));
 }
 
 /**
@@ -125,8 +128,8 @@ static __inline__ int atomic_dec_and_test(atomic_t *v)
 
        __asm__ __volatile__(
                LOCK_PREFIX "decl %0; sete %1"
-               :"+m" (v->counter), "=qm" (c)
-               : : "memory");
+               :"=m" (v->counter), "=qm" (c)
+               :"m" (v->counter) : "memory");
        return c != 0;
 }
 
@@ -144,8 +147,8 @@ static __inline__ int atomic_inc_and_test(atomic_t *v)
 
        __asm__ __volatile__(
                LOCK_PREFIX "incl %0; sete %1"
-               :"+m" (v->counter), "=qm" (c)
-               : : "memory");
+               :"=m" (v->counter), "=qm" (c)
+               :"m" (v->counter) : "memory");
        return c != 0;
 }
 
@@ -164,8 +167,8 @@ static __inline__ int atomic_add_negative(int i, atomic_t *v)
 
        __asm__ __volatile__(
                LOCK_PREFIX "addl %2,%0; sets %1"
-               :"+m" (v->counter), "=qm" (c)
-               :"ir" (i) : "memory");
+               :"=m" (v->counter), "=qm" (c)
+               :"ir" (i), "m" (v->counter) : "memory");
        return c;
 }