Commit 3d0c32fe by Jonathan Wakely Committed by Jonathan Wakely

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
parent 908b9519
2011-12-08 Jonathan Wakely <jwakely.gcc@gmail.com>
* 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 <fdumont@gcc.gnu.org> 2011-12-07 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/51386 PR libstdc++/51386
......
...@@ -59,14 +59,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -59,14 +59,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order_seq_cst memory_order_seq_cst
} memory_order; } memory_order;
inline memory_order // Drop release ordering as per [atomics.types.operations.req]/21
__calculate_memory_order(memory_order __m) noexcept constexpr memory_order
__cmpexch_failure_order(memory_order __m) noexcept
{ {
const bool __cond1 = __m == memory_order_release; return __m == memory_order_acq_rel ? memory_order_acquire
const bool __cond2 = __m == memory_order_acq_rel; : __m == memory_order_release ? memory_order_relaxed : __m;
memory_order __mo1(__cond1 ? memory_order_relaxed : __m);
memory_order __mo2(__cond2 ? memory_order_acquire : __mo1);
return __mo2;
} }
inline void inline void
...@@ -505,7 +503,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -505,7 +503,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) noexcept memory_order __m = memory_order_seq_cst) noexcept
{ {
return compare_exchange_weak(__i1, __i2, __m, return compare_exchange_weak(__i1, __i2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
bool bool
...@@ -513,7 +511,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -513,7 +511,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) volatile noexcept memory_order __m = memory_order_seq_cst) volatile noexcept
{ {
return compare_exchange_weak(__i1, __i2, __m, return compare_exchange_weak(__i1, __i2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
bool bool
...@@ -544,7 +542,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -544,7 +542,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) noexcept memory_order __m = memory_order_seq_cst) noexcept
{ {
return compare_exchange_strong(__i1, __i2, __m, return compare_exchange_strong(__i1, __i2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
bool bool
...@@ -552,7 +550,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -552,7 +550,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) volatile noexcept memory_order __m = memory_order_seq_cst) volatile noexcept
{ {
return compare_exchange_strong(__i1, __i2, __m, return compare_exchange_strong(__i1, __i2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
__int_type __int_type
......
...@@ -408,7 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -408,7 +408,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) noexcept memory_order __m = memory_order_seq_cst) noexcept
{ {
return compare_exchange_weak(__p1, __p2, __m, return compare_exchange_weak(__p1, __p2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
bool bool
...@@ -416,7 +416,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -416,7 +416,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) volatile noexcept memory_order __m = memory_order_seq_cst) volatile noexcept
{ {
return compare_exchange_weak(__p1, __p2, __m, return compare_exchange_weak(__p1, __p2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
bool bool
...@@ -435,7 +435,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -435,7 +435,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) noexcept memory_order __m = memory_order_seq_cst) noexcept
{ {
return _M_b.compare_exchange_strong(__p1, __p2, __m, return _M_b.compare_exchange_strong(__p1, __p2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
bool bool
...@@ -443,7 +443,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -443,7 +443,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
memory_order __m = memory_order_seq_cst) volatile noexcept memory_order __m = memory_order_seq_cst) volatile noexcept
{ {
return _M_b.compare_exchange_strong(__p1, __p2, __m, return _M_b.compare_exchange_strong(__p1, __p2, __m,
__calculate_memory_order(__m)); __cmpexch_failure_order(__m));
} }
__pointer_type __pointer_type
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment