summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCsaba Osztrogonác <ossy@webkit.org>2013-07-01 16:13:43 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-07-01 18:17:47 +0200
commit0baf197abc26a0833ac331b4beb362d5148e485b (patch)
tree0f531db02caf583f6a370bf38eab0ff4907f0f0e
parent86a59036393fb081f094325518205e6c6067b05e (diff)
downloadqtwebkit-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.h7
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