Add extern "C" to support linking userspace RCU library with C++ applications
[urcu.git] / urcu / uatomic_arch_sparc64.h
index 87deacd1a064366bceb799cf8620485c06ba6206..3aa3b7d9afb889b7f7cd8df80445148dc2dc523b 100644 (file)
 #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
@@ -90,9 +94,9 @@ unsigned long _uatomic_exchange(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, val, 4);
@@ -103,9 +107,9 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len)
 #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);
@@ -126,15 +130,14 @@ unsigned long _uatomic_exchange(void *addr, unsigned long val, int len)
 /* 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);
@@ -145,9 +148,9 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val,
 #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);
@@ -176,7 +179,10 @@ unsigned long _uatomic_add_return(void *addr, unsigned long val,
 #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 */
This page took 0.023504 seconds and 4 git commands to generate.