summaryrefslogtreecommitdiff
path: root/cpp/include/IceUtil/Shared.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include/IceUtil/Shared.h')
-rw-r--r--cpp/include/IceUtil/Shared.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/cpp/include/IceUtil/Shared.h b/cpp/include/IceUtil/Shared.h
index 7666f999dbd..a6a7aff8895 100644
--- a/cpp/include/IceUtil/Shared.h
+++ b/cpp/include/IceUtil/Shared.h
@@ -17,7 +17,26 @@
#include <IceUtil/Config.h>
-#if (defined(__linux) || defined(__FreeBSD__)) && defined(__i386) && !defined(__ICC)
+//
+// Here are the sparc64+linux atomic functions, if you wish them.
+//
+#if defined(__linux) && defined(__sparc__) && defined(USE_SPARC_ASM) && !defined(ICE_USE_MUTEX_SHARED)
+# define ICE_HAS_ATOMIC_FUNCTIONS
+extern "C"
+{
+#include <asm-sparc64/atomic.h>
+int __atomic_exchange_and_add(atomic_t *v, int i);
+}
+#define ice_atomic_t atomic_t
+#define ice_atomic_set(v,i) atomic_set(v,i)
+#define ice_atomic_inc(v) atomic_inc(v)
+#define ice_atomic_dec_and_test(v) atomic_dec_and_test(v)
+#define ice_atomic_exchange_add(i,v) (__atomic_exchange_and_add(v,i))
+
+#elif defined(ICE_USE_MUTEX_SHARED)
+# include <IceUtil/Mutex.h>
+
+#elif (defined(__linux) || defined(__FreeBSD__)) && defined(__i386) && !defined(__ICC)
# define ICE_HAS_ATOMIC_FUNCTIONS
// __ICC: The inline assembler causes problems with shared libraries.