mirror of git://gcc.gnu.org/git/gcc.git
libstdc++: Use __GCC_ATOMIC_TEST_AND_SET in atomic_flag.
* include/bits/atomic_base.h (__atomic_flag_base): Define _M_i
based on the value of __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
(ATOMIC_FLAG_INIT): Initialize with 0, not false.
(atomic_flag::atomic_flag): Use __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
From-SVN: r183582
This commit is contained in:
parent
57c5ab1ba6
commit
e29137fe36
|
|
@ -1,3 +1,10 @@
|
||||||
|
2012-01-27 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* include/bits/atomic_base.h (__atomic_flag_base): Define _M_i
|
||||||
|
based on the value of __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
|
||||||
|
(ATOMIC_FLAG_INIT): Initialize with 0, not false.
|
||||||
|
(atomic_flag::atomic_flag): Use __GCC_ATOMIC_TEST_AND_SET_TRUEVAL.
|
||||||
|
|
||||||
2012-01-26 Jakub Jelinek <jakub@redhat.com>
|
2012-01-26 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR bootstrap/51985
|
PR bootstrap/51985
|
||||||
|
|
|
||||||
|
|
@ -227,12 +227,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
struct __atomic_flag_base
|
struct __atomic_flag_base
|
||||||
{
|
{
|
||||||
|
/* The target's "set" value for test-and-set may not be exactly 1. */
|
||||||
|
#if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1
|
||||||
bool _M_i;
|
bool _M_i;
|
||||||
|
#else
|
||||||
|
unsigned char _M_i;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
_GLIBCXX_END_EXTERN_C
|
_GLIBCXX_END_EXTERN_C
|
||||||
|
|
||||||
#define ATOMIC_FLAG_INIT { false }
|
#define ATOMIC_FLAG_INIT { 0 }
|
||||||
|
|
||||||
/// atomic_flag
|
/// atomic_flag
|
||||||
struct atomic_flag : public __atomic_flag_base
|
struct atomic_flag : public __atomic_flag_base
|
||||||
|
|
@ -244,7 +249,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
atomic_flag& operator=(const atomic_flag&) volatile = delete;
|
atomic_flag& operator=(const atomic_flag&) volatile = delete;
|
||||||
|
|
||||||
// Conversion to ATOMIC_FLAG_INIT.
|
// Conversion to ATOMIC_FLAG_INIT.
|
||||||
atomic_flag(bool __i) noexcept : __atomic_flag_base({ __i }) { }
|
constexpr atomic_flag(bool __i) noexcept
|
||||||
|
: __atomic_flag_base({ __i ? __GCC_ATOMIC_TEST_AND_SET_TRUEVAL : 0 })
|
||||||
|
{ }
|
||||||
|
|
||||||
bool
|
bool
|
||||||
test_and_set(memory_order __m = memory_order_seq_cst) noexcept
|
test_and_set(memory_order __m = memory_order_seq_cst) noexcept
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue