[PATCH v3 4/4] include: Add MemoryBarrier().
Zebediah Figura
z.figura12 at gmail.com
Mon Jan 18 21:55:03 CST 2021
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
include/winnt.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 49 insertions(+), 1 deletion(-)
diff --git a/include/winnt.h b/include/winnt.h
index db3c91b3d0f..e65df6203cd 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -6983,7 +6983,50 @@ static FORCEINLINE void * WINAPI InterlockedExchangePointer( void *volatile *des
return (void *)_InterlockedExchange( (long volatile*)dest, (long)val );
}
-#endif
+#endif /* __i386__ */
+
+#ifdef __i386__
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+ LONG dummy;
+ InterlockedOr(&dummy, 0);
+}
+
+#elif defined(__x86_64__)
+
+#pragma intrinsic(__faststorefence)
+
+void __faststorefence(void);
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+ __faststorefence();
+}
+
+#elif defined(__arm__)
+
+#pragma intrinsic(__dmb)
+
+void __dmb(void);
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+ __dmb(_ARM_BARRIER_SY);
+}
+
+#elif defined(__aarch64__)
+
+#pragma intrinsic(__dmb)
+
+void __dmb(void);
+
+static FORCEINLINE void MemoryBarrier(void)
+{
+ __dmb(_ARM64_BARRIER_SY);
+}
+
+#endif /* __i386__ */
#elif defined(__GNUC__)
@@ -7058,6 +7101,11 @@ static FORCEINLINE LONG WINAPI InterlockedOr( LONG volatile *dest, LONG incr )
return __sync_fetch_and_or( dest, incr );
}
+static FORCEINLINE void MemoryBarrier(void)
+{
+ __sync_synchronize();
+}
+
#endif /* __GNUC__ */
#ifdef __cplusplus
--
2.29.2
More information about the wine-devel
mailing list