Use instruction itinerary to determine what instructions are 'cheap'.
[oota-llvm.git] / include / llvm / System / Atomic.h
index c0612f9976c4cbf3914111bc0ccd3b77e0427d4e..fc19369d11bdeb387f34ef02c741cea160736fad 100644 (file)
 #ifndef LLVM_SYSTEM_ATOMIC_H
 #define LLVM_SYSTEM_ATOMIC_H
 
-#include "llvm/Support/DataTypes.h"
+#include "llvm/System/DataTypes.h"
 
 namespace llvm {
   namespace sys {
     void MemoryFence();
 
-    uint32_t CompareAndSwap32(volatile uint32_t* ptr,
-                            uint32_t new_value,
-                            uint32_t old_value);
-    int32_t AtomicIncrement32(volatile int32_t* ptr);
-    int32_t AtomicDecrement32(volatile int32_t* ptr);
-    int32_t AtomicAdd32(volatile int32_t* ptr, int32_t val);
-    
-    int64_t AtomicAdd64(volatile int64_t* ptr, int64_t val);
+#ifdef _MSC_VER
+    typedef long cas_flag;
+#else
+    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);
   }
 }