//
//===----------------------------------------------------------------------===//
-#include "llvm/Config/config.h"
-
-#ifdef __APPLE__
-#include <libkern/OSAtomic.h>
-#elif LLVM_ON_WIN32
-#include <windows.h>
-#endif
-
-
#ifndef LLVM_SYSTEM_ATOMIC_H
#define LLVM_SYSTEM_ATOMIC_H
+#include "llvm/System/DataTypes.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();
+ void MemoryFence();
+
+#ifdef _MSC_VER
+ typedef long cas_flag;
#else
-#warning No memory fence implementation found for you platform!
+ typedef uint32_t cas_flag;
#endif
- }
+ cas_flag CompareAndSwap(volatile cas_flag* ptr,
+ cas_flag new_value,
+ cas_flag old_value);
+ cas_flag AtomicIncrement(volatile cas_flag* ptr);
+ cas_flag AtomicDecrement(volatile cas_flag* ptr);
+ cas_flag AtomicAdd(volatile cas_flag* ptr, cas_flag val);
+ cas_flag AtomicMul(volatile cas_flag* ptr, cas_flag val);
+ cas_flag AtomicDiv(volatile cas_flag* ptr, cas_flag val);
}
}
-#endif
\ No newline at end of file
+#endif