util/udma_barrier.h: Add barriers support for Elbrus2000
E2K compilers provide a x86_64-compatible intrinsics that expand into native
instructions. Implement barries support using __builtin_ia32_{l,m,s}fence()
instead of the inline assembly for better readability and portability between
e2k hardware.
Signed-off-by: Gleb Popov <6yearold@gmail.com>
diff --git a/util/udma_barrier.h b/util/udma_barrier.h
index c0cd5f0..bfad001 100644
--- a/util/udma_barrier.h
+++ b/util/udma_barrier.h
@@ -102,6 +102,9 @@
#define udma_to_device_barrier() asm volatile("fence ow,ow" ::: "memory")
#elif defined(__mips__)
#define udma_to_device_barrier() asm volatile("sync" ::: "memory")
+#elif defined(__e2k__)
+#include <e2kbuiltin.h>
+#define udma_to_device_barrier() __builtin_ia32_mfence()
#else
#error No architecture specific memory barrier defines found!
#endif
@@ -140,6 +143,8 @@
#define udma_from_device_barrier() asm volatile("fence ir,ir" ::: "memory")
#elif defined(__mips__)
#define udma_from_device_barrier() asm volatile("sync" ::: "memory")
+#elif defined(__e2k__)
+#define udma_from_device_barrier() __builtin_ia32_lfence()
#else
#error No architecture specific memory barrier defines found!
#endif
@@ -213,6 +218,8 @@
#define mmio_flush_writes() s390_pciwb()
#elif defined(__mips__)
#define mmio_flush_writes() asm volatile("sync" ::: "memory")
+#elif defined(__e2k__)
+#define mmio_flush_writes() __builtin_ia32_sfence()
#else
#error No architecture specific memory barrier defines found!
#endif