CS350 COS
COS
Loading...
Searching...
No Matches
atomic.h
Go to the documentation of this file.
1
2#ifndef __ATOMIC_H__
3#define __ATOMIC_H__
4
5static INLINE uint64_t
6atomic_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
14static INLINE uint64_t
15atomic_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
23static inline void
24atomic_set_uint64(volatile uint64_t *dst, uint64_t newval)
25{
26 *dst = newval;
27}
28
29#endif /* __ATOMIC_H__ */
30
static INLINE uint64_t atomic_swap_uint32(volatile uint32_t *dst, uint32_t newval)
Definition: atomic.h:6
static INLINE uint64_t atomic_swap_uint64(volatile uint64_t *dst, uint64_t newval)
Definition: atomic.h:15
static void atomic_set_uint64(volatile uint64_t *dst, uint64_t newval)
Definition: atomic.h:24
#define INLINE
Definition: cdefs.h:10
unsigned int uint32_t
Definition: types.h:12
unsigned long uint64_t
Definition: types.h:13