*/
#include <urcu/compiler.h>
+#include <urcu/system.h>
#ifndef __SIZEOF_LONG__
#ifdef __powerpc64__
#define ILLEGAL_INSTR ".long 0xd00d00"
-#define uatomic_set(addr, v) \
-do { \
- ACCESS_ONCE(*(addr)) = (v); \
-} while (0)
-
-#define uatomic_read(addr) ACCESS_ONCE(*(addr))
+#define uatomic_set(addr, v) STORE_SHARED(*(addr), (v))
+#define uatomic_read(addr) LOAD_SHARED(*(addr))
/*
* Using a isync as second barrier for exchange to provide acquire semantic.
#define uatomic_inc(addr) uatomic_add((addr), 1)
#define uatomic_dec(addr) uatomic_add((addr), -1)
+#define URCU_CAS_AVAIL() 1
+#define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
+
#endif /* _URCU_ARCH_UATOMIC_PPC_H */