26 #ifndef MD_ATOMIC_HPP_
27 #define MD_ATOMIC_HPP_ 1
46 inline uint32_t
compare_and_swap(
volatile uint32_t *p, uint32_t oldval, uint32_t newval)
50 __asm__ __volatile__ (
"lock; cmpxchgl %2, %1"
51 :
"=a" (result),
"=m" (*p)
52 :
"r" (newval),
"m" (*p),
"0" (oldval)
68 inline uint64_t
compare_and_swap(
volatile uint64_t *p, uint64_t oldval, uint64_t newval)
72 __asm__ __volatile__ (
"lock; cmpxchgq %2, %1"
73 :
"=a" (result),
"=m" (*p)
74 :
"r" (newval),
"m" (*p),
"0" (oldval)
86 __asm__ __volatile__ (
"mfence" : : :
"memory");
95 __asm__ __volatile__ (
"" : : :
"memory");
106 __asm__ __volatile__ (
"" : : :
"memory");
111 #endif // MD_ATOMIC_HPP_
uint32_t compare_and_swap(volatile uint32_t *p, uint32_t oldval, uint32_t newval)
An atomic compare and swap for 32-bit integer values.
void memory_barrier(void)
A memory barrier.
void write_memory_barrier(void)
A write memory barrier.
void instruction_barrier(void)
An instruction barrier.