criu/include/atomic.h
Cyrill Gorcunov fd7543e6e5 Gather futex helpers into lock.h
Based-on-patch-from: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Andrey Vagin <avagin@openvz.org>
2011-12-26 23:54:18 +04:00

44 lines
836 B
C

#ifndef ATOMIC_H__
#define ATOMIC_H__
#include "types.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__ */