--- old/src/os_cpu/linux_ppc/vm/atomic_linux_ppc.hpp 2016-10-10 22:31:59.000000000 +0900 +++ new/src/os_cpu/linux_ppc/vm/atomic_linux_ppc.hpp 2016-10-10 22:31:59.000000000 +0900 @@ -289,7 +289,12 @@ } 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 @@ -298,7 +303,9 @@ } 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