[PATCH 1/5] include: InterlockedExchangeAdd64 msvc intrinsic does not exist in x86.

Stefan Dösinger stefan at codeweavers.com
Tue Feb 1 07:58:21 CST 2022


Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>

---

Verified with a stand-alone Visual Studio project. There's also a lower-case
_interlockedexchangeadd64 intrinsic for arm, arm64 and x86_64, but not x86.
---
 include/winnt.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/winnt.h b/include/winnt.h
index 18d9fa656f8..66a591ddaf2 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -6292,7 +6292,6 @@ typedef enum _PROCESS_MITIGATION_POLICY
 #pragma intrinsic(_InterlockedCompareExchange64)
 #pragma intrinsic(_InterlockedExchange)
 #pragma intrinsic(_InterlockedExchangeAdd)
-#pragma intrinsic(_InterlockedExchangeAdd64)
 #pragma intrinsic(_InterlockedIncrement)
 #pragma intrinsic(_InterlockedIncrement16)
 #pragma intrinsic(_InterlockedDecrement)
@@ -6309,7 +6308,6 @@ long      _InterlockedDecrement(long volatile*);
 short     _InterlockedDecrement16(short volatile*);
 long      _InterlockedExchange(long volatile*,long);
 long      _InterlockedExchangeAdd(long volatile*,long);
-long long _InterlockedExchangeAdd64(long long volatile*,long long);
 long      _InterlockedIncrement(long volatile*);
 short     _InterlockedIncrement16(short volatile*);
 long      _InterlockedOr(long volatile *,long);
@@ -6352,9 +6350,11 @@ static FORCEINLINE void MemoryBarrier(void)
 
 #elif defined(__x86_64__)
 
+#pragma intrinsic(_InterlockedExchangeAdd64)
 #pragma intrinsic(__faststorefence)
 
 void __faststorefence(void);
+long long _InterlockedExchangeAdd64(long long volatile *, long long);
 
 static FORCEINLINE void MemoryBarrier(void)
 {
-- 
2.34.1




More information about the wine-devel mailing list