Go to the source code of this file.
Defines | |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG64 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_XCHG64 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_XCHG32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_XCHG16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_XCHG8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_XCHG |
#define | l4util_gen_allop(args...) |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG32_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG64_RES |
#define | l4util_genop(bit, mod, op1, opname, opchar) |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_CMPXCHG_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD64 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB64 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND64 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR64 |
#define | l4util_genop(bit, mod, op1, opname) |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD32_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD64_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB32_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB64_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND32_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND64_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR32_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR64_RES |
#define | l4util_genop(bit, mod, op1, opname, opchar) |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC64 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC64 |
#define | l4util_genop(bit, mod, op1, opname) |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC32_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC64_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC32_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC64_RES |
#define | l4util_genop(bit, mod, op1, opname, opchar) |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC |
Functions | |
l4_uint64_t | l4util_xchg64 (volatile l4_uint64_t *dest, l4_uint64_t val) |
l4_uint64_t | l4util_cmpxchg64_res (volatile l4_uint64_t *dest, l4_uint64_t cmp_val, l4_uint64_t new_val) |
void | l4util_add64 (volatile l4_uint64_t *dest, l4_uint64_t val) |
void | l4util_sub64 (volatile l4_uint64_t *dest, l4_uint64_t val) |
void | l4util_and64 (volatile l4_uint64_t *dest, l4_uint64_t val) |
void | l4util_or64 (volatile l4_uint64_t *dest, l4_uint64_t val) |
l4_uint64_t | l4util_add64_res (volatile l4_uint64_t *dest, l4_uint64_t val) |
l4_uint64_t | l4util_sub64_res (volatile l4_uint64_t *dest, l4_uint64_t val) |
l4_uint64_t | l4util_and64_res (volatile l4_uint64_t *dest, l4_uint64_t val) |
l4_uint64_t | l4util_or64_res (volatile l4_uint64_t *dest, l4_uint64_t val) |
void | l4util_inc64 (volatile l4_uint64_t *dest) |
void | l4util_dec64 (volatile l4_uint64_t *dest) |
l4_uint64_t | l4util_inc64_res (volatile l4_uint64_t *dest) |
l4_uint64_t | l4util_dec64_res (volatile l4_uint64_t *dest) |
int | l4util_cmpxchg64 (volatile l4_uint64_t *dest, l4_uint64_t cmp_val, l4_uint64_t new_val) |
Atomic compare and exchange (64 bit version). | |
int | l4util_cmpxchg32 (volatile l4_uint32_t *dest, l4_uint32_t cmp_val, l4_uint32_t new_val) |
Atomic compare and exchange (32 bit version). | |
int | l4util_cmpxchg16 (volatile l4_uint16_t *dest, l4_uint16_t cmp_val, l4_uint16_t new_val) |
Atomic compare and exchange (16 bit version). | |
int | l4util_cmpxchg8 (volatile l4_uint8_t *dest, l4_uint8_t cmp_val, l4_uint8_t new_val) |
Atomic compare and exchange (8 bit version). | |
int | l4util_cmpxchg (volatile l4_umword_t *dest, l4_umword_t cmp_val, l4_umword_t new_val) |
Atomic compare and exchange (machine wide fields). | |
l4_uint32_t | l4util_xchg32 (volatile l4_uint32_t *dest, l4_uint32_t val) |
Atomic exchange (32 bit version). | |
l4_uint16_t | l4util_xchg16 (volatile l4_uint16_t *dest, l4_uint16_t val) |
Atomic exchange (16 bit version). | |
l4_uint8_t | l4util_xchg8 (volatile l4_uint8_t *dest, l4_uint8_t val) |
Atomic exchange (8 bit version). | |
l4_umword_t | l4util_xchg (volatile l4_umword_t *dest, l4_umword_t val) |
Atomic exchange (machine wide fields). | |
l4_uint8_t | l4util_cmpxchg8_res (volatile l4_uint8_t *dest, l4_uint8_t cmp_val, l4_uint8_t new_val) |
l4util_genop (16,"w","", cmpxchg, cmpxchg) l4util_genop(32 | |
cmpxchg | l4util_genop (64,"q","", cmpxchg, cmpxchg) inline l4_umword_t l4util_cmpxchg_res(volatile l4_umword_t *dest |
Variables | |
l | |
cmpxchg | |
cmpxchg l4_umword_t | cmp_val |
Definition in file ARCH-amd64/atomic_arch.h.
#define l4util_gen_allop | ( | args... | ) |
Value:
l4util_genop( 8,"b", "", args) \ l4util_genop(16,"w", "", args) \ l4util_genop(32,"l", "", args) \ l4util_genop(64,"q", "", args)
Definition at line 263 of file ARCH-amd64/atomic_arch.h.
#define l4util_genop | ( | bit, | |||
mod, | |||||
op1, | |||||
opname, | |||||
opchar | ) |
Value:
L4_INLINE l4_uint##bit##_t \ l4util_##opname##bit##_res(volatile l4_uint##bit##_t* dest, \ l4_uint##bit##_t cmp_val, \ l4_uint##bit##_t new_val) \ { \ l4_uint##bit##_t old_val; \ __asm__ __volatile__ \ ( \ #opname mod " %"op1"1,%3 \n\t" \ : \ "=a"(old_val) \ : \ "r"(new_val), "a"(cmp_val), "m" (*dest) \ : \ "memory" \ ); \ return old_val; \ }
Definition at line 275 of file ARCH-amd64/atomic_arch.h.
#define l4util_genop | ( | bit, | |||
mod, | |||||
op1, | |||||
opname | ) |
Value:
L4_INLINE void \ l4util_##opname##bit(volatile l4_uint##bit##_t* dest, l4_uint##bit##_t val) \ { \ __asm__ __volatile__ \ ( \ #opname mod " %1,%0 \n\t" \ : \ : \ "m" (*dest), "ir" (val) \ : \ "memory" \ ); \ }
Definition at line 275 of file ARCH-amd64/atomic_arch.h.
#define l4util_genop | ( | bit, | |||
mod, | |||||
op1, | |||||
opname, | |||||
opchar | ) |
Value:
L4_INLINE l4_uint##bit##_t \ l4util_##opname##bit##_res(volatile l4_uint##bit##_t* dest, \ l4_uint##bit##_t val) \ { \ l4_uint##bit##_t res, old; \ \ do \ { \ old = *dest; \ res = old opchar val; \ } \ while (!l4util_cmpxchg##bit(dest, old, res)); \ \ return res; \ }
Definition at line 275 of file ARCH-amd64/atomic_arch.h.
#define l4util_genop | ( | bit, | |||
mod, | |||||
op1, | |||||
opname | ) |
Value:
L4_INLINE void \ l4util_##opname##bit(volatile l4_uint##bit##_t* dest) \ { \ __asm__ __volatile__ \ ( \ #opname mod " %0 \n\t" \ : \ : \ "m" (*dest) \ : \ "memory" \ ); \ }
Definition at line 275 of file ARCH-amd64/atomic_arch.h.
#define l4util_genop | ( | bit, | |||
mod, | |||||
op1, | |||||
opname, | |||||
opchar | ) |
Value:
L4_INLINE l4_uint##bit##_t \ l4util_##opname##bit##_res(volatile l4_uint##bit##_t* dest) \ { \ l4_uint##bit##_t res, old; \ \ do \ { \ res = *dest; \ old = res opchar; \ } \ while (!l4util_cmpxchg##bit(dest, old, res)); \ \ return res; \ }
Definition at line 275 of file ARCH-amd64/atomic_arch.h.