< prev index next >
src/os_cpu/linux_ppc/vm/atomic_linux_ppc.hpp
Print this page
*** 287,306 ****
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) {
__asm__ __volatile__ (
/* fence */
strasm_sync
);
}
}
inline void cmpxchg_post_membar(cmpxchg_memory_order order) {
! if (order != memory_order_relaxed) {
__asm__ __volatile__ (
/* fence */
strasm_sync
);
}
--- 287,313 ----
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_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_release) {
! // no post membar
! } else if (order == memory_order_conservative) {
__asm__ __volatile__ (
/* fence */
strasm_sync
);
}
< prev index next >