Repository URL to install this package:
|
Version:
0.6.1 ▾
|
uint32_t
atomic_cas(volatile uint32_t *mem, uint32_t with, uint32_t cmp)
{
uint32_t prev;
__asm__ volatile ("lock; cmpxchgl %1, %2"
: "=a" (prev)
: "r" (with), "m" (*(mem)), "0"(cmp)
: "memory", "cc");
return prev;
}
#define trylock(lock) ((lock) == 1 && atomic_cas(&lock, 0, 1))
#define unlock(lock) (lock) = 1