17INLINE
void AtomicAdjustGccImpl::
18inc(TVOLATILE AtomicAdjustGccImpl::Integer &var) {
19 __atomic_fetch_add(&var, 1, __ATOMIC_SEQ_CST);
26INLINE
bool AtomicAdjustGccImpl::
27dec(TVOLATILE AtomicAdjustGccImpl::Integer &var) {
28 return (__atomic_sub_fetch(&var, 1, __ATOMIC_SEQ_CST) != 0);
35INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
36add(TVOLATILE AtomicAdjustGccImpl::Integer &var,
37 AtomicAdjustGccImpl::Integer delta) {
38 return __atomic_add_fetch(&var, delta, __ATOMIC_SEQ_CST);
44INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
45set(TVOLATILE AtomicAdjustGccImpl::Integer &var,
46 AtomicAdjustGccImpl::Integer new_value) {
48 return __atomic_exchange_n(&var, new_value, __ATOMIC_SEQ_CST);
57INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
58get(
const TVOLATILE AtomicAdjustGccImpl::Integer &var) {
59 return __atomic_load_n(&var, __ATOMIC_SEQ_CST);
65INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
66set_ptr(TVOLATILE AtomicAdjustGccImpl::Pointer &var,
67 AtomicAdjustGccImpl::Pointer new_value) {
69 return __atomic_exchange_n(&var, new_value, __ATOMIC_SEQ_CST);
78INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
79get_ptr(
const TVOLATILE AtomicAdjustGccImpl::Pointer &var) {
80 return __atomic_load_n(&var, __ATOMIC_SEQ_CST);
96INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
97compare_and_exchange(TVOLATILE AtomicAdjustGccImpl::Integer &mem,
98 AtomicAdjustGccImpl::Integer old_value,
99 AtomicAdjustGccImpl::Integer new_value) {
101 __atomic_compare_exchange_n(&mem, &old_value, new_value,
false,
102 __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
111INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
112compare_and_exchange_ptr(TVOLATILE AtomicAdjustGccImpl::Pointer &mem,
113 AtomicAdjustGccImpl::Pointer old_value,
114 AtomicAdjustGccImpl::Pointer new_value) {
116 __atomic_compare_exchange_n(&mem, &old_value, new_value,
false,
117 __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);