From: Jacek Caban Subject: [PATCH 2/4] include: Fix __dmb declaration. Message-Id: <26eca62b-1ba4-17a6-0e49-3ff65d683ac5@codeweavers.com> Date: Fri, 26 Feb 2021 15:54:05 +0100 Signed-off-by: Jacek Caban --- include/msvcrt/intrin.h | 40 ++++++++++++++++++++++++++++++++++++++++ include/winnt.h | 13 +++++-------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/include/msvcrt/intrin.h b/include/msvcrt/intrin.h index 38496251d5a..781c6fac823 100644 --- a/include/msvcrt/intrin.h +++ b/include/msvcrt/intrin.h @@ -22,6 +22,46 @@ static inline void __cpuid(int info[4], int ax) } #endif +#ifdef __aarch64__ +typedef enum _tag_ARM64INTR_BARRIER_TYPE +{ + _ARM64_BARRIER_OSHLD = 0x1, + _ARM64_BARRIER_OSHST = 0x2, + _ARM64_BARRIER_OSH = 0x3, + _ARM64_BARRIER_NSHLD = 0x5, + _ARM64_BARRIER_NSHST = 0x6, + _ARM64_BARRIER_NSH = 0x7, + _ARM64_BARRIER_ISHLD = 0x9, + _ARM64_BARRIER_ISHST = 0xa, + _ARM64_BARRIER_ISH = 0xb, + _ARM64_BARRIER_LD = 0xd, + _ARM64_BARRIER_ST = 0xe, + _ARM64_BARRIER_SY = 0xf +} _ARM64INTR_BARRIER_TYPE; +#endif + +#ifdef __arm__ +typedef enum _tag_ARMINTR_BARRIER_TYPE +{ + _ARM_BARRIER_OSHST = 0x2, + _ARM_BARRIER_OSH = 0x3, + _ARM_BARRIER_NSHST = 0x6, + _ARM_BARRIER_NSH = 0x7, + _ARM_BARRIER_ISHST = 0xa, + _ARM_BARRIER_ISH = 0xb, + _ARM_BARRIER_ST = 0xe, + _ARM_BARRIER_SY = 0xf +} _ARMINTR_BARRIER_TYPE; +#endif + +#if defined(_MSC_VER) && (defined(__arm__) || defined(__aarch64__)) + +void __dmb(unsigned int); + +#pragma intrinsic(__dmb) + +#endif + #ifdef __cplusplus } #endif diff --git a/include/winnt.h b/include/winnt.h index 3a9d13b055c..e594c89419a 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -32,6 +32,11 @@ #endif +#if defined(_MSC_VER) && (defined(__arm__) || defined(__aarch64__)) +#include +#endif + + #ifdef __cplusplus extern "C" { #endif @@ -7035,10 +7040,6 @@ static FORCEINLINE void MemoryBarrier(void) #elif defined(__arm__) -#pragma intrinsic(__dmb) - -void __dmb(void); - static FORCEINLINE void MemoryBarrier(void) { __dmb(_ARM_BARRIER_SY); @@ -7046,10 +7047,6 @@ static FORCEINLINE void MemoryBarrier(void) #elif defined(__aarch64__) -#pragma intrinsic(__dmb) - -void __dmb(void); - static FORCEINLINE void MemoryBarrier(void) { __dmb(_ARM64_BARRIER_SY);