18 #ifndef FOEDUS_ASSORTED_RAW_ATOMICS_HPP_
19 #define FOEDUS_ASSORTED_RAW_ATOMICS_HPP_
51 return ::__atomic_compare_exchange_n(
75 return ::__atomic_compare_exchange_n(
101 const uint64_t *old_value,
102 const uint64_t *new_value);
110 const uint64_t *old_value,
111 const uint64_t *new_value) {
112 if (ptr[0] != old_value[0] || ptr[1] != old_value[1]) {
129 template <
typename T>
131 return ::__atomic_exchange_n(target, desired, __ATOMIC_SEQ_CST);
149 template <
typename T>
151 return ::__atomic_fetch_add(target, addendum, __ATOMIC_SEQ_CST);
163 template <
typename T>
165 return ::__atomic_fetch_and(target, operand, __ATOMIC_SEQ_CST);
173 template <
typename T>
175 return ::__atomic_fetch_or(target, operand, __ATOMIC_SEQ_CST);
183 template <
typename T>
185 return ::__atomic_fetch_xor(target, operand, __ATOMIC_SEQ_CST);
190 #endif // FOEDUS_ASSORTED_RAW_ATOMICS_HPP_
T raw_atomic_exchange(T *target, T desired)
Atomic Swap for raw primitive types rather than std::atomic.
Root package of FOEDUS (Fast Optimistic Engine for Data Unification Services).
T raw_atomic_fetch_and_bitwise_and(T *target, T operand)
Atomic fetch-bitwise-and for raw primitive types rather than std::atomic.
T raw_atomic_fetch_and_bitwise_or(T *target, T operand)
Atomic fetch-bitwise-or for raw primitive types rather than std::atomic.
T raw_atomic_fetch_and_bitwise_xor(T *target, T operand)
Atomic fetch-bitwise-xor for raw primitive types rather than std::atomic
T raw_atomic_fetch_add(T *target, T addendum)
Atomic fetch-add for raw primitive types rather than std::atomic.
bool raw_atomic_compare_exchange_strong(T *target, T *expected, T desired)
Atomic CAS.
bool raw_atomic_compare_exchange_weak(T *target, T *expected, T desired)
Weak version of raw_atomic_compare_exchange_strong().
bool raw_atomic_compare_exchange_strong_uint128(uint64_t *ptr, const uint64_t *old_value, const uint64_t *new_value)
Atomic 128-bit CAS, which is not in the standard yet.
bool raw_atomic_compare_exchange_weak_uint128(uint64_t *ptr, const uint64_t *old_value, const uint64_t *new_value)
Weak version of raw_atomic_compare_exchange_strong_uint128().