summaryrefslogtreecommitdiff
path: root/ace/Atomic_Op.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Atomic_Op.cpp')
-rw-r--r--ace/Atomic_Op.cpp252
1 files changed, 0 insertions, 252 deletions
diff --git a/ace/Atomic_Op.cpp b/ace/Atomic_Op.cpp
deleted file mode 100644
index 8737981a794..00000000000
--- a/ace/Atomic_Op.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
-// $Id$
-
-#include "ace/Atomic_Op.h"
-#include "ace/OS_NS_unistd.h"
-
-ACE_RCSID (ace,
- Atomic_Op,
- "$Id$")
-
-#if !defined (__ACE_INLINE__)
-#include "ace/Atomic_Op.inl"
-#endif /* __ACE_INLINE__ */
-
-#if defined (ACE_HAS_BUILTIN_ATOMIC_OP)
-
-namespace {
-
-#if defined (_MSC_VER)
-// Disable "no return value" warning, as we will be putting
-// the return values directly into the EAX register.
-#pragma warning (push)
-#pragma warning (disable: 4035)
-#endif /* _MSC_VER */
-
-long
-single_cpu_increment (volatile long *value)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- long tmp = 1;
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- asm( "xadd %0, (%1)" : "+r"(tmp) : "r"(addr) );
- return tmp + 1;
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-long
-single_cpu_decrement (volatile long *value)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- long tmp = -1;
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- asm( "xadd %0, (%1)" : "+r"(tmp) : "r"(addr) );
- return tmp - 1;
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-long
-single_cpu_exchange (volatile long *value, long rhs)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- asm( "xchg %0, (%1)" : "+r"(rhs) : "r"(addr) );
- return rhs;
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_UNUSED_ARG (rhs);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-long
-single_cpu_exchange_add (volatile long *value, long rhs)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- asm( "xadd %0, (%1)" : "+r"(rhs) : "r"(addr) );
- return rhs;
-#elif defined (WIN32) && !defined (ACE_HAS_INTERLOCKED_EXCHANGEADD)
-# if defined (_MSC_VER)
- __asm
- {
- mov eax, rhs
- mov edx, value
- xadd [edx], eax
- }
- // Return value is already in EAX register.
-# elif defined (__BORLANDC__)
- _EAX = rhs;
- _EDX = reinterpret_cast<unsigned long> (value);
- __emit__(0x0F, 0xC1, 0x02); // xadd [edx], eax
- // Return value is already in EAX register.
-# else /* _MSC_VER */
- ACE_UNUSED_ARG (value);
- ACE_UNUSED_ARG (rhs);
- ACE_NOTSUP_RETURN (-1);
-# endif /* _MSC_VER */
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_UNUSED_ARG (rhs);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-long
-multi_cpu_increment (volatile long *value)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- long tmp = 1;
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- asm( "lock ; xadd %0, (%1)" : "+r"(tmp) : "r"(addr) );
- return tmp + 1;
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-long
-multi_cpu_decrement (volatile long *value)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- long tmp = -1;
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- asm( "lock ; xadd %0, (%1)" : "+r"(tmp) : "r"(addr) );
- return tmp - 1;
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-long
-multi_cpu_exchange (volatile long *value, long rhs)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- // The XCHG instruction automatically follows LOCK semantics
- asm( "xchg %0, (%1)" : "+r"(rhs) : "r"(addr) );
- return rhs;
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_UNUSED_ARG (rhs);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-long
-multi_cpu_exchange_add (volatile long *value, long rhs)
-{
-#if defined (__GNUC__) && (defined (ACE_HAS_PENTIUM) || defined (__amd64__))
- unsigned long addr = reinterpret_cast<unsigned long> (value);
- asm( "lock ; xadd %0, (%1)" : "+r"(rhs) : "r"(addr) );
- return rhs;
-#elif defined (WIN32) && !defined (ACE_HAS_INTERLOCKED_EXCHANGEADD)
-# if defined (_MSC_VER)
- __asm
- {
- mov eax, rhs
- mov edx, value
- lock xadd [edx], eax
- }
- // Return value is already in EAX register.
-# elif defined (__BORLANDC__)
- _EAX = rhs;
- _EDX = reinterpret_cast<unsigned long> (value);
- __emit__(0xF0, 0x0F, 0xC1, 0x02); // lock xadd [edx], eax
- // Return value is already in EAX register.
-# else /* _MSC_VER */
- ACE_UNUSED_ARG (value);
- ACE_UNUSED_ARG (rhs);
- ACE_NOTSUP_RETURN (-1);
-# endif /* _MSC_VER */
-#else /* __GNUC__ && ACE_HAS_PENTIUM */
- ACE_UNUSED_ARG (value);
- ACE_UNUSED_ARG (rhs);
- ACE_NOTSUP_RETURN (-1);
-#endif /* __GNUC__ && ACE_HAS_PENTIUM */
-}
-
-#if defined (_MSC_VER)
-#pragma warning (pop)
-#endif /* _MSC_VER */
-
-} // end namespace
-
-ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, long>::increment_fn_) (volatile long *) = 0;
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, long>::decrement_fn_) (volatile long *) = 0;
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, long>::exchange_fn_) (volatile long *, long) = 0;
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, long>::exchange_add_fn_) (volatile long *, long) = 0;
-
-void
-ACE_Atomic_Op<ACE_Thread_Mutex, long>::init_functions (void)
-{
- if (ACE_OS::num_processors () == 1)
- {
- increment_fn_ = single_cpu_increment;
- decrement_fn_ = single_cpu_decrement;
- exchange_fn_ = single_cpu_exchange;
- exchange_add_fn_ = single_cpu_exchange_add;
- }
- else
- {
- increment_fn_ = multi_cpu_increment;
- decrement_fn_ = multi_cpu_decrement;
- exchange_fn_ = multi_cpu_exchange;
- exchange_add_fn_ = multi_cpu_exchange_add;
- }
-}
-
-void
-ACE_Atomic_Op<ACE_Thread_Mutex, long>::dump (void) const
-{
-#if defined (ACE_HAS_DUMP)
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-#endif /* ACE_HAS_DUMP */
-}
-
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, unsigned long>::increment_fn_) (volatile long *) = 0;
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, unsigned long>::decrement_fn_) (volatile long *) = 0;
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, unsigned long>::exchange_fn_) (volatile long *, long) = 0;
-long (*ACE_Atomic_Op<ACE_Thread_Mutex, unsigned long>::exchange_add_fn_) (volatile long *, long) = 0;
-
-void
-ACE_Atomic_Op<ACE_Thread_Mutex, unsigned long>::init_functions (void)
-{
- if (ACE_OS::num_processors () == 1)
- {
- increment_fn_ = single_cpu_increment;
- decrement_fn_ = single_cpu_decrement;
- exchange_fn_ = single_cpu_exchange;
- exchange_add_fn_ = single_cpu_exchange_add;
- }
- else
- {
- increment_fn_ = multi_cpu_increment;
- decrement_fn_ = multi_cpu_decrement;
- exchange_fn_ = multi_cpu_exchange;
- exchange_add_fn_ = multi_cpu_exchange_add;
- }
-}
-
-void
-ACE_Atomic_Op<ACE_Thread_Mutex, unsigned long>::dump (void) const
-{
-#if defined (ACE_HAS_DUMP)
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-#endif /* ACE_HAS_DUMP */
-}
-
-ACE_END_VERSIONED_NAMESPACE_DECL
-
-#endif /* ACE_HAS_BUILTIN_ATOMIC_OP */