From 3d0c32fe56b2c5891f3695d2ea7e9744650e15f3 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 8 Dec 2011 09:44:57 +0000 Subject: [PATCH] atomic_base.h (__calculate_memory_order): Rename to... * include/bits/atomic_base.h (__calculate_memory_order): Rename to... (__cmpexch_failure_order): This, and rewrite as constexpr function. (compare_exchange_strong, compare_exchange_weak): Use it. * include/std/atomic (compare_exchange_strong, compare_exchange_weak): Likewise. From-SVN: r182105 --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/include/bits/atomic_base.h | 20 +++++++++----------- libstdc++-v3/include/std/atomic | 8 ++++---- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index d8707d8..bf5224e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2011-12-08 Jonathan Wakely + + * include/bits/atomic_base.h (__calculate_memory_order): Rename to... + (__cmpexch_failure_order): This, and rewrite as constexpr function. + (compare_exchange_strong, compare_exchange_weak): Use it. + * include/std/atomic (compare_exchange_strong, compare_exchange_weak): + Likewise. + 2011-12-07 François Dumont PR libstdc++/51386 diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h index 3f00cda..ef17b7e 100644 --- a/libstdc++-v3/include/bits/atomic_base.h +++ b/libstdc++-v3/include/bits/atomic_base.h @@ -59,14 +59,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order_seq_cst } memory_order; - inline memory_order - __calculate_memory_order(memory_order __m) noexcept + // Drop release ordering as per [atomics.types.operations.req]/21 + constexpr memory_order + __cmpexch_failure_order(memory_order __m) noexcept { - const bool __cond1 = __m == memory_order_release; - const bool __cond2 = __m == memory_order_acq_rel; - memory_order __mo1(__cond1 ? memory_order_relaxed : __m); - memory_order __mo2(__cond2 ? memory_order_acquire : __mo1); - return __mo2; + return __m == memory_order_acq_rel ? memory_order_acquire + : __m == memory_order_release ? memory_order_relaxed : __m; } inline void @@ -505,7 +503,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) noexcept { return compare_exchange_weak(__i1, __i2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } bool @@ -513,7 +511,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) volatile noexcept { return compare_exchange_weak(__i1, __i2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } bool @@ -544,7 +542,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) noexcept { return compare_exchange_strong(__i1, __i2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } bool @@ -552,7 +550,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) volatile noexcept { return compare_exchange_strong(__i1, __i2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } __int_type diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index 70f613f..31673e9 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -408,7 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) noexcept { return compare_exchange_weak(__p1, __p2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } bool @@ -416,7 +416,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) volatile noexcept { return compare_exchange_weak(__p1, __p2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } bool @@ -435,7 +435,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) noexcept { return _M_b.compare_exchange_strong(__p1, __p2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } bool @@ -443,7 +443,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION memory_order __m = memory_order_seq_cst) volatile noexcept { return _M_b.compare_exchange_strong(__p1, __p2, __m, - __calculate_memory_order(__m)); + __cmpexch_failure_order(__m)); } __pointer_type -- 2.7.4