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