#include <urcu/compiler.h>
#include <urcu/system.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef __SIZEOF_LONG__
-#if (defined(__sparc_v8__) || defined(__sparc_v9__))
+#ifdef __LP64__
#define __SIZEOF_LONG__ 8
#else
#define __SIZEOF_LONG__ 4
switch (len) {
case 4:
{
- unsigned int old;
+ unsigned int old, oldt;
- oldt = uatomic_read(addr);
+ oldt = uatomic_read((unsigned int *)addr);
do {
old = oldt;
oldt = _uatomic_cmpxchg(addr, old, val, 4);
#if (BITS_PER_LONG == 64)
case 8:
{
- unsigned long old;
+ unsigned long old, oldt;
- oldt = uatomic_read(addr);
+ oldt = uatomic_read((unsigned long *)addr);
do {
old = oldt;
oldt = _uatomic_cmpxchg(addr, old, val, 8);
/* uatomic_add_return */
static inline __attribute__((always_inline))
-unsigned long _uatomic_add_return(void *addr, unsigned long val,
- int len)
+unsigned long _uatomic_add_return(void *addr, unsigned long val, int len)
{
switch (len) {
case 4:
{
- unsigned int old;
+ unsigned int old, oldt;
- oldt = uatomic_read(addr);
+ oldt = uatomic_read((unsigned int *)addr);
do {
old = oldt;
oldt = _uatomic_cmpxchg(addr, old, old + val, 4);
#if (BITS_PER_LONG == 64)
case 8:
{
- unsigned long old;
+ unsigned long old, oldt;
- oldt = uatomic_read(addr);
+ oldt = uatomic_read((unsigned long *)addr);
do {
old = oldt;
oldt = _uatomic_cmpxchg(addr, old, old + val, 8);
#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)
+#ifdef __cplusplus
+}
+#endif
+
#endif /* _URCU_ARCH_UATOMIC_PPC_H */