17 INLINE
void AtomicAdjustGccImpl::
18 inc(TVOLATILE AtomicAdjustGccImpl::Integer &var) {
19 __atomic_fetch_add(&var, 1, __ATOMIC_SEQ_CST);
26 INLINE
bool AtomicAdjustGccImpl::
27 dec(TVOLATILE AtomicAdjustGccImpl::Integer &var) {
28 return (__atomic_sub_fetch(&var, 1, __ATOMIC_SEQ_CST) != 0);
35 INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
36 add(TVOLATILE AtomicAdjustGccImpl::Integer &var,
37 AtomicAdjustGccImpl::Integer delta) {
38 return __atomic_add_fetch(&var, delta, __ATOMIC_SEQ_CST);
44 INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
45 set(TVOLATILE AtomicAdjustGccImpl::Integer &var,
46 AtomicAdjustGccImpl::Integer new_value) {
48 return __atomic_exchange_n(&var, new_value, __ATOMIC_SEQ_CST);
57 INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
58 get(
const TVOLATILE AtomicAdjustGccImpl::Integer &var) {
59 return __atomic_load_n(&var, __ATOMIC_SEQ_CST);
65 INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
66 set_ptr(TVOLATILE AtomicAdjustGccImpl::Pointer &var,
67 AtomicAdjustGccImpl::Pointer new_value) {
69 return __atomic_exchange_n(&var, new_value, __ATOMIC_SEQ_CST);
78 INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
79 get_ptr(
const TVOLATILE AtomicAdjustGccImpl::Pointer &var) {
80 return __atomic_load_n(&var, __ATOMIC_SEQ_CST);
96 INLINE AtomicAdjustGccImpl::Integer AtomicAdjustGccImpl::
97 compare_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);
111 INLINE AtomicAdjustGccImpl::Pointer AtomicAdjustGccImpl::
112 compare_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);