Dmitry Gorbachev
authorAleksey Bragin <aleksey@reactos.org>
Sun, 26 Oct 2008 10:47:07 +0000 (10:47 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Sun, 26 Oct 2008 10:47:07 +0000 (10:47 +0000)
- Fix a modifier flag in interlocked functions' inlined asm. See detailed explanation in bug 3772.
See issue #3772 for more details.

svn path=/trunk/; revision=36979

reactos/include/psdk/intrin_x86.h
reactos/include/psdk/winnt.h

index 3873ad4..7900d60 100644 (file)
@@ -499,7 +499,7 @@ static __inline__ __attribute__((always_inline)) long long _InterlockedIncrement
 static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandreset(volatile long * a, const long b)
 {
        unsigned char retval;
-       __asm__("lock; btrl %[b], %[a]; setb %b[retval]" : [retval] "=r" (retval), [a] "=m" (*a) : [b] "Ir" (b) : "memory");
+       __asm__("lock; btrl %[b], %[a]; setb %b[retval]" : [retval] "=r" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory");
        return retval;
 }
 
@@ -507,7 +507,7 @@ static __inline__ __attribute__((always_inline)) unsigned char _interlockedbitte
 static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandreset64(volatile long long * a, const long long b)
 {
        unsigned char retval;
-       __asm__("lock; btrq %[b], %[a]; setb %b[retval]" : [retval] "=r" (retval), [a] "=m" (*a) : [b] "Ir" (b) : "memory");
+       __asm__("lock; btrq %[b], %[a]; setb %b[retval]" : [retval] "=r" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory");
        return retval;
 }
 #endif
@@ -515,7 +515,7 @@ static __inline__ __attribute__((always_inline)) unsigned char _interlockedbitte
 static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandset(volatile long * a, const long b)
 {
        unsigned char retval;
-       __asm__("lock; btsl %[b], %[a]; setc %b[retval]" : [retval] "=r" (retval), [a] "=m" (*a) : [b] "Ir" (b) : "memory");
+       __asm__("lock; btsl %[b], %[a]; setc %b[retval]" : [retval] "=r" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory");
        return retval;
 }
 
@@ -523,7 +523,7 @@ static __inline__ __attribute__((always_inline)) unsigned char _interlockedbitte
 static __inline__ __attribute__((always_inline)) unsigned char _interlockedbittestandset64(volatile long long * a, const long long b)
 {
        unsigned char retval;
-       __asm__("lock; btsq %[b], %[a]; setc %b[retval]" : [retval] "=r" (retval), [a] "=m" (*a) : [b] "Ir" (b) : "memory");
+       __asm__("lock; btsq %[b], %[a]; setc %b[retval]" : [retval] "=r" (retval), [a] "+m" (*a) : [b] "Ir" (b) : "memory");
        return retval;
 }
 #endif
index 4564d0f..719f0c8 100644 (file)
@@ -4782,7 +4782,7 @@ InterlockedBitTestAndSet(IN LONG volatile *Base,
        __asm__ __volatile__("lock "
                             "btsl %2,%1\n\t"
                             "sbbl %0,%0\n\t"
-                            :"=r" (OldBit),"=m" (*Base)
+                            :"=r" (OldBit),"+m" (*Base)
                             :"Ir" (Bit)
                             : "memory");
        return OldBit;
@@ -4800,7 +4800,7 @@ InterlockedBitTestAndReset(IN LONG volatile *Base,
        __asm__ __volatile__("lock "
                             "btrl %2,%1\n\t"
                             "sbbl %0,%0\n\t"
-                            :"=r" (OldBit),"=m" (*Base)
+                            :"=r" (OldBit),"+m" (*Base)
                             :"Ir" (Bit)
                             : "memory");
        return OldBit;