diff options
Diffstat (limited to 'lib/Support/Atomic.cpp')
| -rw-r--r-- | lib/Support/Atomic.cpp | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/lib/Support/Atomic.cpp b/lib/Support/Atomic.cpp index 015b9c5..58497b9 100644 --- a/lib/Support/Atomic.cpp +++ b/lib/Support/Atomic.cpp @@ -14,7 +14,7 @@ #include "llvm/Support/Atomic.h" #include "llvm/Config/llvm-config.h" #if defined(ANDROID_TARGET_BUILD) -# include "sys/atomics.h" +#include "cutils/atomic.h" #endif using namespace llvm; @@ -47,7 +47,8 @@ sys::cas_flag sys::CompareAndSwap(volatile sys::cas_flag* ptr, *ptr = new_value; return result; #elif defined(ANDROID_TARGET_BUILD) - return __atomic_cmpxchg(old_value, new_value, (volatile int*)ptr); + return android_atomic_cmpxchg((int32_t)old_value, (int32_t)new_value, + (volatile int*)ptr); #elif defined(__GNUC__) return __sync_val_compare_and_swap(ptr, old_value, new_value); #elif defined(_MSC_VER) @@ -62,7 +63,7 @@ sys::cas_flag sys::AtomicIncrement(volatile sys::cas_flag* ptr) { ++(*ptr); return *ptr; #elif defined(ANDROID_TARGET_BUILD) - return __atomic_inc((volatile int*)ptr); + return android_atomic_inc((volatile int*)ptr); #elif defined(__GNUC__) return __sync_add_and_fetch(ptr, 1); #elif defined(_MSC_VER) @@ -77,7 +78,7 @@ sys::cas_flag sys::AtomicDecrement(volatile sys::cas_flag* ptr) { --(*ptr); return *ptr; #elif defined(ANDROID_TARGET_BUILD) - return __atomic_dec((volatile int*)ptr); + return android_atomic_dec((volatile int*)ptr); #elif defined(__GNUC__) return __sync_sub_and_fetch(ptr, 1); #elif defined(_MSC_VER) @@ -92,12 +93,7 @@ sys::cas_flag sys::AtomicAdd(volatile sys::cas_flag* ptr, sys::cas_flag val) { *ptr += val; return *ptr; #elif defined(ANDROID_TARGET_BUILD) - sys::cas_flag original, result; - do { - original = *ptr; - result = original + val; - } while (__atomic_cmpxchg(original, result, (volatile int*)ptr) != original); - return result; + return android_atomic_add((int32_t)val, (volatile int*)ptr); #elif defined(__GNUC__) return __sync_add_and_fetch(ptr, val); #elif defined(_MSC_VER) |
