This patch has nothing to do with boost, and makes no changes to inline asm. Just some simple header changes.

This patch:

- Allows winbase.h to use inline intrinsics whether winnt.h is also included or not.
- Brings x86 versions of InterlockedAnd64 et al into alignment with MS.
- Adds the #ifdef for __MINGW_INTRIN_INLINE that jacek wanted for intrin-impl.h.

dw
Index: mingw-w64-headers/include/psdk_inc/intrin-impl.h
===================================================================
--- mingw-w64-headers/include/psdk_inc/intrin-impl.h	(revision 5971)
+++ mingw-w64-headers/include/psdk_inc/intrin-impl.h	(working copy)
@@ -56,6 +56,11 @@
    included multiple times.  This is because this file might be included multiple
    times to define various subsets of the functions it contains. */
 
+/* However we do check for __MINGW_INTRIN_INLINE.  In theory this means we
+   can work with other compilers.  */
+
+#ifdef __MINGW_INTRIN_INLINE
+
 #include <psdk_inc/intrin-mac.h>
 
 /* The Barrier functions can never be in the library.  Since gcc only
@@ -168,6 +173,30 @@
 
 #endif /* __INTRINSIC_GROUP_WINNT */
 
+#ifdef __INTRINSIC_GROUP_WINBASE
+#undef __INTRINSIC_GROUP_WINBASE /* Remove this for efficiency if intrin-impl.h is included again */
+
+/* Note that this gets undefined at the end of this file */
+#define __INTRINSIC_ONLYSPECIAL
+
+#define __INTRINSIC_SPECIAL__InterlockedIncrement
+#define __INTRINSIC_SPECIAL__InterlockedDecrement
+#define __INTRINSIC_SPECIAL__InterlockedExchange
+#define __INTRINSIC_SPECIAL__InterlockedExchangeAdd
+#define __INTRINSIC_SPECIAL__InterlockedCompareExchange
+#define __INTRINSIC_SPECIAL__InterlockedCompareExchangePointer
+#define __INTRINSIC_SPECIAL__InterlockedExchangePointer
+#define __INTRINSIC_SPECIAL__InterlockedAnd64
+#define __INTRINSIC_SPECIAL__InterlockedOr64
+#define __INTRINSIC_SPECIAL__InterlockedXor64
+#define __INTRINSIC_SPECIAL__InterlockedIncrement64
+#define __INTRINSIC_SPECIAL__InterlockedDecrement64
+#define __INTRINSIC_SPECIAL__InterlockedExchange64
+#define __INTRINSIC_SPECIAL__InterlockedExchangeAdd64
+#define __INTRINSIC_SPECIAL__InterlockedCompareExchange64
+
+#endif /* __INTRINSIC_GROUP_WINBASE */
+
 /* To add an additional group, put the #ifdef and definitions here. */
 
 #endif /* __INTRINSIC_ONLYSPECIAL */
@@ -633,3 +662,5 @@
 #undef __INTRINSIC_PROLOG
 #undef __INTRINSIC_EPILOG
 #undef __INTRINSICS_USEINLINE
+
+#endif /* __MINGW_INTRIN_INLINE */
Index: mingw-w64-headers/include/winbase.h
===================================================================
--- mingw-w64-headers/include/winbase.h	(revision 5968)
+++ mingw-w64-headers/include/winbase.h	(working copy)
@@ -11,6 +11,9 @@
 #include <apisetcconv.h>
 #include <winapifamily.h>
 
+#define __INTRINSIC_GROUP_WINBASE /* only define the intrinsics in this file */
+#include <psdk_inc/intrin-impl.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -977,21 +980,21 @@
 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
 
-  LONG  __cdecl _InterlockedIncrement(LONG volatile *Addend);
-  LONG  __cdecl _InterlockedDecrement(LONG volatile *Addend);
-  LONG  __cdecl _InterlockedExchange(LONG volatile *Target,LONG Value);
-  LONG  __cdecl _InterlockedExchangeAdd(LONG volatile *Addend,LONG Value);
-  LONG  __cdecl _InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand);
-  PVOID  __cdecl _InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID Exchange,PVOID Comperand);
-  PVOID  __cdecl _InterlockedExchangePointer(PVOID volatile *Target,PVOID Value);
-  LONG64  __cdecl _InterlockedAnd64(LONG64 volatile *Destination,LONG64 Value);
-  LONG64  __cdecl _InterlockedOr64(LONG64 volatile *Destination,LONG64 Value);
-  LONG64  __cdecl _InterlockedXor64(LONG64 volatile *Destination,LONG64 Value);
-  LONG64  __cdecl _InterlockedIncrement64(LONG64 volatile *Addend);
-  LONG64  __cdecl _InterlockedDecrement64(LONG64 volatile *Addend);
-  LONG64  __cdecl _InterlockedExchange64(LONG64 volatile *Target,LONG64 Value);
-  LONG64  __cdecl _InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value);
-  LONG64  __cdecl _InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand);
+  /* LONG  __cdecl _InterlockedIncrement(LONG volatile *Addend); moved to psdk_inc/intrin-impl.h */
+  /* LONG  __cdecl _InterlockedDecrement(LONG volatile *Addend); moved to psdk_inc/intrin-impl.h */
+  /* LONG  __cdecl _InterlockedExchange(LONG volatile *Target,LONG Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG  __cdecl _InterlockedExchangeAdd(LONG volatile *Addend,LONG Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG  __cdecl _InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand); moved to psdk_inc/intrin-impl.h */
+  /* PVOID  __cdecl _InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID Exchange,PVOID Comperand); moved to psdk_inc/intrin-impl.h */
+  /* PVOID  __cdecl _InterlockedExchangePointer(PVOID volatile *Target,PVOID Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedAnd64(LONG64 volatile *Destination,LONG64 Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedOr64(LONG64 volatile *Destination,LONG64 Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedXor64(LONG64 volatile *Destination,LONG64 Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedIncrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedDecrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedExchange64(LONG64 volatile *Target,LONG64 Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value); moved to psdk_inc/intrin-impl.h */
+  /* LONG64  __cdecl _InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand); moved to psdk_inc/intrin-impl.h */
 
 #else /* not ia64, nor x64.  */
 
