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