summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/include/gcc.h
diff options
context:
space:
mode:
authorAlexander Gorrod <alexander.gorrod@mongodb.com>2015-05-29 03:39:07 +0000
committerAlexander Gorrod <alexander.gorrod@mongodb.com>2015-05-29 03:39:07 +0000
commit57e5a2ee48e68d3fedab2d2942ae1b00ad651205 (patch)
treef2cbd2e58112814dccfd6c6fdd4fafc7c6e35147 /src/third_party/wiredtiger/src/include/gcc.h
parent6b41043ce9f0866de48732ddbbe49d66d4027d85 (diff)
downloadmongo-57e5a2ee48e68d3fedab2d2942ae1b00ad651205.tar.gz
Import wiredtiger-wiredtiger-2.6.0-182-gbdaaaec.tar.gz from wiredtiger branch mongodb-3.2
Diffstat (limited to 'src/third_party/wiredtiger/src/include/gcc.h')
-rw-r--r--src/third_party/wiredtiger/src/include/gcc.h20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/third_party/wiredtiger/src/include/gcc.h b/src/third_party/wiredtiger/src/include/gcc.h
index 2efbb20b39a..cb9d3d5e212 100644
--- a/src/third_party/wiredtiger/src/include/gcc.h
+++ b/src/third_party/wiredtiger/src/include/gcc.h
@@ -87,21 +87,25 @@
* To avoid locking shared data structures such as statistics and to permit
* atomic state changes, we rely on the WT_ATOMIC_ADD and WT_ATOMIC_CAS
* (compare and swap) operations.
- *
- * Note that we avoid __sync_bool_compare_and_swap due to problems with
- * optimization with some versions of clang. See
- * http://llvm.org/bugs/show_bug.cgi?id=21499 for details.
*/
#define __WT_ATOMIC_ADD(v, val, n) \
(WT_STATIC_ASSERT(sizeof(v) == (n)), __sync_add_and_fetch(&(v), val))
#define __WT_ATOMIC_FETCH_ADD(v, val, n) \
(WT_STATIC_ASSERT(sizeof(v) == (n)), __sync_fetch_and_add(&(v), val))
+#ifdef __clang__
+/*
+ * We avoid __sync_bool_compare_and_swap with due to problems with
+ * optimization with some versions of clang. See
+ * http://llvm.org/bugs/show_bug.cgi?id=21499 for details.
+ */
#define __WT_ATOMIC_CAS(v, old, new, n) \
(WT_STATIC_ASSERT(sizeof(v) == (n)), \
__sync_val_compare_and_swap(&(v), old, new) == (old))
-#define __WT_ATOMIC_CAS_VAL(v, old, new, n) \
+#else
+#define __WT_ATOMIC_CAS(v, old, new, n) \
(WT_STATIC_ASSERT(sizeof(v) == (n)), \
- __sync_val_compare_and_swap(&(v), old, new))
+ __sync_bool_compare_and_swap(&(v), old, new))
+#endif
#define __WT_ATOMIC_STORE(v, val, n) \
(WT_STATIC_ASSERT(sizeof(v) == (n)), \
__sync_lock_test_and_set(&(v), val))
@@ -111,28 +115,24 @@
#define WT_ATOMIC_ADD1(v, val) __WT_ATOMIC_ADD(v, val, 1)
#define WT_ATOMIC_FETCH_ADD1(v, val) __WT_ATOMIC_FETCH_ADD(v, val, 1)
#define WT_ATOMIC_CAS1(v, old, new) __WT_ATOMIC_CAS(v, old, new, 1)
-#define WT_ATOMIC_CAS_VAL1(v, old, new) __WT_ATOMIC_CAS_VAL(v, old, new, 1)
#define WT_ATOMIC_STORE1(v, val) __WT_ATOMIC_STORE(v, val, 1)
#define WT_ATOMIC_SUB1(v, val) __WT_ATOMIC_SUB(v, val, 1)
#define WT_ATOMIC_ADD2(v, val) __WT_ATOMIC_ADD(v, val, 2)
#define WT_ATOMIC_FETCH_ADD2(v, val) __WT_ATOMIC_FETCH_ADD(v, val, 2)
#define WT_ATOMIC_CAS2(v, old, new) __WT_ATOMIC_CAS(v, old, new, 2)
-#define WT_ATOMIC_CAS_VAL2(v, old, new) __WT_ATOMIC_CAS_VAL(v, old, new, 2)
#define WT_ATOMIC_STORE2(v, val) __WT_ATOMIC_STORE(v, val, 2)
#define WT_ATOMIC_SUB2(v, val) __WT_ATOMIC_SUB(v, val, 2)
#define WT_ATOMIC_ADD4(v, val) __WT_ATOMIC_ADD(v, val, 4)
#define WT_ATOMIC_FETCH_ADD4(v, val) __WT_ATOMIC_FETCH_ADD(v, val, 4)
#define WT_ATOMIC_CAS4(v, old, new) __WT_ATOMIC_CAS(v, old, new, 4)
-#define WT_ATOMIC_CAS_VAL4(v, old, new) __WT_ATOMIC_CAS_VAL(v, old, new, 4)
#define WT_ATOMIC_STORE4(v, val) __WT_ATOMIC_STORE(v, val, 4)
#define WT_ATOMIC_SUB4(v, val) __WT_ATOMIC_SUB(v, val, 4)
#define WT_ATOMIC_ADD8(v, val) __WT_ATOMIC_ADD(v, val, 8)
#define WT_ATOMIC_FETCH_ADD8(v, val) __WT_ATOMIC_FETCH_ADD(v, val, 8)
#define WT_ATOMIC_CAS8(v, old, new) __WT_ATOMIC_CAS(v, old, new, 8)
-#define WT_ATOMIC_CAS_VAL8(v, old, new) __WT_ATOMIC_CAS_VAL(v, old, new, 8)
#define WT_ATOMIC_STORE8(v, val) __WT_ATOMIC_STORE(v, val, 8)
#define WT_ATOMIC_SUB8(v, val) __WT_ATOMIC_SUB(v, val, 8)