diff options
author | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-11-08 03:20:30 +0000 |
---|---|---|
committer | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-11-08 03:20:30 +0000 |
commit | 643df0593c630691fa6877cddeefdd4c3023d444 (patch) | |
tree | 1eb48ad31d05a9ce117bedc17115de96dffa2f0b /libstdc++-v3/include/std/atomic | |
parent | 54f3f029d816c6d1626310649adfda740e203f7b (diff) | |
parent | d5d8f1ccc6d3972dc5cfc0949e85e0b1c9e24ee0 (diff) | |
download | gcc-transactional-memory.tar.gz |
* Merge from mainline rev 181122.transactional-memory
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/transactional-memory@181148 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/atomic')
-rw-r--r-- | libstdc++-v3/include/std/atomic | 101 |
1 files changed, 73 insertions, 28 deletions
diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index b3fa7d8120b..70f613f5c50 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -39,8 +39,6 @@ #endif #include <bits/atomic_base.h> -#include <bits/atomic_0.h> -#include <bits/atomic_2.h> namespace std _GLIBCXX_VISIBILITY(default) { @@ -167,69 +165,116 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr atomic(_Tp __i) noexcept : _M_i(__i) { } - operator _Tp() const noexcept; + operator _Tp() const noexcept + { return load(); } - operator _Tp() const volatile noexcept; + operator _Tp() const volatile noexcept + { return load(); } _Tp - operator=(_Tp __i) noexcept { store(__i); return __i; } + operator=(_Tp __i) noexcept + { store(__i); return __i; } _Tp - operator=(_Tp __i) volatile noexcept { store(__i); return __i; } + operator=(_Tp __i) volatile noexcept + { store(__i); return __i; } bool - is_lock_free() const noexcept; + is_lock_free() const noexcept + { return __atomic_is_lock_free(sizeof(_M_i), &_M_i); } bool - is_lock_free() const volatile noexcept; + is_lock_free() const volatile noexcept + { return __atomic_is_lock_free(sizeof(_M_i), &_M_i); } void - store(_Tp, memory_order = memory_order_seq_cst) noexcept; + store(_Tp __i, memory_order _m = memory_order_seq_cst) noexcept + { __atomic_store(&_M_i, &__i, _m); } void - store(_Tp, memory_order = memory_order_seq_cst) volatile noexcept; + store(_Tp __i, memory_order _m = memory_order_seq_cst) volatile noexcept + { __atomic_store(&_M_i, &__i, _m); } _Tp - load(memory_order = memory_order_seq_cst) const noexcept; + load(memory_order _m = memory_order_seq_cst) const noexcept + { + _Tp tmp; + __atomic_load(&_M_i, &tmp, _m); + return tmp; + } _Tp - load(memory_order = memory_order_seq_cst) const volatile noexcept; + load(memory_order _m = memory_order_seq_cst) const volatile noexcept + { + _Tp tmp; + __atomic_load(&_M_i, &tmp, _m); + return tmp; + } _Tp - exchange(_Tp __i, memory_order = memory_order_seq_cst) noexcept; + exchange(_Tp __i, memory_order _m = memory_order_seq_cst) noexcept + { + _Tp tmp; + __atomic_exchange(&_M_i, &__i, &tmp, _m); + return tmp; + } _Tp - exchange(_Tp __i, memory_order = memory_order_seq_cst) volatile noexcept; + exchange(_Tp __i, + memory_order _m = memory_order_seq_cst) volatile noexcept + { + _Tp tmp; + __atomic_exchange(&_M_i, &__i, &tmp, _m); + return tmp; + } bool - compare_exchange_weak(_Tp&, _Tp, memory_order, memory_order) noexcept; + compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, + memory_order __f) noexcept + { + return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f); + } bool - compare_exchange_weak(_Tp&, _Tp, memory_order, - memory_order) volatile noexcept; + compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, + memory_order __f) volatile noexcept + { + return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f); + } bool - compare_exchange_weak(_Tp&, _Tp, - memory_order = memory_order_seq_cst) noexcept; + compare_exchange_weak(_Tp& __e, _Tp __i, + memory_order __m = memory_order_seq_cst) noexcept + { return compare_exchange_weak(__e, __i, __m, __m); } bool - compare_exchange_weak(_Tp&, _Tp, - memory_order = memory_order_seq_cst) volatile noexcept; + compare_exchange_weak(_Tp& __e, _Tp __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return compare_exchange_weak(__e, __i, __m, __m); } bool - compare_exchange_strong(_Tp&, _Tp, memory_order, memory_order) noexcept; + compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, + memory_order __f) noexcept + { + return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f); + } bool - compare_exchange_strong(_Tp&, _Tp, memory_order, - memory_order) volatile noexcept; + compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, + memory_order __f) volatile noexcept + { + return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f); + } bool - compare_exchange_strong(_Tp&, _Tp, - memory_order = memory_order_seq_cst) noexcept; + compare_exchange_strong(_Tp& __e, _Tp __i, + memory_order __m = memory_order_seq_cst) noexcept + { return compare_exchange_strong(__e, __i, __m, __m); } bool - compare_exchange_strong(_Tp&, _Tp, - memory_order = memory_order_seq_cst) volatile noexcept; + compare_exchange_strong(_Tp& __e, _Tp __i, + memory_order __m = memory_order_seq_cst) volatile noexcept + { return compare_exchange_strong(__e, __i, __m, __m); } }; |