| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | 
//          Copyright Oliver Kowalke 2017.// 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)//#ifndef BOOST_FIBER_DETAIL_RTM_H#define BOOST_FIBER_DETAIL_RTM_H#include <cstdint>#include <boost/assert.hpp>#include <boost/config.hpp>#include <boost/fiber/detail/config.hpp>#ifdef BOOST_HAS_ABI_HEADERS#  include BOOST_ABI_PREFIX#endifnamespace boost {namespace fibers {namespace detail {struct rtm_status {    enum {        none            = 0,        explicit_abort  = 1 << 0,        may_retry       = 1 << 1,        memory_conflict = 1 << 2,        buffer_overflow = 1 << 3,        debug_hit       = 1 << 4,        nested_abort    = 1 << 5    };    static constexpr std::uint32_t success = ~std::uint32_t{ 0 };};static BOOST_FORCEINLINEstd::uint32_t rtm_begin() noexcept {    std::uint32_t result = rtm_status::success;    __asm__ __volatile__    (        ".byte 0xc7,0xf8 ; .long 0"        : "+a" (result)        :        : "memory"    );    return result;}static BOOST_FORCEINLINEvoid rtm_end() noexcept {    __asm__ __volatile__    (        ".byte 0x0f,0x01,0xd5"        :        :        : "memory"    );}static BOOST_FORCEINLINEvoid rtm_abort_lock_not_free() noexcept {    __asm__ __volatile__    (        ".byte 0xc6,0xf8,0xff"        :        :        : "memory"    );}static BOOST_FORCEINLINEbool rtm_test() noexcept {    bool result;    __asm__ __volatile__    (        ".byte 0x0f,0x01,0xd6; setz %0"        : "=q" (result)        :        : "memory"    );    return result;}}}}#ifdef BOOST_HAS_ABI_HEADERS#  include BOOST_ABI_SUFFIX#endif#endif // BOOST_FIBER_DETAIL_RTM_H
 |