From a15056faf95f84bf947e5e435432d72b1317d4f3 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 26 Oct 2008 10:47:07 +0000 Subject: [PATCH] Dmitry Gorbachev - 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 | 8 ++++---- reactos/include/psdk/winnt.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/reactos/include/psdk/intrin_x86.h b/reactos/include/psdk/intrin_x86.h index 3873ad4ed2f..7900d602a43 100644 --- a/reactos/include/psdk/intrin_x86.h +++ b/reactos/include/psdk/intrin_x86.h @@ -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 diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 4564d0ffcce..719f0c8f225 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -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;