passenger 6.1.0 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +32 -2
- data/Rakefile +6 -13
- data/bin/passenger-install-apache2-module +15 -19
- data/bin/passenger-install-nginx-module +42 -44
- data/bin/passenger-status +9 -10
- data/build/common_library.rb +4 -4
- data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
- data/build/test_basics.rb +4 -3
- data/dev/copy_boost_headers +54 -40
- data/dev/ruby_server.rb +1 -1
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +94 -110
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +52 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +641 -285
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +593 -260
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +37 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/chrono.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +16 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +25 -34
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +204 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +251 -122
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +56 -56
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +129 -129
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +253 -125
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +25 -25
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +193 -126
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +57 -57
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +96 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +27 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +21 -21
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +170 -98
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +209 -119
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +95 -95
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +148 -76
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +293 -123
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +87 -71
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +88 -88
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +110 -49
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/has_posix_clock_traits.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +69 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +51 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +31 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +20 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +90 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +80 -11
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +160 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +327 -38
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +276 -33
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +260 -20
- data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +14 -18
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/posix_clock_traits_fwd.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/wait_result.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +108 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +1235 -1009
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +23 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +88 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +72 -13
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +37 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +72 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +3 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +54 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +32 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +27 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +37 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +41 -20
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -8
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_is_avalanching.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +29 -29
- data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +15 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/assert.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/static_assert.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -10
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +35 -27
- data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +20 -9
- data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +0 -5
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_rebind.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +43 -64
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -5
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/eval_if_default.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +103 -117
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/conjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/disjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/negation.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/type_identity.hpp +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +32 -38
- data/src/cxx_supportlib/vendor-modified/boost/iterator/enable_if_convertible.hpp +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/interoperable.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +162 -309
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +52 -161
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +3 -11
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +804 -977
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +24 -17
- data/src/cxx_supportlib/vendor-modified/boost/iterator/min_category.hpp +83 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/minimum_category.hpp +11 -73
- data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +56 -57
- data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +123 -156
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +43 -50
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +23 -27
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/type_traits.hpp +81 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +8 -9
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +1 -12
- data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +8 -26
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +11 -44
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/ptr_to_ref.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +0 -13
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +190 -190
- data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +12 -2
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/size.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/xoshiro_base.hpp +472 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/generalized_inverse_gaussian_distribution.hpp +339 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +12 -14
- data/src/cxx_supportlib/vendor-modified/boost/random/inverse_gaussian_distribution.hpp +226 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +63 -63
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +8 -11
- data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/xoshiro.hpp +488 -0
- data/src/cxx_supportlib/vendor-modified/boost/random.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/has_member_size.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/msvc_has_iterator_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +35 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +18 -101
- data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +4 -10
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +63 -17
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +71 -16
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +22 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +11 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +40 -38
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +46 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +57 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +21 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +18 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +12 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +16 -11
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +54 -49
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +64 -62
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +2 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -64
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_cxx20_constexpr.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +5 -28
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +41 -40
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +0 -18
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +34 -8
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/{unordered_printers.hpp → detail/unordered_printers.hpp} +34 -36
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +6 -49
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/nginx_module/ContentHandler.c +2 -0
- data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +5 -3
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +6 -13
- data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +29 -30
- data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -3
- data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger.rb +8 -8
- metadata +26 -99
- data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +0 -47
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +0 -41
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +0 -34
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -28
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +0 -68
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +0 -64
- data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/detail/select_type.hpp +0 -36
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/internals.hpp +0 -35
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +0 -120
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_debug.cpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +0 -31
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/cwchar.hpp +0 -207
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/static_mutex.hpp +0 -182
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +0 -797
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +0 -1598
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +0 -3174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +0 -511
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/char_regex_traits.hpp +0 -81
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +0 -1237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -213
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/error_type.hpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +0 -1516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +0 -54
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_category.hpp +0 -91
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_traits.hpp +0 -135
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +0 -161
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +0 -716
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +0 -183
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +0 -171
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +0 -645
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +0 -1030
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +0 -1947
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +0 -1131
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +0 -146
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regbase.hpp +0 -180
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -166
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -1158
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_fwd.hpp +0 -73
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_grep.hpp +0 -155
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_match.hpp +0 -382
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_merge.hpp +0 -93
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +0 -241
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_replace.hpp +0 -99
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_search.hpp +0 -217
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -327
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +0 -997
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +0 -237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +0 -321
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +0 -516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/syntax_type.hpp +0 -105
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +0 -360
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +0 -871
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +0 -1229
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +0 -79
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +0 -63
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +0 -88
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +0 -104
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +0 -152
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +0 -148
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +0 -170
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +0 -200
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +0 -194
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +0 -179
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +0 -186
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +0 -147
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +0 -141
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +0 -165
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +0 -96
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +0 -86
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +0 -94
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
4
4
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
5
5
|
*
|
|
6
|
-
* Copyright (c) 2015 Andrey Semashev
|
|
6
|
+
* Copyright (c) 2015-2025 Andrey Semashev
|
|
7
7
|
*/
|
|
8
8
|
/*!
|
|
9
9
|
* \file atomic/detail/extra_ops_gcc_x86.hpp
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
#define BOOST_ATOMIC_DETAIL_EXTRA_OPS_GCC_X86_HPP_INCLUDED_
|
|
16
16
|
|
|
17
17
|
#include <cstddef>
|
|
18
|
-
#include <
|
|
18
|
+
#include <cstdint>
|
|
19
19
|
#include <boost/memory_order.hpp>
|
|
20
20
|
#include <boost/atomic/detail/config.hpp>
|
|
21
21
|
#include <boost/atomic/detail/storage_traits.hpp>
|
|
@@ -35,9 +35,9 @@ template< typename Base, bool Signed >
|
|
|
35
35
|
struct extra_operations< Base, 1u, Signed, true > :
|
|
36
36
|
public extra_operations_generic< Base, 1u, Signed >
|
|
37
37
|
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
using base_type = extra_operations_generic< Base, 1u, Signed >;
|
|
39
|
+
using storage_type = typename base_type::storage_type;
|
|
40
|
+
using temp_storage_type = typename storage_traits< 4u >::type;
|
|
41
41
|
|
|
42
42
|
#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, original, result)\
|
|
43
43
|
__asm__ __volatile__\
|
|
@@ -52,35 +52,43 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
52
52
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
53
53
|
)
|
|
54
54
|
|
|
55
|
-
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order)
|
|
55
|
+
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
56
56
|
{
|
|
57
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
57
58
|
storage_type original = storage;
|
|
58
59
|
temp_storage_type result;
|
|
59
60
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negb", original, result);
|
|
61
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
60
62
|
return original;
|
|
61
63
|
}
|
|
62
64
|
|
|
63
|
-
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order)
|
|
65
|
+
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
64
66
|
{
|
|
67
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
65
68
|
storage_type original = storage;
|
|
66
69
|
temp_storage_type result;
|
|
67
70
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notb", original, result);
|
|
71
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
68
72
|
return original;
|
|
69
73
|
}
|
|
70
74
|
|
|
71
|
-
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order)
|
|
75
|
+
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order order) noexcept
|
|
72
76
|
{
|
|
77
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
73
78
|
storage_type original = storage;
|
|
74
79
|
temp_storage_type result;
|
|
75
80
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negb", original, result);
|
|
81
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
76
82
|
return static_cast< storage_type >(result);
|
|
77
83
|
}
|
|
78
84
|
|
|
79
|
-
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order)
|
|
85
|
+
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
80
86
|
{
|
|
87
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
81
88
|
storage_type original = storage;
|
|
82
89
|
temp_storage_type result;
|
|
83
90
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notb", original, result);
|
|
91
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
84
92
|
return static_cast< storage_type >(result);
|
|
85
93
|
}
|
|
86
94
|
|
|
@@ -99,44 +107,51 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
99
107
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
100
108
|
)
|
|
101
109
|
|
|
102
|
-
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
110
|
+
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
103
111
|
{
|
|
112
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
104
113
|
storage_type original = storage;
|
|
105
114
|
temp_storage_type result;
|
|
106
115
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("andb", v, original, result);
|
|
116
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
107
117
|
return static_cast< storage_type >(result);
|
|
108
118
|
}
|
|
109
119
|
|
|
110
|
-
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
120
|
+
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
111
121
|
{
|
|
122
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
112
123
|
storage_type original = storage;
|
|
113
124
|
temp_storage_type result;
|
|
114
125
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("orb", v, original, result);
|
|
126
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
115
127
|
return static_cast< storage_type >(result);
|
|
116
128
|
}
|
|
117
129
|
|
|
118
|
-
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
130
|
+
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
119
131
|
{
|
|
132
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
120
133
|
storage_type original = storage;
|
|
121
134
|
temp_storage_type result;
|
|
122
135
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("xorb", v, original, result);
|
|
136
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
123
137
|
return static_cast< storage_type >(result);
|
|
124
138
|
}
|
|
125
139
|
|
|
126
140
|
#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
|
|
127
141
|
|
|
128
|
-
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order)
|
|
142
|
+
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
129
143
|
{
|
|
130
144
|
return !!negate(storage, order);
|
|
131
145
|
}
|
|
132
146
|
|
|
133
|
-
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order)
|
|
147
|
+
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
134
148
|
{
|
|
135
149
|
return !!bitwise_complement(storage, order);
|
|
136
150
|
}
|
|
137
151
|
|
|
138
|
-
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order)
|
|
152
|
+
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
139
153
|
{
|
|
154
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
140
155
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
141
156
|
{
|
|
142
157
|
__asm__ __volatile__
|
|
@@ -157,10 +172,12 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
157
172
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
158
173
|
);
|
|
159
174
|
}
|
|
175
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
160
176
|
}
|
|
161
177
|
|
|
162
|
-
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order)
|
|
178
|
+
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
163
179
|
{
|
|
180
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
164
181
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
165
182
|
{
|
|
166
183
|
__asm__ __volatile__
|
|
@@ -181,10 +198,12 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
181
198
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
182
199
|
);
|
|
183
200
|
}
|
|
201
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
184
202
|
}
|
|
185
203
|
|
|
186
|
-
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order)
|
|
204
|
+
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
187
205
|
{
|
|
206
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
188
207
|
__asm__ __volatile__
|
|
189
208
|
(
|
|
190
209
|
"lock; negb %[storage]\n\t"
|
|
@@ -192,10 +211,12 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
192
211
|
:
|
|
193
212
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
194
213
|
);
|
|
214
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
195
215
|
}
|
|
196
216
|
|
|
197
|
-
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
217
|
+
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
198
218
|
{
|
|
219
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
199
220
|
__asm__ __volatile__
|
|
200
221
|
(
|
|
201
222
|
"lock; andb %[argument], %[storage]\n\t"
|
|
@@ -203,10 +224,12 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
203
224
|
: [argument] "iq" (v)
|
|
204
225
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
205
226
|
);
|
|
227
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
206
228
|
}
|
|
207
229
|
|
|
208
|
-
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
230
|
+
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
209
231
|
{
|
|
232
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
210
233
|
__asm__ __volatile__
|
|
211
234
|
(
|
|
212
235
|
"lock; orb %[argument], %[storage]\n\t"
|
|
@@ -214,10 +237,12 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
214
237
|
: [argument] "iq" (v)
|
|
215
238
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
216
239
|
);
|
|
240
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
217
241
|
}
|
|
218
242
|
|
|
219
|
-
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
243
|
+
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
220
244
|
{
|
|
245
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
221
246
|
__asm__ __volatile__
|
|
222
247
|
(
|
|
223
248
|
"lock; xorb %[argument], %[storage]\n\t"
|
|
@@ -225,10 +250,12 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
225
250
|
: [argument] "iq" (v)
|
|
226
251
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
227
252
|
);
|
|
253
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
228
254
|
}
|
|
229
255
|
|
|
230
|
-
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order)
|
|
256
|
+
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
231
257
|
{
|
|
258
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
232
259
|
__asm__ __volatile__
|
|
233
260
|
(
|
|
234
261
|
"lock; notb %[storage]\n\t"
|
|
@@ -236,10 +263,12 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
236
263
|
:
|
|
237
264
|
: "memory"
|
|
238
265
|
);
|
|
266
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
239
267
|
}
|
|
240
268
|
|
|
241
|
-
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
269
|
+
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
242
270
|
{
|
|
271
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
243
272
|
bool res;
|
|
244
273
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
245
274
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -286,11 +315,13 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
286
315
|
);
|
|
287
316
|
}
|
|
288
317
|
#endif
|
|
318
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
289
319
|
return res;
|
|
290
320
|
}
|
|
291
321
|
|
|
292
|
-
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
322
|
+
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
293
323
|
{
|
|
324
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
294
325
|
bool res;
|
|
295
326
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
296
327
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -337,11 +368,13 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
337
368
|
);
|
|
338
369
|
}
|
|
339
370
|
#endif
|
|
371
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
340
372
|
return res;
|
|
341
373
|
}
|
|
342
374
|
|
|
343
|
-
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
375
|
+
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
344
376
|
{
|
|
377
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
345
378
|
bool res;
|
|
346
379
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
347
380
|
__asm__ __volatile__
|
|
@@ -361,11 +394,13 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
361
394
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
362
395
|
);
|
|
363
396
|
#endif
|
|
397
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
364
398
|
return res;
|
|
365
399
|
}
|
|
366
400
|
|
|
367
|
-
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
401
|
+
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
368
402
|
{
|
|
403
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
369
404
|
bool res;
|
|
370
405
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
371
406
|
__asm__ __volatile__
|
|
@@ -385,11 +420,13 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
385
420
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
386
421
|
);
|
|
387
422
|
#endif
|
|
423
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
388
424
|
return res;
|
|
389
425
|
}
|
|
390
426
|
|
|
391
|
-
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
427
|
+
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
392
428
|
{
|
|
429
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
393
430
|
bool res;
|
|
394
431
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
395
432
|
__asm__ __volatile__
|
|
@@ -409,6 +446,7 @@ struct extra_operations< Base, 1u, Signed, true > :
|
|
|
409
446
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
410
447
|
);
|
|
411
448
|
#endif
|
|
449
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
412
450
|
return res;
|
|
413
451
|
}
|
|
414
452
|
};
|
|
@@ -417,9 +455,9 @@ template< typename Base, bool Signed >
|
|
|
417
455
|
struct extra_operations< Base, 2u, Signed, true > :
|
|
418
456
|
public extra_operations_generic< Base, 2u, Signed >
|
|
419
457
|
{
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
458
|
+
using base_type = extra_operations_generic< Base, 2u, Signed >;
|
|
459
|
+
using storage_type = typename base_type::storage_type;
|
|
460
|
+
using temp_storage_type = typename storage_traits< 4u >::type;
|
|
423
461
|
|
|
424
462
|
#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, original, result)\
|
|
425
463
|
__asm__ __volatile__\
|
|
@@ -434,35 +472,43 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
434
472
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
435
473
|
)
|
|
436
474
|
|
|
437
|
-
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order)
|
|
475
|
+
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
438
476
|
{
|
|
477
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
439
478
|
storage_type original = storage;
|
|
440
479
|
temp_storage_type result;
|
|
441
480
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negw", original, result);
|
|
481
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
442
482
|
return original;
|
|
443
483
|
}
|
|
444
484
|
|
|
445
|
-
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order)
|
|
485
|
+
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
446
486
|
{
|
|
487
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
447
488
|
storage_type original = storage;
|
|
448
489
|
temp_storage_type result;
|
|
449
490
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notw", original, result);
|
|
491
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
450
492
|
return original;
|
|
451
493
|
}
|
|
452
494
|
|
|
453
|
-
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order)
|
|
495
|
+
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order order) noexcept
|
|
454
496
|
{
|
|
497
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
455
498
|
storage_type original = storage;
|
|
456
499
|
temp_storage_type result;
|
|
457
500
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negw", original, result);
|
|
501
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
458
502
|
return static_cast< storage_type >(result);
|
|
459
503
|
}
|
|
460
504
|
|
|
461
|
-
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order)
|
|
505
|
+
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
462
506
|
{
|
|
507
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
463
508
|
storage_type original = storage;
|
|
464
509
|
temp_storage_type result;
|
|
465
510
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notw", original, result);
|
|
511
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
466
512
|
return static_cast< storage_type >(result);
|
|
467
513
|
}
|
|
468
514
|
|
|
@@ -481,44 +527,51 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
481
527
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
482
528
|
)
|
|
483
529
|
|
|
484
|
-
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
530
|
+
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
485
531
|
{
|
|
532
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
486
533
|
storage_type original = storage;
|
|
487
534
|
temp_storage_type result;
|
|
488
535
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("andw", v, original, result);
|
|
536
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
489
537
|
return static_cast< storage_type >(result);
|
|
490
538
|
}
|
|
491
539
|
|
|
492
|
-
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
540
|
+
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
493
541
|
{
|
|
542
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
494
543
|
storage_type original = storage;
|
|
495
544
|
temp_storage_type result;
|
|
496
545
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("orw", v, original, result);
|
|
546
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
497
547
|
return static_cast< storage_type >(result);
|
|
498
548
|
}
|
|
499
549
|
|
|
500
|
-
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
550
|
+
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
501
551
|
{
|
|
552
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
502
553
|
storage_type original = storage;
|
|
503
554
|
temp_storage_type result;
|
|
504
555
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("xorw", v, original, result);
|
|
556
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
505
557
|
return static_cast< storage_type >(result);
|
|
506
558
|
}
|
|
507
559
|
|
|
508
560
|
#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
|
|
509
561
|
|
|
510
|
-
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order)
|
|
562
|
+
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
511
563
|
{
|
|
512
564
|
return !!negate(storage, order);
|
|
513
565
|
}
|
|
514
566
|
|
|
515
|
-
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order)
|
|
567
|
+
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
516
568
|
{
|
|
517
569
|
return !!bitwise_complement(storage, order);
|
|
518
570
|
}
|
|
519
571
|
|
|
520
|
-
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order)
|
|
572
|
+
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
521
573
|
{
|
|
574
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
522
575
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
523
576
|
{
|
|
524
577
|
__asm__ __volatile__
|
|
@@ -539,10 +592,12 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
539
592
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
540
593
|
);
|
|
541
594
|
}
|
|
595
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
542
596
|
}
|
|
543
597
|
|
|
544
|
-
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order)
|
|
598
|
+
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
545
599
|
{
|
|
600
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
546
601
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
547
602
|
{
|
|
548
603
|
__asm__ __volatile__
|
|
@@ -563,10 +618,12 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
563
618
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
564
619
|
);
|
|
565
620
|
}
|
|
621
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
566
622
|
}
|
|
567
623
|
|
|
568
|
-
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order)
|
|
624
|
+
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
569
625
|
{
|
|
626
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
570
627
|
__asm__ __volatile__
|
|
571
628
|
(
|
|
572
629
|
"lock; negw %[storage]\n\t"
|
|
@@ -574,10 +631,12 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
574
631
|
:
|
|
575
632
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
576
633
|
);
|
|
634
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
577
635
|
}
|
|
578
636
|
|
|
579
|
-
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
637
|
+
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
580
638
|
{
|
|
639
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
581
640
|
__asm__ __volatile__
|
|
582
641
|
(
|
|
583
642
|
"lock; andw %[argument], %[storage]\n\t"
|
|
@@ -585,10 +644,12 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
585
644
|
: [argument] "iq" (v)
|
|
586
645
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
587
646
|
);
|
|
647
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
588
648
|
}
|
|
589
649
|
|
|
590
|
-
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
650
|
+
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
591
651
|
{
|
|
652
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
592
653
|
__asm__ __volatile__
|
|
593
654
|
(
|
|
594
655
|
"lock; orw %[argument], %[storage]\n\t"
|
|
@@ -596,10 +657,12 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
596
657
|
: [argument] "iq" (v)
|
|
597
658
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
598
659
|
);
|
|
660
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
599
661
|
}
|
|
600
662
|
|
|
601
|
-
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
663
|
+
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
602
664
|
{
|
|
665
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
603
666
|
__asm__ __volatile__
|
|
604
667
|
(
|
|
605
668
|
"lock; xorw %[argument], %[storage]\n\t"
|
|
@@ -607,10 +670,12 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
607
670
|
: [argument] "iq" (v)
|
|
608
671
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
609
672
|
);
|
|
673
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
610
674
|
}
|
|
611
675
|
|
|
612
|
-
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order)
|
|
676
|
+
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
613
677
|
{
|
|
678
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
614
679
|
__asm__ __volatile__
|
|
615
680
|
(
|
|
616
681
|
"lock; notw %[storage]\n\t"
|
|
@@ -618,10 +683,12 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
618
683
|
:
|
|
619
684
|
: "memory"
|
|
620
685
|
);
|
|
686
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
621
687
|
}
|
|
622
688
|
|
|
623
|
-
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
689
|
+
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
624
690
|
{
|
|
691
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
625
692
|
bool res;
|
|
626
693
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
627
694
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -668,11 +735,13 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
668
735
|
);
|
|
669
736
|
}
|
|
670
737
|
#endif
|
|
738
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
671
739
|
return res;
|
|
672
740
|
}
|
|
673
741
|
|
|
674
|
-
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
742
|
+
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
675
743
|
{
|
|
744
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
676
745
|
bool res;
|
|
677
746
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
678
747
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -719,11 +788,13 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
719
788
|
);
|
|
720
789
|
}
|
|
721
790
|
#endif
|
|
791
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
722
792
|
return res;
|
|
723
793
|
}
|
|
724
794
|
|
|
725
|
-
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
795
|
+
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
726
796
|
{
|
|
797
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
727
798
|
bool res;
|
|
728
799
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
729
800
|
__asm__ __volatile__
|
|
@@ -743,11 +814,13 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
743
814
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
744
815
|
);
|
|
745
816
|
#endif
|
|
817
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
746
818
|
return res;
|
|
747
819
|
}
|
|
748
820
|
|
|
749
|
-
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
821
|
+
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
750
822
|
{
|
|
823
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
751
824
|
bool res;
|
|
752
825
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
753
826
|
__asm__ __volatile__
|
|
@@ -767,11 +840,13 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
767
840
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
768
841
|
);
|
|
769
842
|
#endif
|
|
843
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
770
844
|
return res;
|
|
771
845
|
}
|
|
772
846
|
|
|
773
|
-
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
847
|
+
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
774
848
|
{
|
|
849
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
775
850
|
bool res;
|
|
776
851
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
777
852
|
__asm__ __volatile__
|
|
@@ -791,18 +866,20 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
791
866
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
792
867
|
);
|
|
793
868
|
#endif
|
|
869
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
794
870
|
return res;
|
|
795
871
|
}
|
|
796
872
|
|
|
797
|
-
static BOOST_FORCEINLINE bool bit_test_and_set(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
873
|
+
static BOOST_FORCEINLINE bool bit_test_and_set(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
798
874
|
{
|
|
875
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
799
876
|
bool res;
|
|
800
877
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
801
878
|
__asm__ __volatile__
|
|
802
879
|
(
|
|
803
880
|
"lock; btsw %[bit_number], %[storage]\n\t"
|
|
804
881
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
805
|
-
: [bit_number] "Kq" ((uint16_t)bit_number)
|
|
882
|
+
: [bit_number] "Kq" ((std::uint16_t)bit_number)
|
|
806
883
|
: "memory"
|
|
807
884
|
);
|
|
808
885
|
#else
|
|
@@ -811,22 +888,24 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
811
888
|
"lock; btsw %[bit_number], %[storage]\n\t"
|
|
812
889
|
"setc %[result]\n\t"
|
|
813
890
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
814
|
-
: [bit_number] "Kq" ((uint16_t)bit_number)
|
|
891
|
+
: [bit_number] "Kq" ((std::uint16_t)bit_number)
|
|
815
892
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
816
893
|
);
|
|
817
894
|
#endif
|
|
895
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
818
896
|
return res;
|
|
819
897
|
}
|
|
820
898
|
|
|
821
|
-
static BOOST_FORCEINLINE bool bit_test_and_reset(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
899
|
+
static BOOST_FORCEINLINE bool bit_test_and_reset(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
822
900
|
{
|
|
901
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
823
902
|
bool res;
|
|
824
903
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
825
904
|
__asm__ __volatile__
|
|
826
905
|
(
|
|
827
906
|
"lock; btrw %[bit_number], %[storage]\n\t"
|
|
828
907
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
829
|
-
: [bit_number] "Kq" ((uint16_t)bit_number)
|
|
908
|
+
: [bit_number] "Kq" ((std::uint16_t)bit_number)
|
|
830
909
|
: "memory"
|
|
831
910
|
);
|
|
832
911
|
#else
|
|
@@ -835,22 +914,24 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
835
914
|
"lock; btrw %[bit_number], %[storage]\n\t"
|
|
836
915
|
"setc %[result]\n\t"
|
|
837
916
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
838
|
-
: [bit_number] "Kq" ((uint16_t)bit_number)
|
|
917
|
+
: [bit_number] "Kq" ((std::uint16_t)bit_number)
|
|
839
918
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
840
919
|
);
|
|
841
920
|
#endif
|
|
921
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
842
922
|
return res;
|
|
843
923
|
}
|
|
844
924
|
|
|
845
|
-
static BOOST_FORCEINLINE bool bit_test_and_complement(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
925
|
+
static BOOST_FORCEINLINE bool bit_test_and_complement(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
846
926
|
{
|
|
927
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
847
928
|
bool res;
|
|
848
929
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
849
930
|
__asm__ __volatile__
|
|
850
931
|
(
|
|
851
932
|
"lock; btcw %[bit_number], %[storage]\n\t"
|
|
852
933
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
853
|
-
: [bit_number] "Kq" ((uint16_t)bit_number)
|
|
934
|
+
: [bit_number] "Kq" ((std::uint16_t)bit_number)
|
|
854
935
|
: "memory"
|
|
855
936
|
);
|
|
856
937
|
#else
|
|
@@ -859,10 +940,11 @@ struct extra_operations< Base, 2u, Signed, true > :
|
|
|
859
940
|
"lock; btcw %[bit_number], %[storage]\n\t"
|
|
860
941
|
"setc %[result]\n\t"
|
|
861
942
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
862
|
-
: [bit_number] "Kq" ((uint16_t)bit_number)
|
|
943
|
+
: [bit_number] "Kq" ((std::uint16_t)bit_number)
|
|
863
944
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
864
945
|
);
|
|
865
946
|
#endif
|
|
947
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
866
948
|
return res;
|
|
867
949
|
}
|
|
868
950
|
};
|
|
@@ -871,8 +953,8 @@ template< typename Base, bool Signed >
|
|
|
871
953
|
struct extra_operations< Base, 4u, Signed, true > :
|
|
872
954
|
public extra_operations_generic< Base, 4u, Signed >
|
|
873
955
|
{
|
|
874
|
-
|
|
875
|
-
|
|
956
|
+
using base_type = extra_operations_generic< Base, 4u, Signed >;
|
|
957
|
+
using storage_type = typename base_type::storage_type;
|
|
876
958
|
|
|
877
959
|
#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, original, result)\
|
|
878
960
|
__asm__ __volatile__\
|
|
@@ -887,35 +969,43 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
887
969
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
888
970
|
)
|
|
889
971
|
|
|
890
|
-
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order)
|
|
972
|
+
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
891
973
|
{
|
|
974
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
892
975
|
storage_type original = storage;
|
|
893
976
|
storage_type result;
|
|
894
977
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negl", original, result);
|
|
978
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
895
979
|
return original;
|
|
896
980
|
}
|
|
897
981
|
|
|
898
|
-
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order)
|
|
982
|
+
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
899
983
|
{
|
|
984
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
900
985
|
storage_type original = storage;
|
|
901
986
|
storage_type result;
|
|
902
987
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notl", original, result);
|
|
988
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
903
989
|
return original;
|
|
904
990
|
}
|
|
905
991
|
|
|
906
|
-
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order)
|
|
992
|
+
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order order) noexcept
|
|
907
993
|
{
|
|
994
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
908
995
|
storage_type original = storage;
|
|
909
996
|
storage_type result;
|
|
910
997
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negl", original, result);
|
|
998
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
911
999
|
return result;
|
|
912
1000
|
}
|
|
913
1001
|
|
|
914
|
-
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order)
|
|
1002
|
+
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
915
1003
|
{
|
|
1004
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
916
1005
|
storage_type original = storage;
|
|
917
1006
|
storage_type result;
|
|
918
1007
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notl", original, result);
|
|
1008
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
919
1009
|
return result;
|
|
920
1010
|
}
|
|
921
1011
|
|
|
@@ -934,44 +1024,51 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
934
1024
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
935
1025
|
)
|
|
936
1026
|
|
|
937
|
-
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
1027
|
+
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
938
1028
|
{
|
|
1029
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
939
1030
|
storage_type original = storage;
|
|
940
1031
|
storage_type result;
|
|
941
1032
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("andl", v, original, result);
|
|
1033
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
942
1034
|
return static_cast< storage_type >(result);
|
|
943
1035
|
}
|
|
944
1036
|
|
|
945
|
-
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
1037
|
+
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
946
1038
|
{
|
|
1039
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
947
1040
|
storage_type original = storage;
|
|
948
1041
|
storage_type result;
|
|
949
1042
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("orl", v, original, result);
|
|
1043
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
950
1044
|
return static_cast< storage_type >(result);
|
|
951
1045
|
}
|
|
952
1046
|
|
|
953
|
-
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
1047
|
+
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
954
1048
|
{
|
|
1049
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
955
1050
|
storage_type original = storage;
|
|
956
1051
|
storage_type result;
|
|
957
1052
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("xorl", v, original, result);
|
|
1053
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
958
1054
|
return static_cast< storage_type >(result);
|
|
959
1055
|
}
|
|
960
1056
|
|
|
961
1057
|
#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
|
|
962
1058
|
|
|
963
|
-
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order)
|
|
1059
|
+
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
964
1060
|
{
|
|
965
1061
|
return !!negate(storage, order);
|
|
966
1062
|
}
|
|
967
1063
|
|
|
968
|
-
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order)
|
|
1064
|
+
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
969
1065
|
{
|
|
970
1066
|
return !!bitwise_complement(storage, order);
|
|
971
1067
|
}
|
|
972
1068
|
|
|
973
|
-
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order)
|
|
1069
|
+
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
974
1070
|
{
|
|
1071
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
975
1072
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
976
1073
|
{
|
|
977
1074
|
__asm__ __volatile__
|
|
@@ -992,10 +1089,12 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
992
1089
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
993
1090
|
);
|
|
994
1091
|
}
|
|
1092
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
995
1093
|
}
|
|
996
1094
|
|
|
997
|
-
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order)
|
|
1095
|
+
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
998
1096
|
{
|
|
1097
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
999
1098
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
1000
1099
|
{
|
|
1001
1100
|
__asm__ __volatile__
|
|
@@ -1016,10 +1115,12 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1016
1115
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1017
1116
|
);
|
|
1018
1117
|
}
|
|
1118
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1019
1119
|
}
|
|
1020
1120
|
|
|
1021
|
-
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order)
|
|
1121
|
+
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
1022
1122
|
{
|
|
1123
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1023
1124
|
__asm__ __volatile__
|
|
1024
1125
|
(
|
|
1025
1126
|
"lock; negl %[storage]\n\t"
|
|
@@ -1027,10 +1128,12 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1027
1128
|
:
|
|
1028
1129
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1029
1130
|
);
|
|
1131
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1030
1132
|
}
|
|
1031
1133
|
|
|
1032
|
-
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
1134
|
+
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1033
1135
|
{
|
|
1136
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1034
1137
|
__asm__ __volatile__
|
|
1035
1138
|
(
|
|
1036
1139
|
"lock; andl %[argument], %[storage]\n\t"
|
|
@@ -1038,10 +1141,12 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1038
1141
|
: [argument] "ir" (v)
|
|
1039
1142
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1040
1143
|
);
|
|
1144
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1041
1145
|
}
|
|
1042
1146
|
|
|
1043
|
-
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
1147
|
+
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1044
1148
|
{
|
|
1149
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1045
1150
|
__asm__ __volatile__
|
|
1046
1151
|
(
|
|
1047
1152
|
"lock; orl %[argument], %[storage]\n\t"
|
|
@@ -1049,10 +1154,12 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1049
1154
|
: [argument] "ir" (v)
|
|
1050
1155
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1051
1156
|
);
|
|
1157
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1052
1158
|
}
|
|
1053
1159
|
|
|
1054
|
-
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
1160
|
+
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1055
1161
|
{
|
|
1162
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1056
1163
|
__asm__ __volatile__
|
|
1057
1164
|
(
|
|
1058
1165
|
"lock; xorl %[argument], %[storage]\n\t"
|
|
@@ -1060,10 +1167,12 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1060
1167
|
: [argument] "ir" (v)
|
|
1061
1168
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1062
1169
|
);
|
|
1170
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1063
1171
|
}
|
|
1064
1172
|
|
|
1065
|
-
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order)
|
|
1173
|
+
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
1066
1174
|
{
|
|
1175
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1067
1176
|
__asm__ __volatile__
|
|
1068
1177
|
(
|
|
1069
1178
|
"lock; notl %[storage]\n\t"
|
|
@@ -1071,10 +1180,12 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1071
1180
|
:
|
|
1072
1181
|
: "memory"
|
|
1073
1182
|
);
|
|
1183
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1074
1184
|
}
|
|
1075
1185
|
|
|
1076
|
-
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1186
|
+
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1077
1187
|
{
|
|
1188
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1078
1189
|
bool res;
|
|
1079
1190
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1080
1191
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -1121,11 +1232,13 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1121
1232
|
);
|
|
1122
1233
|
}
|
|
1123
1234
|
#endif
|
|
1235
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1124
1236
|
return res;
|
|
1125
1237
|
}
|
|
1126
1238
|
|
|
1127
|
-
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1239
|
+
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1128
1240
|
{
|
|
1241
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1129
1242
|
bool res;
|
|
1130
1243
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1131
1244
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -1172,11 +1285,13 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1172
1285
|
);
|
|
1173
1286
|
}
|
|
1174
1287
|
#endif
|
|
1288
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1175
1289
|
return res;
|
|
1176
1290
|
}
|
|
1177
1291
|
|
|
1178
|
-
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1292
|
+
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1179
1293
|
{
|
|
1294
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1180
1295
|
bool res;
|
|
1181
1296
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1182
1297
|
__asm__ __volatile__
|
|
@@ -1196,11 +1311,13 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1196
1311
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1197
1312
|
);
|
|
1198
1313
|
#endif
|
|
1314
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1199
1315
|
return res;
|
|
1200
1316
|
}
|
|
1201
1317
|
|
|
1202
|
-
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1318
|
+
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1203
1319
|
{
|
|
1320
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1204
1321
|
bool res;
|
|
1205
1322
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1206
1323
|
__asm__ __volatile__
|
|
@@ -1220,11 +1337,13 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1220
1337
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1221
1338
|
);
|
|
1222
1339
|
#endif
|
|
1340
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1223
1341
|
return res;
|
|
1224
1342
|
}
|
|
1225
1343
|
|
|
1226
|
-
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1344
|
+
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1227
1345
|
{
|
|
1346
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1228
1347
|
bool res;
|
|
1229
1348
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1230
1349
|
__asm__ __volatile__
|
|
@@ -1244,18 +1363,20 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1244
1363
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1245
1364
|
);
|
|
1246
1365
|
#endif
|
|
1366
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1247
1367
|
return res;
|
|
1248
1368
|
}
|
|
1249
1369
|
|
|
1250
|
-
static BOOST_FORCEINLINE bool bit_test_and_set(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
1370
|
+
static BOOST_FORCEINLINE bool bit_test_and_set(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
1251
1371
|
{
|
|
1372
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1252
1373
|
bool res;
|
|
1253
1374
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1254
1375
|
__asm__ __volatile__
|
|
1255
1376
|
(
|
|
1256
1377
|
"lock; btsl %[bit_number], %[storage]\n\t"
|
|
1257
1378
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
1258
|
-
: [bit_number] "Kr" ((uint32_t)bit_number)
|
|
1379
|
+
: [bit_number] "Kr" ((std::uint32_t)bit_number)
|
|
1259
1380
|
: "memory"
|
|
1260
1381
|
);
|
|
1261
1382
|
#else
|
|
@@ -1264,22 +1385,24 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1264
1385
|
"lock; btsl %[bit_number], %[storage]\n\t"
|
|
1265
1386
|
"setc %[result]\n\t"
|
|
1266
1387
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
1267
|
-
: [bit_number] "Kr" ((uint32_t)bit_number)
|
|
1388
|
+
: [bit_number] "Kr" ((std::uint32_t)bit_number)
|
|
1268
1389
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1269
1390
|
);
|
|
1270
1391
|
#endif
|
|
1392
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1271
1393
|
return res;
|
|
1272
1394
|
}
|
|
1273
1395
|
|
|
1274
|
-
static BOOST_FORCEINLINE bool bit_test_and_reset(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
1396
|
+
static BOOST_FORCEINLINE bool bit_test_and_reset(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
1275
1397
|
{
|
|
1398
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1276
1399
|
bool res;
|
|
1277
1400
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1278
1401
|
__asm__ __volatile__
|
|
1279
1402
|
(
|
|
1280
1403
|
"lock; btrl %[bit_number], %[storage]\n\t"
|
|
1281
1404
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
1282
|
-
: [bit_number] "Kr" ((uint32_t)bit_number)
|
|
1405
|
+
: [bit_number] "Kr" ((std::uint32_t)bit_number)
|
|
1283
1406
|
: "memory"
|
|
1284
1407
|
);
|
|
1285
1408
|
#else
|
|
@@ -1288,22 +1411,24 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1288
1411
|
"lock; btrl %[bit_number], %[storage]\n\t"
|
|
1289
1412
|
"setc %[result]\n\t"
|
|
1290
1413
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
1291
|
-
: [bit_number] "Kr" ((uint32_t)bit_number)
|
|
1414
|
+
: [bit_number] "Kr" ((std::uint32_t)bit_number)
|
|
1292
1415
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1293
1416
|
);
|
|
1294
1417
|
#endif
|
|
1418
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1295
1419
|
return res;
|
|
1296
1420
|
}
|
|
1297
1421
|
|
|
1298
|
-
static BOOST_FORCEINLINE bool bit_test_and_complement(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
1422
|
+
static BOOST_FORCEINLINE bool bit_test_and_complement(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
1299
1423
|
{
|
|
1424
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1300
1425
|
bool res;
|
|
1301
1426
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1302
1427
|
__asm__ __volatile__
|
|
1303
1428
|
(
|
|
1304
1429
|
"lock; btcl %[bit_number], %[storage]\n\t"
|
|
1305
1430
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
1306
|
-
: [bit_number] "Kr" ((uint32_t)bit_number)
|
|
1431
|
+
: [bit_number] "Kr" ((std::uint32_t)bit_number)
|
|
1307
1432
|
: "memory"
|
|
1308
1433
|
);
|
|
1309
1434
|
#else
|
|
@@ -1312,10 +1437,11 @@ struct extra_operations< Base, 4u, Signed, true > :
|
|
|
1312
1437
|
"lock; btcl %[bit_number], %[storage]\n\t"
|
|
1313
1438
|
"setc %[result]\n\t"
|
|
1314
1439
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
1315
|
-
: [bit_number] "Kr" ((uint32_t)bit_number)
|
|
1440
|
+
: [bit_number] "Kr" ((std::uint32_t)bit_number)
|
|
1316
1441
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1317
1442
|
);
|
|
1318
1443
|
#endif
|
|
1444
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1319
1445
|
return res;
|
|
1320
1446
|
}
|
|
1321
1447
|
};
|
|
@@ -1326,8 +1452,8 @@ template< typename Base, bool Signed >
|
|
|
1326
1452
|
struct extra_operations< Base, 8u, Signed, true > :
|
|
1327
1453
|
public extra_operations_generic< Base, 8u, Signed >
|
|
1328
1454
|
{
|
|
1329
|
-
|
|
1330
|
-
|
|
1455
|
+
using base_type = extra_operations_generic< Base, 8u, Signed >;
|
|
1456
|
+
using storage_type = typename base_type::storage_type;
|
|
1331
1457
|
|
|
1332
1458
|
#define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, original, result)\
|
|
1333
1459
|
__asm__ __volatile__\
|
|
@@ -1342,35 +1468,43 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1342
1468
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
1343
1469
|
)
|
|
1344
1470
|
|
|
1345
|
-
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order)
|
|
1471
|
+
static BOOST_FORCEINLINE storage_type fetch_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
1346
1472
|
{
|
|
1473
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1347
1474
|
storage_type original = storage;
|
|
1348
1475
|
storage_type result;
|
|
1349
1476
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negq", original, result);
|
|
1477
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1350
1478
|
return original;
|
|
1351
1479
|
}
|
|
1352
1480
|
|
|
1353
|
-
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order)
|
|
1481
|
+
static BOOST_FORCEINLINE storage_type fetch_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
1354
1482
|
{
|
|
1483
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1355
1484
|
storage_type original = storage;
|
|
1356
1485
|
storage_type result;
|
|
1357
1486
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notq", original, result);
|
|
1487
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1358
1488
|
return original;
|
|
1359
1489
|
}
|
|
1360
1490
|
|
|
1361
|
-
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order)
|
|
1491
|
+
static BOOST_FORCEINLINE storage_type negate(storage_type volatile& storage, memory_order order) noexcept
|
|
1362
1492
|
{
|
|
1493
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1363
1494
|
storage_type original = storage;
|
|
1364
1495
|
storage_type result;
|
|
1365
1496
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("negq", original, result);
|
|
1497
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1366
1498
|
return result;
|
|
1367
1499
|
}
|
|
1368
1500
|
|
|
1369
|
-
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order)
|
|
1501
|
+
static BOOST_FORCEINLINE storage_type bitwise_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
1370
1502
|
{
|
|
1503
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1371
1504
|
storage_type original = storage;
|
|
1372
1505
|
storage_type result;
|
|
1373
1506
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("notq", original, result);
|
|
1507
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1374
1508
|
return result;
|
|
1375
1509
|
}
|
|
1376
1510
|
|
|
@@ -1389,44 +1523,51 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1389
1523
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
|
|
1390
1524
|
)
|
|
1391
1525
|
|
|
1392
|
-
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
1526
|
+
static BOOST_FORCEINLINE storage_type bitwise_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1393
1527
|
{
|
|
1528
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1394
1529
|
storage_type original = storage;
|
|
1395
1530
|
storage_type result;
|
|
1396
1531
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("andq", v, original, result);
|
|
1532
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1397
1533
|
return static_cast< storage_type >(result);
|
|
1398
1534
|
}
|
|
1399
1535
|
|
|
1400
|
-
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
1536
|
+
static BOOST_FORCEINLINE storage_type bitwise_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1401
1537
|
{
|
|
1538
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1402
1539
|
storage_type original = storage;
|
|
1403
1540
|
storage_type result;
|
|
1404
1541
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("orq", v, original, result);
|
|
1542
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1405
1543
|
return static_cast< storage_type >(result);
|
|
1406
1544
|
}
|
|
1407
1545
|
|
|
1408
|
-
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
1546
|
+
static BOOST_FORCEINLINE storage_type bitwise_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1409
1547
|
{
|
|
1548
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1410
1549
|
storage_type original = storage;
|
|
1411
1550
|
storage_type result;
|
|
1412
1551
|
BOOST_ATOMIC_DETAIL_CAS_LOOP("xorq", v, original, result);
|
|
1552
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1413
1553
|
return static_cast< storage_type >(result);
|
|
1414
1554
|
}
|
|
1415
1555
|
|
|
1416
1556
|
#undef BOOST_ATOMIC_DETAIL_CAS_LOOP
|
|
1417
1557
|
|
|
1418
|
-
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order)
|
|
1558
|
+
static BOOST_FORCEINLINE bool negate_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
1419
1559
|
{
|
|
1420
1560
|
return !!negate(storage, order);
|
|
1421
1561
|
}
|
|
1422
1562
|
|
|
1423
|
-
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order)
|
|
1563
|
+
static BOOST_FORCEINLINE bool complement_and_test(storage_type volatile& storage, memory_order order) noexcept
|
|
1424
1564
|
{
|
|
1425
1565
|
return !!bitwise_complement(storage, order);
|
|
1426
1566
|
}
|
|
1427
1567
|
|
|
1428
|
-
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order)
|
|
1568
|
+
static BOOST_FORCEINLINE void opaque_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1429
1569
|
{
|
|
1570
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1430
1571
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
1431
1572
|
{
|
|
1432
1573
|
__asm__ __volatile__
|
|
@@ -1447,10 +1588,12 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1447
1588
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1448
1589
|
);
|
|
1449
1590
|
}
|
|
1591
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1450
1592
|
}
|
|
1451
1593
|
|
|
1452
|
-
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order)
|
|
1594
|
+
static BOOST_FORCEINLINE void opaque_sub(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1453
1595
|
{
|
|
1596
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1454
1597
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
1455
1598
|
{
|
|
1456
1599
|
__asm__ __volatile__
|
|
@@ -1471,10 +1614,12 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1471
1614
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1472
1615
|
);
|
|
1473
1616
|
}
|
|
1617
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1474
1618
|
}
|
|
1475
1619
|
|
|
1476
|
-
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order)
|
|
1620
|
+
static BOOST_FORCEINLINE void opaque_negate(storage_type volatile& storage, memory_order order) noexcept
|
|
1477
1621
|
{
|
|
1622
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1478
1623
|
__asm__ __volatile__
|
|
1479
1624
|
(
|
|
1480
1625
|
"lock; negq %[storage]\n\t"
|
|
@@ -1482,10 +1627,12 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1482
1627
|
:
|
|
1483
1628
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1484
1629
|
);
|
|
1630
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1485
1631
|
}
|
|
1486
1632
|
|
|
1487
|
-
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order)
|
|
1633
|
+
static BOOST_FORCEINLINE void opaque_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1488
1634
|
{
|
|
1635
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1489
1636
|
__asm__ __volatile__
|
|
1490
1637
|
(
|
|
1491
1638
|
"lock; andq %[argument], %[storage]\n\t"
|
|
@@ -1493,10 +1640,12 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1493
1640
|
: [argument] "er" (v)
|
|
1494
1641
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1495
1642
|
);
|
|
1643
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1496
1644
|
}
|
|
1497
1645
|
|
|
1498
|
-
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order)
|
|
1646
|
+
static BOOST_FORCEINLINE void opaque_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1499
1647
|
{
|
|
1648
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1500
1649
|
__asm__ __volatile__
|
|
1501
1650
|
(
|
|
1502
1651
|
"lock; orq %[argument], %[storage]\n\t"
|
|
@@ -1504,10 +1653,12 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1504
1653
|
: [argument] "er" (v)
|
|
1505
1654
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1506
1655
|
);
|
|
1656
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1507
1657
|
}
|
|
1508
1658
|
|
|
1509
|
-
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order)
|
|
1659
|
+
static BOOST_FORCEINLINE void opaque_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1510
1660
|
{
|
|
1661
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1511
1662
|
__asm__ __volatile__
|
|
1512
1663
|
(
|
|
1513
1664
|
"lock; xorq %[argument], %[storage]\n\t"
|
|
@@ -1515,10 +1666,12 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1515
1666
|
: [argument] "er" (v)
|
|
1516
1667
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1517
1668
|
);
|
|
1669
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1518
1670
|
}
|
|
1519
1671
|
|
|
1520
|
-
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order)
|
|
1672
|
+
static BOOST_FORCEINLINE void opaque_complement(storage_type volatile& storage, memory_order order) noexcept
|
|
1521
1673
|
{
|
|
1674
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1522
1675
|
__asm__ __volatile__
|
|
1523
1676
|
(
|
|
1524
1677
|
"lock; notq %[storage]\n\t"
|
|
@@ -1526,10 +1679,12 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1526
1679
|
:
|
|
1527
1680
|
: "memory"
|
|
1528
1681
|
);
|
|
1682
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1529
1683
|
}
|
|
1530
1684
|
|
|
1531
|
-
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1685
|
+
static BOOST_FORCEINLINE bool add_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1532
1686
|
{
|
|
1687
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1533
1688
|
bool res;
|
|
1534
1689
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1535
1690
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -1576,11 +1731,13 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1576
1731
|
);
|
|
1577
1732
|
}
|
|
1578
1733
|
#endif
|
|
1734
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1579
1735
|
return res;
|
|
1580
1736
|
}
|
|
1581
1737
|
|
|
1582
|
-
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1738
|
+
static BOOST_FORCEINLINE bool sub_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1583
1739
|
{
|
|
1740
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1584
1741
|
bool res;
|
|
1585
1742
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1586
1743
|
if (BOOST_ATOMIC_DETAIL_IS_CONSTANT(v) && v == 1)
|
|
@@ -1627,11 +1784,13 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1627
1784
|
);
|
|
1628
1785
|
}
|
|
1629
1786
|
#endif
|
|
1787
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1630
1788
|
return res;
|
|
1631
1789
|
}
|
|
1632
1790
|
|
|
1633
|
-
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1791
|
+
static BOOST_FORCEINLINE bool and_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1634
1792
|
{
|
|
1793
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1635
1794
|
bool res;
|
|
1636
1795
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1637
1796
|
__asm__ __volatile__
|
|
@@ -1651,11 +1810,13 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1651
1810
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1652
1811
|
);
|
|
1653
1812
|
#endif
|
|
1813
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1654
1814
|
return res;
|
|
1655
1815
|
}
|
|
1656
1816
|
|
|
1657
|
-
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1817
|
+
static BOOST_FORCEINLINE bool or_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1658
1818
|
{
|
|
1819
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1659
1820
|
bool res;
|
|
1660
1821
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1661
1822
|
__asm__ __volatile__
|
|
@@ -1675,11 +1836,13 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1675
1836
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1676
1837
|
);
|
|
1677
1838
|
#endif
|
|
1839
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1678
1840
|
return res;
|
|
1679
1841
|
}
|
|
1680
1842
|
|
|
1681
|
-
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order)
|
|
1843
|
+
static BOOST_FORCEINLINE bool xor_and_test(storage_type volatile& storage, storage_type v, memory_order order) noexcept
|
|
1682
1844
|
{
|
|
1845
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1683
1846
|
bool res;
|
|
1684
1847
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1685
1848
|
__asm__ __volatile__
|
|
@@ -1699,18 +1862,20 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1699
1862
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1700
1863
|
);
|
|
1701
1864
|
#endif
|
|
1865
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1702
1866
|
return res;
|
|
1703
1867
|
}
|
|
1704
1868
|
|
|
1705
|
-
static BOOST_FORCEINLINE bool bit_test_and_set(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
1869
|
+
static BOOST_FORCEINLINE bool bit_test_and_set(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
1706
1870
|
{
|
|
1871
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1707
1872
|
bool res;
|
|
1708
1873
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1709
1874
|
__asm__ __volatile__
|
|
1710
1875
|
(
|
|
1711
1876
|
"lock; btsq %[bit_number], %[storage]\n\t"
|
|
1712
1877
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
1713
|
-
: [bit_number] "Kr" ((uint64_t)bit_number)
|
|
1878
|
+
: [bit_number] "Kr" ((std::uint64_t)bit_number)
|
|
1714
1879
|
: "memory"
|
|
1715
1880
|
);
|
|
1716
1881
|
#else
|
|
@@ -1719,22 +1884,24 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1719
1884
|
"lock; btsq %[bit_number], %[storage]\n\t"
|
|
1720
1885
|
"setc %[result]\n\t"
|
|
1721
1886
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
1722
|
-
: [bit_number] "Kr" ((uint64_t)bit_number)
|
|
1887
|
+
: [bit_number] "Kr" ((std::uint64_t)bit_number)
|
|
1723
1888
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1724
1889
|
);
|
|
1725
1890
|
#endif
|
|
1891
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1726
1892
|
return res;
|
|
1727
1893
|
}
|
|
1728
1894
|
|
|
1729
|
-
static BOOST_FORCEINLINE bool bit_test_and_reset(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
1895
|
+
static BOOST_FORCEINLINE bool bit_test_and_reset(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
1730
1896
|
{
|
|
1897
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1731
1898
|
bool res;
|
|
1732
1899
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1733
1900
|
__asm__ __volatile__
|
|
1734
1901
|
(
|
|
1735
1902
|
"lock; btrq %[bit_number], %[storage]\n\t"
|
|
1736
1903
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
1737
|
-
: [bit_number] "Kr" ((uint64_t)bit_number)
|
|
1904
|
+
: [bit_number] "Kr" ((std::uint64_t)bit_number)
|
|
1738
1905
|
: "memory"
|
|
1739
1906
|
);
|
|
1740
1907
|
#else
|
|
@@ -1743,22 +1910,24 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1743
1910
|
"lock; btrq %[bit_number], %[storage]\n\t"
|
|
1744
1911
|
"setc %[result]\n\t"
|
|
1745
1912
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
1746
|
-
: [bit_number] "Kr" ((uint64_t)bit_number)
|
|
1913
|
+
: [bit_number] "Kr" ((std::uint64_t)bit_number)
|
|
1747
1914
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1748
1915
|
);
|
|
1749
1916
|
#endif
|
|
1917
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1750
1918
|
return res;
|
|
1751
1919
|
}
|
|
1752
1920
|
|
|
1753
|
-
static BOOST_FORCEINLINE bool bit_test_and_complement(storage_type volatile& storage, unsigned int bit_number, memory_order)
|
|
1921
|
+
static BOOST_FORCEINLINE bool bit_test_and_complement(storage_type volatile& storage, unsigned int bit_number, memory_order order) noexcept
|
|
1754
1922
|
{
|
|
1923
|
+
BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
|
|
1755
1924
|
bool res;
|
|
1756
1925
|
#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
|
|
1757
1926
|
__asm__ __volatile__
|
|
1758
1927
|
(
|
|
1759
1928
|
"lock; btcq %[bit_number], %[storage]\n\t"
|
|
1760
1929
|
: [storage] "+m" (storage), [result] "=@ccc" (res)
|
|
1761
|
-
: [bit_number] "Kr" ((uint64_t)bit_number)
|
|
1930
|
+
: [bit_number] "Kr" ((std::uint64_t)bit_number)
|
|
1762
1931
|
: "memory"
|
|
1763
1932
|
);
|
|
1764
1933
|
#else
|
|
@@ -1767,10 +1936,11 @@ struct extra_operations< Base, 8u, Signed, true > :
|
|
|
1767
1936
|
"lock; btcq %[bit_number], %[storage]\n\t"
|
|
1768
1937
|
"setc %[result]\n\t"
|
|
1769
1938
|
: [storage] "+m" (storage), [result] "=q" (res)
|
|
1770
|
-
: [bit_number] "Kr" ((uint64_t)bit_number)
|
|
1939
|
+
: [bit_number] "Kr" ((std::uint64_t)bit_number)
|
|
1771
1940
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
|
|
1772
1941
|
);
|
|
1773
1942
|
#endif
|
|
1943
|
+
BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
|
|
1774
1944
|
return res;
|
|
1775
1945
|
}
|
|
1776
1946
|
};
|