diff --git a/include/llvm/System/Atomic.h b/include/llvm/System/Atomic.h new file mode 100644 index 00000000000..7db31d52dce --- /dev/null +++ b/include/llvm/System/Atomic.h @@ -0,0 +1,45 @@ +//===- llvm/System/Atomic.h - Atomic Operations -----------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file declares the llvm::sys atomic operations. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Config/config.h" + +#ifdef __APPLE__ +#include +#elif LLVM_ON_WIN32 +#include +#endif + + +#ifndef LLVM_SYSTEM_ATOMIC_H +#define LLVM_SYSTEM_ATOMIC_H + +namespace llvm { + namespace sys { + inline void MemoryFence() { +#if !defined(ENABLE_THREADS) || ENABLE_THREADS == 0 + return; +#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) + __sync_synchronize(); +#elif defined(__APPLE__) + OSMemoryBarrier(); +#elif defined(LLVM_ON_WIN32) +#warning Memory fence implementation requires Windows 2003 or later. + MemoryBarrier(); +#else +#warning No memory fence implementation found for you platform! +#endif + } + } +} + +#endif \ No newline at end of file