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_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_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_SUB8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_AND32 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR32 |
#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_SUB8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_SUB32_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_OR8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_OR32_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_DEC8 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC16 |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC32 |
#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_DEC8_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC16_RES |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_DEC32_RES |
#define | l4util_genop(bit, mod, op1, opname, opchar) |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_ADD |
#define | __L4UTIL_ATOMIC_HAVE_ARCH_INC |
Functions | |
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 | |
l4_umword_t | l4util_cmpxchg_res (volatile l4_umword_t *dest, l4_umword_t cmp_val, l4_umword_t new_val) |
void | l4util_add8 (volatile l4_uint8_t *dest, l4_uint8_t val) |
void | l4util_add16 (volatile l4_uint16_t *dest, l4_uint16_t val) |
void | l4util_add32 (volatile l4_uint32_t *dest, l4_uint32_t val) |
void | l4util_sub8 (volatile l4_uint8_t *dest, l4_uint8_t val) |
void | l4util_sub16 (volatile l4_uint16_t *dest, l4_uint16_t val) |
void | l4util_sub32 (volatile l4_uint32_t *dest, l4_uint32_t val) |
void | l4util_and8 (volatile l4_uint8_t *dest, l4_uint8_t val) |
void | l4util_and16 (volatile l4_uint16_t *dest, l4_uint16_t val) |
void | l4util_and32 (volatile l4_uint32_t *dest, l4_uint32_t val) |
void | l4util_or8 (volatile l4_uint8_t *dest, l4_uint8_t val) |
void | l4util_or16 (volatile l4_uint16_t *dest, l4_uint16_t val) |
void | l4util_or32 (volatile l4_uint32_t *dest, l4_uint32_t val) |
l4_uint8_t | l4util_add8_res (volatile l4_uint8_t *dest, l4_uint8_t val) |
l4_uint16_t | l4util_add16_res (volatile l4_uint16_t *dest, l4_uint16_t val) |
l4_uint32_t | l4util_add32_res (volatile l4_uint32_t *dest, l4_uint32_t val) |
l4_uint8_t | l4util_sub8_res (volatile l4_uint8_t *dest, l4_uint8_t val) |
l4_uint16_t | l4util_sub16_res (volatile l4_uint16_t *dest, l4_uint16_t val) |
l4_uint32_t | l4util_sub32_res (volatile l4_uint32_t *dest, l4_uint32_t val) |
l4_uint8_t | l4util_and8_res (volatile l4_uint8_t *dest, l4_uint8_t val) |
l4_uint16_t | l4util_and16_res (volatile l4_uint16_t *dest, l4_uint16_t val) |
l4_uint32_t | l4util_and32_res (volatile l4_uint32_t *dest, l4_uint32_t val) |
l4_uint8_t | l4util_or8_res (volatile l4_uint8_t *dest, l4_uint8_t val) |
l4_uint16_t | l4util_or16_res (volatile l4_uint16_t *dest, l4_uint16_t val) |
l4_uint32_t | l4util_or32_res (volatile l4_uint32_t *dest, l4_uint32_t val) |
void | l4util_inc8 (volatile l4_uint8_t *dest) |
void | l4util_inc16 (volatile l4_uint16_t *dest) |
void | l4util_inc32 (volatile l4_uint32_t *dest) |
void | l4util_dec8 (volatile l4_uint8_t *dest) |
void | l4util_dec16 (volatile l4_uint16_t *dest) |
void | l4util_dec32 (volatile l4_uint32_t *dest) |
l4_uint8_t | l4util_inc8_res (volatile l4_uint8_t *dest) |
l4_uint16_t | l4util_inc16_res (volatile l4_uint16_t *dest) |
l4_uint32_t | l4util_inc32_res (volatile l4_uint32_t *dest) |
l4_uint8_t | l4util_dec8_res (volatile l4_uint8_t *dest) |
l4_uint16_t | l4util_dec16_res (volatile l4_uint16_t *dest) |
l4_uint32_t | l4util_dec32_res (volatile l4_uint32_t *dest) |
void | l4util_atomic_add (volatile long *dest, long val) |
Atomic add. | |
void | l4util_atomic_inc (volatile long *dest) |
Atomic increment. | |
Variables | |
l | |
cmpxchg |
Definition in file ARCH-x86/atomic_arch.h.
#define l4util_gen_allop | ( | args... | ) |
Value:
l4util_genop( 8,"b", "", args) \ l4util_genop(16,"w", "", args) \ l4util_genop(32,"l", "", args)
Definition at line 222 of file ARCH-x86/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 363 of file ARCH-x86/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 363 of file ARCH-x86/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 363 of file ARCH-x86/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 363 of file ARCH-x86/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 363 of file ARCH-x86/atomic_arch.h.