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