1
2 #ifndef __ATOMIC_H__
3 #define __ATOMIC_H__
4
5 static INLINE uint64_t
atomic_swap_uint32(volatile uint32_t * dst,uint32_t newval)6 atomic_swap_uint32(volatile uint32_t *dst, uint32_t newval)
7 {
8 asm volatile("lock; xchgl %0, %1;"
9 : "+m" (*dst), "+r" (newval));
10
11 return newval;
12 }
13
14 static INLINE uint64_t
atomic_swap_uint64(volatile uint64_t * dst,uint64_t newval)15 atomic_swap_uint64(volatile uint64_t *dst, uint64_t newval)
16 {
17 asm volatile("lock; xchgq %0, %1;"
18 : "+m" (*dst), "+r" (newval));
19
20 return newval;
21 }
22
23 static inline void
atomic_set_uint64(volatile uint64_t * dst,uint64_t newval)24 atomic_set_uint64(volatile uint64_t *dst, uint64_t newval)
25 {
26 *dst = newval;
27 }
28
29 #endif /* __ATOMIC_H__ */
30
31