diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2020-12-16 20:29:05 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2021-02-24 16:40:04 +0300 |
commit | 8e761289a2446367267c6c0d9a26e734f0f78306 (patch) | |
tree | fb495d8c18801f271d124ee48731f10df396ca89 /cutl/details/boost/smart_ptr/detail/spinlock_gcc_arm.hpp | |
parent | 4c8104756b92b9fa16b3a725e8a6aa620dfd606e (diff) |
Get rid of legacy build systems and rename cutl/ to libcutl/
Diffstat (limited to 'cutl/details/boost/smart_ptr/detail/spinlock_gcc_arm.hpp')
-rw-r--r-- | cutl/details/boost/smart_ptr/detail/spinlock_gcc_arm.hpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/cutl/details/boost/smart_ptr/detail/spinlock_gcc_arm.hpp b/cutl/details/boost/smart_ptr/detail/spinlock_gcc_arm.hpp deleted file mode 100644 index 752c830..0000000 --- a/cutl/details/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED -#define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED - -// -// Copyright (c) 2008, 2011 Peter Dimov -// -// Distributed under the Boost Software License, Version 1.0. -// See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// - -#include <cutl/details/boost/smart_ptr/detail/yield_k.hpp> - -#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__) - -# define BOOST_SP_ARM_BARRIER "dmb" -# define BOOST_SP_ARM_HAS_LDREX - -#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) - -# define BOOST_SP_ARM_BARRIER "mcr p15, 0, r0, c7, c10, 5" -# define BOOST_SP_ARM_HAS_LDREX - -#else - -# define BOOST_SP_ARM_BARRIER "" - -#endif - -namespace cutl_details_boost -{ - -namespace detail -{ - -class spinlock -{ -public: - - int v_; - -public: - - bool try_lock() - { - int r; - -#ifdef BOOST_SP_ARM_HAS_LDREX - - __asm__ __volatile__( - "ldrex %0, [%2]; \n" - "cmp %0, %1; \n" - "strexne %0, %1, [%2]; \n" - BOOST_SP_ARM_BARRIER : - "=&r"( r ): // outputs - "r"( 1 ), "r"( &v_ ): // inputs - "memory", "cc" ); - -#else - - __asm__ __volatile__( - "swp %0, %1, [%2];\n" - BOOST_SP_ARM_BARRIER : - "=&r"( r ): // outputs - "r"( 1 ), "r"( &v_ ): // inputs - "memory", "cc" ); - -#endif - - return r == 0; - } - - void lock() - { - for( unsigned k = 0; !try_lock(); ++k ) - { - cutl_details_boost::detail::yield( k ); - } - } - - void unlock() - { - __asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: "memory" ); - *const_cast< int volatile* >( &v_ ) = 0; - } - -public: - - class scoped_lock - { - private: - - spinlock & sp_; - - scoped_lock( scoped_lock const & ); - scoped_lock & operator=( scoped_lock const & ); - - public: - - explicit scoped_lock( spinlock & sp ): sp_( sp ) - { - sp.lock(); - } - - ~scoped_lock() - { - sp_.unlock(); - } - }; -}; - -} // namespace detail -} // namespace cutl_details_boost - -#define BOOST_DETAIL_SPINLOCK_INIT {0} - -#undef BOOST_SP_ARM_BARRIER -#undef BOOST_SP_ARM_HAS_LDREX - -#endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED |