Reviewers: jarin,

Description:
Use compiler barrier instead of memory barrier for release/acquire atomic
operations on mac.

BUG=

Please review this at https://codereview.chromium.org/694703003/

Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+11, -12 lines):
  M src/base/atomicops_internals_mac.h


Index: src/base/atomicops_internals_mac.h
diff --git a/src/base/atomicops_internals_mac.h b/src/base/atomicops_internals_mac.h index a046872e4d0fbff487fbf89770b4fe92d2d2d031..ac6c043d04e84a684cc7a1bbdc983ff8cad3dbf6 100644
--- a/src/base/atomicops_internals_mac.h
+++ b/src/base/atomicops_internals_mac.h
@@ -12,6 +12,8 @@
 namespace v8 {
 namespace base {

+#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory")
+
 inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
                                          Atomic32 old_value,
                                          Atomic32 new_value) {
@@ -46,10 +48,6 @@ inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,
   return OSAtomicAdd32Barrier(increment, const_cast<Atomic32*>(ptr));
 }

-inline void MemoryBarrier() {
-  OSMemoryBarrier();
-}
-
 inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
                                        Atomic32 old_value,
                                        Atomic32 new_value) {
@@ -80,11 +78,11 @@ inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) {

 inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) {
   *ptr = value;
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
 }

 inline void Release_Store(volatile Atomic32* ptr, Atomic32 value) {
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
   *ptr = value;
 }

@@ -98,12 +96,12 @@ inline Atomic32 NoBarrier_Load(volatile const Atomic32* ptr) {

 inline Atomic32 Acquire_Load(volatile const Atomic32* ptr) {
   Atomic32 value = *ptr;
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
   return value;
 }

 inline Atomic32 Release_Load(volatile const Atomic32* ptr) {
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
   return *ptr;
 }

@@ -174,11 +172,11 @@ inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) {

 inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) {
   *ptr = value;
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
 }

 inline void Release_Store(volatile Atomic64* ptr, Atomic64 value) {
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
   *ptr = value;
 }

@@ -188,17 +186,18 @@ inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) {

 inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) {
   Atomic64 value = *ptr;
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
   return value;
 }

 inline Atomic64 Release_Load(volatile const Atomic64* ptr) {
-  MemoryBarrier();
+  ATOMICOPS_COMPILER_BARRIER();
   return *ptr;
 }

 #endif  // defined(__LP64__)

+#undef ATOMICOPS_COMPILER_BARRIER
 } }  // namespace v8::base

 #endif  // V8_BASE_ATOMICOPS_INTERNALS_MAC_H_


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to