From: Jacek Caban jacek@codeweavers.com
--- include/winnt.h | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/include/winnt.h b/include/winnt.h index 79fa8d6077b..d8690d313ba 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -33,7 +33,7 @@ #endif
-#if defined(_MSC_VER) && (defined(__arm__) || defined(__aarch64__)) +#if defined(_MSC_VER) && (defined(__arm__) || defined(__aarch64__) || defined(__arm64ec__)) #include <intrin.h> #endif
@@ -2405,6 +2405,17 @@ static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) __asm mov teb, eax; return teb; } +#elif (defined(__aarch64__) || defined(__arm64ec__)) && defined(__GNUC__) +register struct _TEB *__wine_current_teb __asm__("x18"); +static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) +{ + return __wine_current_teb; +} +#elif (defined(__aarch64__) || defined(__arm64ec__)) && defined(_MSC_VER) +static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) +{ + return (struct _TEB *)__getReg(18); +} #elif defined(__x86_64__) && defined(__GNUC__) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { @@ -2432,17 +2443,6 @@ static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { return (struct _TEB *)(ULONG_PTR)_MoveFromCoprocessor(15, 0, 13, 0, 2); } -#elif defined(__aarch64__) && defined(__GNUC__) -register struct _TEB *__wine_current_teb __asm__("x18"); -static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) -{ - return __wine_current_teb; -} -#elif defined(__aarch64__) && defined(_MSC_VER) -static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) -{ - return (struct _TEB *)__getReg(18); -} #elif !defined(RC_INVOKED) # error You must define NtCurrentTeb() for your architecture #endif @@ -6902,6 +6902,13 @@ static FORCEINLINE void MemoryBarrier(void) InterlockedOr(&dummy, 0); }
+#elif defined(__aarch64__) || defined(__arm64ec__) + +static FORCEINLINE void MemoryBarrier(void) +{ + __dmb(_ARM64_BARRIER_SY); +} + #elif defined(__x86_64__)
#pragma intrinsic(__faststorefence) @@ -6919,13 +6926,6 @@ static FORCEINLINE void MemoryBarrier(void) __dmb(_ARM_BARRIER_SY); }
-#elif defined(__aarch64__) - -static FORCEINLINE void MemoryBarrier(void) -{ - __dmb(_ARM64_BARRIER_SY); -} - #endif /* __i386__ */
/* Since Visual Studio 2012, volatile accesses do not always imply acquire and @@ -7191,7 +7191,7 @@ unsigned char _InterlockedCompareExchange128(volatile __int64 *, __int64, __int6
static FORCEINLINE unsigned char InterlockedCompareExchange128( volatile __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare ) { -#ifdef __x86_64__ +#if defined(__x86_64__) && !defined(__arm64ec__) unsigned char ret; __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2" : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),