#include <urcu/compiler.h>
#include <urcu/system.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#ifndef __SIZEOF_LONG__
#ifdef __s390x__
#define __SIZEOF_LONG__ 8
#ifdef COMPILER_HAVE_SHORT_MEM_OPERAND
#define MEMOP_OUT(addr) "=Q" (*(addr))
-#define MEMOP_IN "Q" (*(addr))
+#define MEMOP_IN(addr) "Q" (*(addr))
#define MEMOP_REF(op) #op /* op refer to MEMOP_IN operand */
#else /* !COMPILER_HAVE_SHORT_MEM_OPERAND */
#define MEMOP_OUT(addr) "=m" (*(addr))
-#define MEMOP_IN "a" (addr), "m" (*(addr))
+#define MEMOP_IN(addr) "a" (addr), "m" (*(addr))
#define MEMOP_REF(op) "0(" #op ")" /* op refer to MEMOP_IN operand */
#endif /* !COMPILER_HAVE_SHORT_MEM_OPERAND */
};
#define __hp(x) ((struct __uatomic_dummy *)(x))
-#define uatomic_set(addr, v) STORE_SHARED(*(addr), (v))
-#define uatomic_read(addr) LOAD_SHARED(*(addr))
-
/* xchg */
static inline __attribute__((always_inline))
(unsigned long)(v), \
sizeof(*(addr))))
-/* uatomic_sub_return, uatomic_add, uatomic_sub, uatomic_inc, uatomic_dec */
-
-#define uatomic_sub_return(addr, v) uatomic_add_return((addr), -(v))
-
-#define uatomic_add(addr, v) (void)uatomic_add_return((addr), (v))
-#define uatomic_sub(addr, v) (void)uatomic_sub_return((addr), (v))
-
-#define uatomic_inc(addr) uatomic_add((addr), 1)
-#define uatomic_dec(addr) uatomic_add((addr), -1)
+#ifdef __cplusplus
+}
+#endif
-#define compat_uatomic_cmpxchg(ptr, old, _new) uatomic_cmpxchg(ptr, old, _new)
+#include <urcu/uatomic_generic.h>
#endif /* _URCU_UATOMIC_ARCH_S390_H */