diff options
| author | Csaba Osztrogonác <ossy@webkit.org> | 2013-07-01 16:13:43 +0200 |
|---|---|---|
| committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-01 18:17:47 +0200 |
| commit | 0baf197abc26a0833ac331b4beb362d5148e485b (patch) | |
| tree | 0f531db02caf583f6a370bf38eab0ff4907f0f0e | |
| parent | 86a59036393fb081f094325518205e6c6067b05e (diff) | |
| download | qtwebkit-0baf197abc26a0833ac331b4beb362d5148e485b.tar.gz | |
Use __sync_add_and_fetch instead of __gnu_cxx::__exchange_and_add
https://bugs.webkit.org/show_bug.cgi?id=106729
After r139514 we need atomicIncrement(int64_t volatile*) for all platform. Now the
GCC implementation of atomicIncrement() is based on __gnu_cxx::__exchange_and_add,
which doesn't support int64_t type, but __sync_add_and_fetch does.
Reviewed by Benjamin Poulain.
* wtf/Atomics.h:
(WTF::atomicIncrement):
(WTF::atomicDecrement):
Change-Id: I6f1215b1a73a93f902823a6f0efd1eaef8d53926
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@139553 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
| -rw-r--r-- | Source/WTF/wtf/Atomics.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Source/WTF/wtf/Atomics.h b/Source/WTF/wtf/Atomics.h index 750e1092a..86ed805a1 100644 --- a/Source/WTF/wtf/Atomics.h +++ b/Source/WTF/wtf/Atomics.h @@ -118,8 +118,11 @@ inline int atomicDecrement(int volatile* addend) { return __atomic_dec(addend) - #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 |
