blob: 2ed8275fd07d376436a0670bfb75df8588375d7e [file] [log] [blame]
#pragma once
#include <stdatomic.h>
// TODO(kulakowski) This is a temporary shim to separate the
// bespoke=>C11 atomic conversion from the rewrite of the two
// different CAS styles (return bool and pointer out vs. return old
// value).
static inline int a_cas_shim(_Atomic(int)* p, int t, int s) {
atomic_compare_exchange_strong(p, &t, s);
return t;
}
#if defined(__x86_64__)
static inline void a_spin(void) {
__asm__ __volatile__("pause"
:
:
: "memory");
}
#else
#define a_spin() atomic_thread_fence(memory_order_seq_cst)
#endif