| 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)
|
|
|
|
|