summaryrefslogtreecommitdiff
path: root/include/atomic/nolock.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/atomic/nolock.h')
-rw-r--r--include/atomic/nolock.h32
1 files changed, 23 insertions, 9 deletions
diff --git a/include/atomic/nolock.h b/include/atomic/nolock.h
index e4cd9ab9896..9ec5eb5a2fd 100644
--- a/include/atomic/nolock.h
+++ b/include/atomic/nolock.h
@@ -17,23 +17,37 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#if defined(__i386__) || defined(_MSC_VER) || defined(__x86_64__) \
- || defined(HAVE_GCC_ATOMIC_BUILTINS)
+ || defined(HAVE_GCC_ATOMIC_BUILTINS) \
+ || defined(HAVE_SOLARIS_ATOMIC)
# ifdef MY_ATOMIC_MODE_DUMMY
# define LOCK_prefix ""
# else
# define LOCK_prefix "lock"
# endif
-
-# ifdef HAVE_GCC_ATOMIC_BUILTINS
-# include "gcc_builtins.h"
-# elif __GNUC__
-# include "x86-gcc.h"
-# elif defined(_MSC_VER)
+/*
+ We choose implementation as follows:
+ ------------------------------------
+ On Windows using Visual C++ the native implementation should be
+ preferrable. When using gcc we prefer the native x86 implementation,
+ we prefer the Solaris implementation before the gcc because of
+ stability preference, we choose gcc implementation if nothing else
+ works on gcc. If neither Visual C++ or gcc we still choose the
+ Solaris implementation on Solaris (mainly for SunStudio compiles.
+*/
+# if defined(_MSV_VER)
# include "generic-msvc.h"
+# elif __GNUC__
+# if defined(__i386__) || defined(__x86_64__)
+# include "x86-gcc.h"
+# elif defined(HAVE_SOLARIS_ATOMIC)
+# include "solaris.h"
+# elif defined(HAVE_GCC_ATOMIC_BUILTINS)
+# include "gcc_builtins.h"
+# endif
+# elif defined(HAVE_SOLARIS_ATOMIC)
+# include "solaris.h"
# endif
-#elif defined(HAVE_SOLARIS_ATOMIC)
-#include "solaris.h"
#endif
#if defined(make_atomic_cas_body) || defined(MY_ATOMICS_MADE)