summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/include/msvc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/include/msvc.h')
-rw-r--r--src/third_party/wiredtiger/src/include/msvc.h92
1 files changed, 48 insertions, 44 deletions
diff --git a/src/third_party/wiredtiger/src/include/msvc.h b/src/third_party/wiredtiger/src/include/msvc.h
index bc72ddf8193..f4d8ba52fc1 100644
--- a/src/third_party/wiredtiger/src/include/msvc.h
+++ b/src/third_party/wiredtiger/src/include/msvc.h
@@ -31,52 +31,56 @@
#define WT_GCC_FUNC_ATTRIBUTE(x)
#define WT_GCC_FUNC_DECL_ATTRIBUTE(x)
-#define __WT_ATOMIC_ADD(v, val, n, s, t) \
- (WT_STATIC_ASSERT(sizeof(v) == (n)), \
- _InterlockedExchangeAdd ## s((t*)&(v), (t)(val)) + (val))
-#define __WT_ATOMIC_FETCH_ADD(v, val, n, s, t) \
- (WT_STATIC_ASSERT(sizeof(v) == (n)), \
- _InterlockedExchangeAdd ## s((t*)&(v), (t)(val)))
-#define __WT_ATOMIC_CAS(v, old, new, n, s, t) \
- (WT_STATIC_ASSERT(sizeof(v) == (n)), \
- _InterlockedCompareExchange ## s \
- ((t*)&(v), (t)(new), (t)(old)) == (t)(old))
-#define __WT_ATOMIC_STORE(v, val, n, s, t) \
- (WT_STATIC_ASSERT(sizeof(v) == (n)), \
- _InterlockedExchange ## s((t*)&(v), (t)(val)))
-#define __WT_ATOMIC_SUB(v, val, n, s, t) \
- (WT_STATIC_ASSERT(sizeof(v) == (n)), \
- _InterlockedExchangeAdd ## s((t*)&(v), -(t) val) - (val))
+#define WT_ATOMIC_FUNC(name, ret, type, s, t) \
+static inline ret \
+__wt_atomic_add##name(type *vp, type v) \
+{ \
+ return (_InterlockedExchangeAdd ## s((t *)(vp), (t)(v)) + (v)); \
+} \
+static inline ret \
+__wt_atomic_fetch_add##name(type *vp, type v) \
+{ \
+ return (_InterlockedExchangeAdd ## s((t *)(vp), (t)(v))); \
+} \
+static inline ret \
+__wt_atomic_store##name(type *vp, type v) \
+{ \
+ return (_InterlockedExchange ## s((t *)(vp), (t)(v))); \
+} \
+static inline ret \
+__wt_atomic_sub##name(type *vp, type v) \
+{ \
+ return (_InterlockedExchangeAdd ## s((t *)(vp), - (t)v) - (v)); \
+} \
+static inline int \
+__wt_atomic_cas##name(type *vp, type old, type new) \
+{ \
+ return (_InterlockedCompareExchange ## s \
+ ((t *)(vp), (t)(new), (t)(old)) == (t)(old)); \
+}
-#define WT_ATOMIC_ADD1(v, val) __WT_ATOMIC_ADD(v, val, 1, 8, char)
-#define WT_ATOMIC_FETCH_ADD1(v, val) \
- __WT_ATOMIC_FETCH_ADD(v, val, 1, 8, char)
-#define WT_ATOMIC_CAS1(v, old, new) __WT_ATOMIC_CAS(v, old, new, 1, 8, char)
-#define WT_ATOMIC_STORE1(v, val) __WT_ATOMIC_STORE(v, val, 1, 8, char)
-#define WT_ATOMIC_SUB1(v, val) __WT_ATOMIC_SUB(v, val, 1, 8, char)
+WT_ATOMIC_FUNC(8, uint8_t, uint8_t, 8, char)
+WT_ATOMIC_FUNC(16, uint16_t, uint16_t, 16, short)
+WT_ATOMIC_FUNC(32, uint32_t, uint32_t, , long)
+WT_ATOMIC_FUNC(v32, uint32_t, volatile uint32_t, , long)
+WT_ATOMIC_FUNC(i32, int32_t, int32_t, , long)
+WT_ATOMIC_FUNC(iv32, int32_t, volatile int32_t, , long)
+WT_ATOMIC_FUNC(64, uint64_t, uint64_t, 64, __int64)
+WT_ATOMIC_FUNC(v64, uint64_t, volatile uint64_t, 64, __int64)
+WT_ATOMIC_FUNC(i64, int64_t, int64_t, 64, __int64)
+WT_ATOMIC_FUNC(iv64, int64_t, volatile int64_t, 64, __int64)
+WT_ATOMIC_FUNC(size, size_t, size_t, 64, __int64)
-#define WT_ATOMIC_ADD2(v, val) __WT_ATOMIC_ADD(v, val, 2, 16, short)
-#define WT_ATOMIC_FETCH_ADD2(v, val) \
- __WT_ATOMIC_FETCH_ADD(v, val, 2, 16, short)
-#define WT_ATOMIC_CAS2(v, old, new) \
- __WT_ATOMIC_CAS(v, old, new, 2, 16, short)
-#define WT_ATOMIC_STORE2(v, val) __WT_ATOMIC_STORE(v, val, 2, 16, short)
-#define WT_ATOMIC_SUB2(v, val) __WT_ATOMIC_SUB(v, val, 2, 16, short)
-
-#define WT_ATOMIC_ADD4(v, val) __WT_ATOMIC_ADD(v, val, 4, , long)
-#define WT_ATOMIC_FETCH_ADD4(v, val) __WT_ATOMIC_FETCH_ADD(v, val, 4, , long)
-#define WT_ATOMIC_CAS4(v, old, new) __WT_ATOMIC_CAS(v, old, new, 4, , long)
-#define WT_ATOMIC_STORE4(v, val) __WT_ATOMIC_STORE(v, val, 4, , long)
-#define WT_ATOMIC_SUB4(v, val) __WT_ATOMIC_SUB(v, val, 4, , long)
-
-#define WT_ATOMIC_ADD8(v, val) __WT_ATOMIC_ADD(v, val, 8, 64, __int64)
-#define WT_ATOMIC_FETCH_ADD8(v, val) \
- __WT_ATOMIC_FETCH_ADD(v, val, 8, 64, __int64)
-#define WT_ATOMIC_CAS8(v, old, new) \
- __WT_ATOMIC_CAS(v, old, new, 8, 64, __int64)
-#define WT_ATOMIC_STORE8(v, val) \
- __WT_ATOMIC_STORE(v, val, 8, 64, __int64)
-#define WT_ATOMIC_SUB8(v, val) __WT_ATOMIC_SUB(v, val, 8, 64, __int64)
+/*
+ * __wt_atomic_cas_ptr --
+ * Pointer compare and swap.
+ */
+static inline int
+__wt_atomic_cas_ptr(void *vp, void *old, void *new)
+{
+ return (_InterlockedCompareExchange64(
+ vp, (int64_t)new, (int64_t)old) == ((int64_t)old));
+}
static inline void WT_BARRIER(void) { _ReadWriteBarrier(); }
static inline void WT_FULL_BARRIER(void) { _mm_mfence(); }