@@ -1031,15 +1034,15 @@
 
 #define InterlockedExchangePointer(Target,Value) (PVOID)InterlockedExchange((PLONG)(Target),(LONG)(Value))
 
-  LONGLONG WINAPI InterlockedAnd64 (LONGLONG volatile *Destination,LONGLONG Value);
-  LONGLONG WINAPI InterlockedOr64 (LONGLONG volatile *Destination,LONGLONG Value);
-  LONGLONG WINAPI InterlockedXor64 (LONGLONG volatile *Destination,LONGLONG Value);
-  LONGLONG WINAPI InterlockedIncrement64(LONGLONG volatile *Addend);
-  LONGLONG WINAPI InterlockedDecrement64(LONGLONG volatile *Addend);
-  LONGLONG WINAPI InterlockedExchange64(LONGLONG volatile *Target,LONGLONG Value);
-  LONGLONG WINAPI InterlockedExchangeAdd64(LONGLONG volatile *Addend,LONGLONG Value);
-#ifndef __CRT__NO_INLINE
-  __CRT_INLINE LONGLONG WINAPI InterlockedAnd64 (LONGLONG volatile *Destination,LONGLONG Value) {
+  LONGLONG __cdecl InterlockedAnd64 (LONGLONG volatile *Destination,LONGLONG Value);
+  LONGLONG __cdecl InterlockedOr64 (LONGLONG volatile *Destination,LONGLONG Value);
+  LONGLONG __cdecl InterlockedXor64 (LONGLONG volatile *Destination,LONGLONG Value);
+  LONGLONG __cdecl InterlockedIncrement64(LONGLONG volatile *Addend);
+  LONGLONG __cdecl InterlockedDecrement64(LONGLONG volatile *Addend);
+  LONGLONG __cdecl InterlockedExchange64(LONGLONG volatile *Target,LONGLONG Value);
+  LONGLONG __cdecl InterlockedExchangeAdd64(LONGLONG volatile *Addend,LONGLONG Value);
+
+  FORCEINLINE LONGLONG InterlockedAnd64 (LONGLONG volatile *Destination,LONGLONG Value) {
     LONGLONG Old;
     do {
       Old = *Destination;
@@ -1047,7 +1050,7 @@
     return Old;
   }
 
-  __CRT_INLINE LONGLONG WINAPI InterlockedOr64 (LONGLONG volatile *Destination,LONGLONG Value) {
+  FORCEINLINE LONGLONG InterlockedOr64 (LONGLONG volatile *Destination,LONGLONG Value) {
     LONGLONG Old;
     do {
       Old = *Destination;
@@ -1055,7 +1058,7 @@
     return Old;
   }
 
-  __CRT_INLINE LONGLONG WINAPI InterlockedXor64 (LONGLONG volatile *Destination,LONGLONG Value) {
+  FORCEINLINE LONGLONG InterlockedXor64 (LONGLONG volatile *Destination,LONGLONG Value) {
     LONGLONG Old;
     do {
       Old = *Destination;
@@ -1064,7 +1067,7 @@
     return Old;
   }
 
-  __CRT_INLINE LONGLONG WINAPI InterlockedIncrement64(LONGLONG volatile *Addend) {
+  FORCEINLINE LONGLONG InterlockedIncrement64(LONGLONG volatile *Addend) {
     LONGLONG Old;
     do {
       Old = *Addend;
@@ -1072,7 +1075,7 @@
     return Old + 1;
   }
 
-  __CRT_INLINE LONGLONG WINAPI InterlockedDecrement64(LONGLONG volatile *Addend) {
+  FORCEINLINE LONGLONG InterlockedDecrement64(LONGLONG volatile *Addend) {
     LONGLONG Old;
     do {
       Old = *Addend;
@@ -1080,7 +1083,7 @@
     return Old - 1;
   }
 
-  __CRT_INLINE LONGLONG WINAPI InterlockedExchange64(LONGLONG volatile *Target,LONGLONG Value) {
+  FORCEINLINE LONGLONG InterlockedExchange64(LONGLONG volatile *Target,LONGLONG Value) {
     LONGLONG Old;
     do {
       Old = *Target;
@@ -1088,17 +1091,16 @@
     return Old;
   }
 
-  __CRT_INLINE LONGLONG WINAPI InterlockedExchangeAdd64(LONGLONG volatile *Addend,LONGLONG Value) {
+  FORCEINLINE LONGLONG InterlockedExchangeAdd64(LONGLONG volatile *Addend,LONGLONG Value) {
     LONGLONG Old;
     do {
       Old = *Addend;
     } while(InterlockedCompareExchange64(Addend,Old + Value,Old)!=Old);
     return Old;
   }
-#endif /* !__CRT__NO_INLINE */
 
-#if defined(__cplusplus) && !defined(__CRT__NO_INLINE)
-  __CRT_INLINE PVOID __cdecl
+#if defined(__cplusplus)
+  FORCEINLINE PVOID __cdecl
   __InlineInterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID ExChange,PVOID Comperand) {
     return ((PVOID)(LONG_PTR)
 	    InterlockedCompareExchange((LONG volatile *)(LONG_PTR)Destination,(LONG)(LONG_PTR)ExChange,(LONG)(LONG_PTR)Comperand));
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to