Chris@101: /* Chris@101: * Distributed under the Boost Software License, Version 1.0. Chris@101: * (See accompanying file LICENSE_1_0.txt or copy at Chris@101: * http://www.boost.org/LICENSE_1_0.txt) Chris@101: * Chris@101: * Copyright (c) 2009 Helge Bahmann Chris@101: * Copyright (c) 2014 Andrey Semashev Chris@101: */ Chris@101: /*! Chris@101: * \file atomic/detail/platform.hpp Chris@101: * Chris@101: * This header defines macros for the target platform detection Chris@101: */ Chris@16: Chris@101: #ifndef BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_ Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_ Chris@16: Chris@16: #include Chris@16: Chris@16: #ifdef BOOST_HAS_PRAGMA_ONCE Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@101: #if !defined(BOOST_ATOMIC_FORCE_FALLBACK) Chris@16: Chris@101: // Compiler-based backends Chris@101: #if ((defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407)) ||\ Chris@101: (defined(BOOST_CLANG) && ((__clang_major__ * 100 + __clang_minor__) >= 302))) &&\ Chris@101: (\ Chris@101: (__GCC_ATOMIC_BOOL_LOCK_FREE + 0) == 2 ||\ Chris@101: (__GCC_ATOMIC_CHAR_LOCK_FREE + 0) == 2 ||\ Chris@101: (__GCC_ATOMIC_SHORT_LOCK_FREE + 0) == 2 ||\ Chris@101: (__GCC_ATOMIC_INT_LOCK_FREE + 0) == 2 ||\ Chris@101: (__GCC_ATOMIC_LONG_LOCK_FREE + 0) == 2 ||\ Chris@101: (__GCC_ATOMIC_LLONG_LOCK_FREE + 0) == 2\ Chris@101: ) Chris@101: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_atomic Chris@16: Chris@16: #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) Chris@16: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_x86 Chris@16: Chris@16: #elif defined(__GNUC__) && (defined(__POWERPC__) || defined(__PPC__)) Chris@16: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_ppc Chris@16: Chris@16: // This list of ARM architecture versions comes from Apple's arm/arch.h header. Chris@16: // I don't know how complete it is. Chris@101: #elif defined(__GNUC__) &&\ Chris@101: (\ Chris@101: defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) ||\ Chris@101: defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) ||\ Chris@101: defined(__ARM_ARCH_6ZK__) ||\ Chris@101: defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) ||\ Chris@101: defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) ||\ Chris@101: defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)\ Chris@101: ) Chris@16: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_arm Chris@16: Chris@16: #elif defined(__GNUC__) && defined(__sparc_v9__) Chris@16: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_sparc Chris@101: Chris@101: #elif defined(__GNUC__) && defined(__alpha__) Chris@101: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_alpha Chris@101: Chris@101: #elif defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 401) &&\ Chris@101: (\ Chris@101: defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) ||\ Chris@101: defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) ||\ Chris@101: defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) ||\ Chris@101: defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) ||\ Chris@101: defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)\ Chris@101: ) Chris@101: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_sync Chris@101: Chris@101: #elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) Chris@101: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM msvc_x86 Chris@101: Chris@101: #elif defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_M_ARM) Chris@101: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM msvc_arm Chris@101: Chris@101: #endif Chris@101: Chris@101: // OS-based backends Chris@101: #if !defined(BOOST_ATOMIC_DETAIL_PLATFORM) Chris@101: Chris@101: #if defined(__linux__) && defined(__arm__) Chris@101: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM linux_arm Chris@16: Chris@16: #elif defined(BOOST_WINDOWS) || defined(_WIN32_CE) Chris@16: Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM windows Chris@16: Chris@16: #endif Chris@16: Chris@101: #endif // !defined(BOOST_ATOMIC_DETAIL_PLATFORM) Chris@101: Chris@101: #endif // !defined(BOOST_ATOMIC_FORCE_FALLBACK) Chris@101: Chris@101: #if !defined(BOOST_ATOMIC_DETAIL_PLATFORM) Chris@101: #define BOOST_ATOMIC_DETAIL_PLATFORM emulated Chris@101: #define BOOST_ATOMIC_EMULATED Chris@16: #endif Chris@101: Chris@101: #define BOOST_ATOMIC_DETAIL_HEADER(prefix) Chris@101: Chris@101: #endif // BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_