Unbreak mingw build
authorAnton Korobeynikov <asl@math.spbu.ru>
Fri, 15 May 2009 11:04:52 +0000 (11:04 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Fri, 15 May 2009 11:04:52 +0000 (11:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71856 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/System/Atomic.h

index 03af143ed5cbb0e40a94e62b3163aabc8f390a78..b9754621d11eb7e61a9de61da647923fe9fd1b05 100644 (file)
 
 namespace llvm {
   namespace sys {
-    
+
 #if !defined(ENABLE_THREADS) || ENABLE_THREADS == 0
     inline void MemoryFence() {
       return;
     }
-    
+
     typedef uint32_t cas_flag;
     inline cas_flag CompareAndSwap(cas_flag* dest, cas_flag exc, cas_flag c) {
       cas_flag result = *dest;
@@ -40,22 +40,22 @@ namespace llvm {
         *dest = exc;
       return result;
     }
-    
+
 #elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
     inline void MemoryFence() {
       __sync_synchronize();
     }
-    
+
     typedef volatile uint32_t cas_flag;
     inline cas_flag CompareAndSwap(cas_flag* dest, cas_flag exc, cas_flag c) {
       return __sync_val_compare_and_swap(dest, exc, c);
     }
-    
+
 #elif defined(__APPLE__)
     inline void MemoryFence() {
       OSMemoryBarrier();
     }
-    
+
     typedef volatile int32_t cas_flag;
     inline cas_flag CompareAndSwap(cas_flag* dest, cas_flag exc, cas_flag c) {
       cas_flag old = *dest;
@@ -63,11 +63,18 @@ namespace llvm {
       return old;
     }
 #elif defined(LLVM_ON_WIN32)
-#warning Memory fence implementation requires Windows 2003 or later.
     inline void MemoryFence() {
+#ifdef _MSC_VER
       MemoryBarrier();
+#elif 0
+      // FIXME: Requires SSE2 support
+      __asm__ __volatile__("mfence":::"memory");
+#else
+      // FIXME: just temporary workaround. We need to emit some fence...
+      __asm__ __volatile__("":::"memory");
+#endif
     }
-    
+
     typedef volatile long cas_flag;
     inline cas_flag CompareAndSwap(cas_flag* dest, cas_flag exc, cas_flag c) {
       return InterlockedCompareExchange(dest, exc, c);
@@ -75,8 +82,8 @@ namespace llvm {
 #else
 #error No memory atomics implementation for your platform!
 #endif
-    
+
   }
 }
 
-#endif
\ No newline at end of file
+#endif