From 66430307b5ebfafebbed670f778502d7c396a771 Mon Sep 17 00:00:00 2001 From: "hpayer@chromium.org" Date: Wed, 5 Nov 2014 12:35:19 +0000 Subject: [PATCH] Use compiler barrier instead of memory barrier for release/acquire atomic operations on mac. BUG= R=jarin@chromium.org Review URL: https://codereview.chromium.org/694703003 Cr-Commit-Position: refs/heads/master@{#25147} git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@25147 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/base/atomicops_internals_mac.h | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/base/atomicops_internals_mac.h b/src/base/atomicops_internals_mac.h index a046872..84f9dbc 100644 --- a/src/base/atomicops_internals_mac.h +++ b/src/base/atomicops_internals_mac.h @@ -12,6 +12,20 @@ namespace v8 { namespace base { +#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory") + +inline void MemoryBarrier() { OSMemoryBarrier(); } + +inline void AcquireMemoryBarrier() { +// On x86 processors, loads already have acquire semantics, so +// there is no need to put a full barrier here. +#if V8_HOST_ARCH_IA32 || V8_HOST_ARCH_X64 + ATOMICOPS_COMPILER_BARRIER(); +#else + MemoryBarrier(); +#endif +} + inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr, Atomic32 old_value, Atomic32 new_value) { @@ -46,10 +60,6 @@ inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, return OSAtomicAdd32Barrier(increment, const_cast(ptr)); } -inline void MemoryBarrier() { - OSMemoryBarrier(); -} - inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, Atomic32 old_value, Atomic32 new_value) { @@ -98,7 +108,7 @@ inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) { inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) { Atomic32 value = *ptr; - MemoryBarrier(); + AcquireMemoryBarrier(); return value; } @@ -188,7 +198,7 @@ inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) { inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) { Atomic64 value = *ptr; - MemoryBarrier(); + AcquireMemoryBarrier(); return value; } @@ -199,6 +209,7 @@ inline Atomic64 Release_Load(volatile const Atomic64* ptr) { #endif // defined(__LP64__) +#undef ATOMICOPS_COMPILER_BARRIER } } // namespace v8::base #endif // V8_BASE_ATOMICOPS_INTERNALS_MAC_H_ -- 2.7.4