From c778e8bf215b55c03b68ddbed48b5c663034e279 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Thu, 14 May 2009 05:54:36 +0000 Subject: [PATCH] Add an Atomic.h to the System library, for providing a platform independent API to low-level sync operations. The only one present at the moment is MemoryFence(), and only for the platforms for which I could easily discern the proper way to do it. If your favorite platform isn't represented, patches are welcome! llvm-svn: 71770 --- include/llvm/System/Atomic.h | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 include/llvm/System/Atomic.h 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