Use GCC's implementation of atomicIncrement/Decrement on Mac
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Jan 2013 21:52:08 +0000 (21:52 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 16 Jan 2013 21:52:08 +0000 (21:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=106976

Reviewed by Filip Pizlo.

* wtf/Atomics.h:
GCC and LLVM have builtin for atomic ADD and SUB: __sync_add_and_fetch,
__sync_sub_and_fetch.

Using them let the compiler just generate the atomic operations inline
instead of generating a function call to LibC. It also simplify the
code a bit.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@139921 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/Atomics.h

index 46a85a3..eeca398 100644 (file)
@@ -1,3 +1,18 @@
+2013-01-16  Benjamin Poulain  <benjamin@webkit.org>
+
+        Use GCC's implementation of atomicIncrement/Decrement on Mac
+        https://bugs.webkit.org/show_bug.cgi?id=106976
+
+        Reviewed by Filip Pizlo.
+
+        * wtf/Atomics.h:
+        GCC and LLVM have builtin for atomic ADD and SUB: __sync_add_and_fetch,
+        __sync_sub_and_fetch.
+
+        Using them let the compiler just generate the atomic operations inline
+        instead of generating a function call to LibC. It also simplify the
+        code a bit.
+
 2013-01-15  Adam Barth  <abarth@webkit.org>
 
         Generalize DocumentWeakReference into WTF::WeakPtr
index 86ed805..d6cd88d 100644 (file)
 
 #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 {
@@ -92,15 +84,6 @@ inline int atomicIncrement(int volatile* addend) { return InterlockedIncrement(r
 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)); }
-
 #elif OS(QNX)
 #define WTF_USE_LOCKFREE_THREADSAFEREFCOUNTED 1