diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-04-12 12:58:29 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-04-12 17:30:06 +0200 |
commit | fd09b7d9b54ccb4d737747ee7fba26f15f4901cd (patch) | |
tree | cb8b68211b0eff5c2b4927182c93749b053edb71 /src/3rdparty/masm/wtf/Atomics.h | |
parent | 89be8e111c34bf6e96710e574c251587dd59f42b (diff) |
WTF/JSC update to r148273
This brings in various bug fixes in the ARM and MIPS assemblers as well as
a Yarr crash fix and performance fix.
This change doesn't compile as-is, but the next change will
apply the modifications necessary to compile. That'll make future updates
easier as it allows for cherry-picking because the modifications are usually
always the same.
Change-Id: Iac32f62c71e8ff908deb41f28f12fbc98c0823e1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/3rdparty/masm/wtf/Atomics.h')
-rw-r--r-- | src/3rdparty/masm/wtf/Atomics.h | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/src/3rdparty/masm/wtf/Atomics.h b/src/3rdparty/masm/wtf/Atomics.h index 750e1092ad..df5abec81d 100644 --- a/src/3rdparty/masm/wtf/Atomics.h +++ b/src/3rdparty/masm/wtf/Atomics.h @@ -65,18 +65,8 @@ #if OS(WINDOWS) #include <windows.h> -#elif OS(DARWIN) -#include <libkern/OSAtomic.h> #elif OS(QNX) #include <atomic.h> -#elif OS(ANDROID) -#include <sys/atomics.h> -#elif COMPILER(GCC) -#if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2))) && !defined(__LSB_VERSION__) -#include <ext/atomicity.h> -#else -#include <bits/atomicity.h> -#endif #endif namespace WTF { @@ -84,22 +74,22 @@ namespace WTF { #if OS(WINDOWS) #define WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED 1 -#if COMPILER(MINGW) || COMPILER(MSVC7_OR_LOWER) || OS(WINCE) +#if OS(WINCE) +inline int atomicIncrement(int* addend) { return InterlockedIncrement(reinterpret_cast<long*>(addend)); } +inline int atomicDecrement(int* addend) { return InterlockedDecrement(reinterpret_cast<long*>(addend)); } +#elif COMPILER(MINGW) || COMPILER(MSVC7_OR_LOWER) inline int atomicIncrement(int* addend) { return InterlockedIncrement(reinterpret_cast<long*>(addend)); } inline int atomicDecrement(int* addend) { return InterlockedDecrement(reinterpret_cast<long*>(addend)); } + +inline int64_t atomicIncrement(int64_t* addend) { return InterlockedIncrement64(reinterpret_cast<long long*>(addend)); } +inline int64_t atomicDecrement(int64_t* addend) { return InterlockedDecrement64(reinterpret_cast<long long*>(addend)); } #else inline int atomicIncrement(int volatile* addend) { return InterlockedIncrement(reinterpret_cast<long volatile*>(addend)); } inline int atomicDecrement(int volatile* addend) { return InterlockedDecrement(reinterpret_cast<long volatile*>(addend)); } -#endif -#elif OS(DARWIN) -#define WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED 1 - -inline int atomicIncrement(int volatile* addend) { return OSAtomicIncrement32Barrier(const_cast<int*>(addend)); } -inline int atomicDecrement(int volatile* addend) { return OSAtomicDecrement32Barrier(const_cast<int*>(addend)); } - -inline int64_t atomicIncrement(int64_t volatile* addend) { return OSAtomicIncrement64Barrier(const_cast<int64_t*>(addend)); } -inline int64_t atomicDecrement(int64_t volatile* addend) { return OSAtomicDecrement64Barrier(const_cast<int64_t*>(addend)); } +inline int64_t atomicIncrement(int64_t volatile* addend) { return InterlockedIncrement64(reinterpret_cast<long long volatile*>(addend)); } +inline int64_t atomicDecrement(int64_t volatile* addend) { return InterlockedDecrement64(reinterpret_cast<long long volatile*>(addend)); } +#endif #elif OS(QNX) #define WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED 1 @@ -108,18 +98,14 @@ inline int64_t atomicDecrement(int64_t volatile* addend) { return OSAtomicDecrem inline int atomicIncrement(int volatile* addend) { return static_cast<int>(atomic_add_value(reinterpret_cast<unsigned volatile*>(addend), 1)) + 1; } inline int atomicDecrement(int volatile* addend) { return static_cast<int>(atomic_sub_value(reinterpret_cast<unsigned volatile*>(addend), 1)) - 1; } -#elif OS(ANDROID) -#define WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED 1 - -// Note, __atomic_{inc, dec}() return the previous value of addend's content. -inline int atomicIncrement(int volatile* addend) { return __atomic_inc(addend) + 1; } -inline int atomicDecrement(int volatile* addend) { return __atomic_dec(addend) - 1; } - #elif COMPILER(GCC) && !CPU(SPARC64) // sizeof(_Atomic_word) != sizeof(int) on sparc64 gcc #define WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED 1 -inline int atomicIncrement(int volatile* addend) { return __gnu_cxx::__exchange_and_add(addend, 1) + 1; } -inline int atomicDecrement(int volatile* addend) { return __gnu_cxx::__exchange_and_add(addend, -1) - 1; } +inline int atomicIncrement(int volatile* addend) { return __sync_add_and_fetch(addend, 1); } +inline int atomicDecrement(int volatile* addend) { return __sync_sub_and_fetch(addend, 1); } + +inline int64_t atomicIncrement(int64_t volatile* addend) { return __sync_add_and_fetch(addend, 1); } +inline int64_t atomicDecrement(int64_t volatile* addend) { return __sync_sub_and_fetch(addend, 1); } #endif |