mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-19 01:26:22 +00:00
42 lines
816 B
C
42 lines
816 B
C
#ifndef ATOMIC_H__
|
|
#define ATOMIC_H__
|
|
|
|
#define atomic_set(mem, v) \
|
|
({ \
|
|
asm volatile ("lock xchg %0, %1\n" \
|
|
: "+r" (v), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
})
|
|
|
|
#define atomic_get(mem) \
|
|
({ \
|
|
u32 ret__ = 0; \
|
|
asm volatile ("lock xadd %0, %1\n" \
|
|
: "+r" (ret__), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
ret__; \
|
|
})
|
|
|
|
#define atomic_inc(mem) \
|
|
({ \
|
|
u32 ret__ = 1; \
|
|
asm volatile ("lock xadd %0, %1\n" \
|
|
: "+r" (ret__), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
ret__; \
|
|
})
|
|
|
|
#define atomic_dec(mem) \
|
|
({ \
|
|
u32 ret__ = -1; \
|
|
asm volatile ("lock xadd %0, %1\n" \
|
|
: "+r" (ret__), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
ret__; \
|
|
})
|
|
|
|
#endif /* ATOMIC_H__ */
|