Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: src/ports/SkBarriers_tsan.h

Issue 320063003: use __atomics in SkBarriers_tsan.h (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ports/SkBarriers_tsan.h
diff --git a/src/ports/SkBarriers_tsan.h b/src/ports/SkBarriers_tsan.h
index ae68b3daf9d1865ca1414c17a0a4c2bc9c2d5727..6f273907abae1857699b0ef2e4bbe4edbff9c512 100644
--- a/src/ports/SkBarriers_tsan.h
+++ b/src/ports/SkBarriers_tsan.h
@@ -8,41 +8,18 @@
#ifndef SkBarriers_tsan_DEFINED
#define SkBarriers_tsan_DEFINED
-#include <sanitizer/tsan_interface_atomic.h>
-
static inline void sk_compiler_barrier() { asm volatile("" : : : "memory"); }
-// We'd do this as separate functions, but you can't partially specialize functions...
-template <typename T, size_t bits>
-struct SkBarriers {
- static T AcquireLoad(T*);
- static void ReleaseStore(T*, T);
-};
-
-#define SK_BARRIERS(BITS) \
- template <typename T> \
- struct SkBarriers<T, BITS> { \
- static T AcquireLoad(T* ptr) { \
- return (T)__tsan_atomic ## BITS ## _load((__tsan_atomic ## BITS*)ptr, \
- __tsan_memory_order_acquire); \
- } \
- static void ReleaseStore(T* ptr, T val) { \
- __tsan_atomic ## BITS ## _store((__tsan_atomic ## BITS*)ptr, \
- val, \
- __tsan_memory_order_release); \
- } \
- }
-SK_BARRIERS(8);
-SK_BARRIERS(16);
-SK_BARRIERS(32);
-SK_BARRIERS(64);
-#undef SK_BARRIERS
-
template <typename T>
-T sk_acquire_load(T* ptr) { return SkBarriers<T, 8*sizeof(T)>::AcquireLoad(ptr); }
+T sk_acquire_load(T* ptr) {
+ SkASSERT(__atomic_always_lock_free(sizeof(T), ptr));
+ return __atomic_load_n(ptr, __ATOMIC_ACQUIRE);
+}
template <typename T>
-void sk_release_store(T* ptr, T val) { SkBarriers<T, 8*sizeof(T)>::ReleaseStore(ptr, val); }
-
+void sk_release_store(T* ptr, T val) {
+ SkASSERT(__atomic_always_lock_free(sizeof(T), ptr));
+ return __atomic_store_n(ptr, val, __ATOMIC_RELEASE);
+}
#endif//SkBarriers_tsan_DEFINED
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698