< prev index next >
src/os_cpu/linux_ppc/vm/atomic_linux_ppc.hpp
Print this page
@@ -287,20 +287,27 @@
inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) {
return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest);
}
inline void cmpxchg_pre_membar(cmpxchg_memory_order order) {
- if (order != memory_order_relaxed) {
+ if (order == memory_order_release) {
+ __asm__ __volatile__ (
+ /* release */
+ strasm_lwsync
+ );
+ } else if (order != memory_order_relaxed) {
__asm__ __volatile__ (
/* fence */
strasm_sync
);
}
}
inline void cmpxchg_post_membar(cmpxchg_memory_order order) {
- if (order != memory_order_relaxed) {
+ if (order == memory_order_release) {
+ // no post membar
+ } else if (order == memory_order_conservative) {
__asm__ __volatile__ (
/* fence */
strasm_sync
);
}
< prev index next >