Index: Source/wtf/Atomics.h |
diff --git a/Source/wtf/Atomics.h b/Source/wtf/Atomics.h |
index 55b99a82f8f529ad7eea07a02ad18452906640f0..3c8da97835489527a4a603fae99584d2aaf2eb13 100644 |
--- a/Source/wtf/Atomics.h |
+++ b/Source/wtf/Atomics.h |
@@ -143,6 +143,14 @@ ALWAYS_INLINE void releaseStore(volatile unsigned* ptr, unsigned value) |
{ |
__tsan_atomic32_store(reinterpret_cast<volatile int*>(ptr), static_cast<int>(value), __tsan_memory_order_release); |
} |
+ALWAYS_INLINE void releaseStore(void* volatile* ptr, void* value) |
+{ |
+#if CPU(64BIT) |
+ __tsan_atomic64_store(reinterpret_cast<volatile long*>(ptr), reinterpret_cast<long>(value), __tsan_memory_order_release); |
+#else |
+ __tsan_atomic32_store(reinterpret_cast<volatile long*>(ptr), reinterpret_cast<long>(value), __tsan_memory_order_release); |
+#endif |
+} |
ALWAYS_INLINE int acquireLoad(volatile const int* ptr) |
{ |
@@ -160,6 +168,14 @@ ALWAYS_INLINE unsigned long acquireLoad(volatile const unsigned long* ptr) |
return static_cast<unsigned long>(__tsan_atomic32_load(reinterpret_cast<volatile const long*>(ptr), __tsan_memory_order_acquire)); |
#endif |
} |
+ALWAYS_INLINE void* acquireLoad(void* volatile const* ptr) |
+{ |
+#if CPU(64BIT) |
+ return reinterpret_cast<void*>(__tsan_atomic64_load(reinterpret_cast<volatile const long*>(ptr), __tsan_memory_order_acquire)); |
+#else |
+ return reinterpret_cast<void*>(__tsan_atomic32_load(reinterpret_cast<volatile const long*>(ptr), __tsan_memory_order_acquire)); |
+#endif |
+} |
#else |
@@ -199,6 +215,11 @@ ALWAYS_INLINE void releaseStore(volatile unsigned* ptr, unsigned value) |
MEMORY_BARRIER(); |
*ptr = value; |
} |
+ALWAYS_INLINE void releaseStore(void* volatile* ptr, void* value) |
+{ |
+ MEMORY_BARRIER(); |
+ *ptr = value; |
+} |
ALWAYS_INLINE int acquireLoad(volatile const int* ptr) |
{ |
@@ -224,6 +245,12 @@ ALWAYS_INLINE unsigned long long acquireLoad(volatile const unsigned long long* |
MEMORY_BARRIER(); |
return value; |
} |
+ALWAYS_INLINE void* acquireLoad(void* volatile const* ptr) |
+{ |
+ void* value = *ptr; |
+ MEMORY_BARRIER(); |
+ return value; |
+} |
#if defined(ADDRESS_SANITIZER) |