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.