From: Anton Korobeynikov Date: Fri, 15 May 2009 11:04:52 +0000 (+0000) Subject: Unbreak mingw build X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=b2e82d07a75af9b66b88941a421ba56694a0328f;p=oota-llvm.git Unbreak mingw build git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71856 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/System/Atomic.h b/include/llvm/System/Atomic.h index 03af143ed5c..b9754621d11 100644 --- a/include/llvm/System/Atomic.h +++ b/include/llvm/System/Atomic.h @@ -27,12 +27,12 @@ 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