21 INLINE
void AtomicAdjustGccImpl::
22 inc(TVOLATILE AtomicAdjustGccImpl::Integer &var) {
23 __atomic_fetch_add(&var, 1, __ATOMIC_SEQ_CST);
33 INLINE
bool AtomicAdjustGccImpl::
34 dec(TVOLATILE AtomicAdjustGccImpl::Integer &var) {
35 return (__atomic_sub_fetch(&var, 1, __ATOMIC_SEQ_CST) != 0);
44 INLINE
void AtomicAdjustGccImpl::
45 add(TVOLATILE AtomicAdjustGccImpl::Integer &var,
46 AtomicAdjustGccImpl::Integer delta) {
47 __atomic_fetch_add(&var, delta, __ATOMIC_SEQ_CST);
56 INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
57 set(TVOLATILE AtomicAdjustGccImpl::Integer &var,
58 AtomicAdjustGccImpl::Integer new_value) {
60 return __atomic_exchange_n(&var, new_value, __ATOMIC_SEQ_CST);
72 INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
73 get(
const TVOLATILE AtomicAdjustGccImpl::Integer &var) {
74 return __atomic_load_n(&var, __ATOMIC_SEQ_CST);
83 INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
84 set_ptr(TVOLATILE AtomicAdjustGccImpl::Pointer &var,
85 AtomicAdjustGccImpl::Pointer new_value) {
87 return __atomic_exchange_n(&var, new_value, __ATOMIC_SEQ_CST);
99 INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
100 get_ptr(
const TVOLATILE AtomicAdjustGccImpl::Pointer &var) {
101 return __atomic_load_n(&var, __ATOMIC_SEQ_CST);
123 INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
124 compare_and_exchange(TVOLATILE AtomicAdjustGccImpl::Integer &mem,
125 AtomicAdjustGccImpl::Integer old_value,
126 AtomicAdjustGccImpl::Integer new_value) {
128 __atomic_compare_exchange_n(&mem, &old_value, new_value,
false,
129 __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
140 INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
141 compare_and_exchange_ptr(TVOLATILE AtomicAdjustGccImpl::Pointer &mem,
142 AtomicAdjustGccImpl::Pointer old_value,
143 AtomicAdjustGccImpl::Pointer new_value) {
145 __atomic_compare_exchange_n(&mem, &old_value, new_value,
false,
146 __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);