winnt.h: Use __MINGW_INTRIN_INLINE for a few Interlocked* functions and make them available in 32-bit version git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@4297 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/include/winnt.h b/mingw-w64-headers/include/winnt.h index dc03dac..7ab60da 100644 --- a/mingw-w64-headers/include/winnt.h +++ b/mingw-w64-headers/include/winnt.h
@@ -1354,29 +1354,6 @@ : : "r"(Value),"m"(*Destination) : "memory"); return *Destination; } - __CRT_INLINE LONG InterlockedIncrement(LONG volatile *Addend) { - LONG ret = 1; - __asm__ __volatile__ ("lock\n\t" - "xaddl %0,%1" - : "+r" (ret), "+m" (*Addend) - : : "memory"); - return ret + 1; - } - __CRT_INLINE LONG InterlockedDecrement(LONG volatile *Addend) { - LONG ret = -1; - __asm__ __volatile__ ("lock\n\t" - "xaddl %0,%1" - : "+r" (ret), "+m" (*Addend) - : : "memory"); - return ret - 1; - } - __CRT_INLINE LONG InterlockedExchange(LONG volatile *Target,LONG Value) { - __asm__ __volatile__ ("lock ; xchgl %0,%1" - : "=r"(Value) - : "m"(*Target),"0"(Value) - : "memory"); - return Value; - } __CRT_INLINE LONG64 InterlockedAnd64(LONG64 volatile *Destination,LONG64 Value) { __asm__ __volatile__("lock ; andq %0,%1" : : "r"(Value),"m"(*Destination) : "memory"); @@ -1986,6 +1963,32 @@ #endif /* end of _X86_ */ +#if defined(__MINGW_INTRIN_INLINE) && (defined(__i386__) || defined(__x86_64)) + __MINGW_INTRIN_INLINE LONG WINAPI InterlockedIncrement(LONG volatile *Addend) { + LONG ret = 1; + __asm__ __volatile__ ("lock\n\t" + "xaddl %0,%1" + : "+r" (ret), "+m" (*Addend) + : : "memory"); + return ret + 1; + } + __MINGW_INTRIN_INLINE LONG WINAPI InterlockedDecrement(LONG volatile *Addend) { + LONG ret = -1; + __asm__ __volatile__ ("lock\n\t" + "xaddl %0,%1" + : "+r" (ret), "+m" (*Addend) + : : "memory"); + return ret - 1; + } + __MINGW_INTRIN_INLINE LONG WINAPI InterlockedExchange(LONG volatile *Target,LONG Value) { + __asm__ __volatile__ ("lock ; xchgl %0,%1" + : "=r"(Value) + : "m"(*Target),"0"(Value) + : "memory"); + return Value; + } +#endif + #ifndef _LDT_ENTRY_DEFINED #define _LDT_ENTRY_DEFINED