Main Page   File List  

Atomic Instructions


Files

file  ARCH-amd64/atomic_arch.h
 i386 atomic operations
file  ARCH-x86/atomic_arch.h
 i386 atomic operations
file  atomic.h
 atomic operations header and generic implementations

Atomic compare and exchange with result

l4_uint8_t l4util_cmpxchg8_res (volatile l4_uint8_t *dest, l4_uint8_t cmp_val, l4_uint8_t new_val)
l4_uint16_t l4util_cmpxchg16_res (volatile l4_uint16_t *dest, l4_uint16_t cmp_val, l4_uint16_t new_val)
l4_uint32_t l4util_cmpxchg32_res (volatile l4_uint32_t *dest, l4_uint32_t cmp_val, l4_uint32_t new_val)
l4_umword_t l4util_cmpxchg_res (volatile l4_umword_t *dest, l4_umword_t cmp_val, l4_umword_t new_val)

Atomic add/sub/and/or (8,16,32 bit version) without result

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)

Atomic add/sub/and/or operations (8,16,32 bit) with result

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)

Atomic inc/dec (8,16,32 bit) without result

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)

Atomic inc/dec (8,16,32 bit) with result

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)

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).
void l4util_atomic_add (volatile long *dest, long val)
 Atomic add.
void l4util_atomic_inc (volatile long *dest)
 Atomic increment.

Function Documentation

int l4util_cmpxchg64 ( volatile l4_uint64_t *  dest,
l4_uint64_t  cmp_val,
l4_uint64_t  new_val 
) [inline]

Atomic compare and exchange (64 bit version).

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest
Returns:
0 if comparison failed, 1 otherwise
Compare the value in dest with cmp_val, if equal set dest to new_val

Definition at line 77 of file ARCH-amd64/atomic_arch.h.

Referenced by l4util_cmpxchg().

int l4util_cmpxchg32 ( volatile l4_uint32_t *  dest,
l4_uint32_t  cmp_val,
l4_uint32_t  new_val 
) [inline]

Atomic compare and exchange (32 bit version).

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest
Returns:
0 if comparison failed, !=0 otherwise
Compare the value in dest with cmp_val, if equal set dest to new_val

Definition at line 101 of file ARCH-amd64/atomic_arch.h.

Referenced by l4util_cmpxchg().

int l4util_cmpxchg16 ( volatile l4_uint16_t *  dest,
l4_uint16_t  cmp_val,
l4_uint16_t  new_val 
) [inline]

Atomic compare and exchange (16 bit version).

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest
Returns:
0 if comparison failed, !=0 otherwise
Compare the value in dest with cmp_val, if equal set dest to new_val

Definition at line 125 of file ARCH-amd64/atomic_arch.h.

int l4util_cmpxchg8 ( volatile l4_uint8_t *  dest,
l4_uint8_t  cmp_val,
l4_uint8_t  new_val 
) [inline]

Atomic compare and exchange (8 bit version).

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest
Returns:
0 if comparison failed, !=0 otherwise
Compare the value in dest with cmp_val, if equal set dest to new_val

Definition at line 149 of file ARCH-amd64/atomic_arch.h.

int l4util_cmpxchg ( volatile l4_umword_t *  dest,
l4_umword_t  cmp_val,
l4_umword_t  new_val 
) [inline]

Atomic compare and exchange (machine wide fields).

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest
Returns:
0 if comparison failed, 1 otherwise
Compare the value in dest with cmp_val, if equal set dest to new_val

Definition at line 172 of file ARCH-amd64/atomic_arch.h.

References l4util_cmpxchg32(), and l4util_cmpxchg64().

l4_uint32_t l4util_xchg32 ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Atomic exchange (32 bit version).

Parameters:
dest destination operand
val new value for dest
Returns:
old value at destination

Definition at line 201 of file ARCH-amd64/atomic_arch.h.

Referenced by l4util_xchg().

l4_uint16_t l4util_xchg16 ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Atomic exchange (16 bit version).

Parameters:
dest destination operand
val new value for dest
Returns:
old value at destination

Definition at line 220 of file ARCH-amd64/atomic_arch.h.

l4_uint8_t l4util_xchg8 ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Atomic exchange (8 bit version).

Parameters:
dest destination operand
val new value for dest
Returns:
old value at destination

Definition at line 239 of file ARCH-amd64/atomic_arch.h.

l4_umword_t l4util_xchg ( volatile l4_umword_t *  dest,
l4_umword_t  val 
) [inline]

Atomic exchange (machine wide fields).

Parameters:
dest destination operand
val new value for dest
Returns:
old value at destination

Definition at line 258 of file ARCH-amd64/atomic_arch.h.

References l4util_xchg32().

l4_uint8_t l4util_cmpxchg8_res ( volatile l4_uint8_t *  dest,
l4_uint8_t  cmp_val,
l4_uint8_t  new_val 
) [inline]

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest

Definition at line 294 of file ARCH-amd64/atomic_arch.h.

void l4util_add8 ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 290 of file ARCH-x86/atomic_arch.h.

l4_uint8_t l4util_add8_res ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 325 of file ARCH-x86/atomic_arch.h.

void l4util_inc8 ( volatile l4_uint8_t *  dest  )  [inline]

Parameters:
dest destination operand

Definition at line 352 of file ARCH-x86/atomic_arch.h.

l4_uint8_t l4util_inc8_res ( volatile l4_uint8_t *  dest  )  [inline]

Parameters:
dest destination operand
Returns:
res

Definition at line 378 of file ARCH-x86/atomic_arch.h.

void l4util_atomic_add ( volatile long *  dest,
long  val 
) [inline]

Atomic add.

Parameters:
dest destination operand
val value to add

Definition at line 387 of file ARCH-x86/atomic_arch.h.

void l4util_atomic_inc ( volatile long *  dest  )  [inline]

Atomic increment.

Parameters:
dest destination operand

Definition at line 396 of file ARCH-x86/atomic_arch.h.

l4_uint16_t l4util_cmpxchg16_res ( volatile l4_uint16_t *  dest,
l4_uint16_t  cmp_val,
l4_uint16_t  new_val 
) [inline]

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest

l4_uint32_t l4util_cmpxchg32_res ( volatile l4_uint32_t *  dest,
l4_uint32_t  cmp_val,
l4_uint32_t  new_val 
) [inline]

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest

Referenced by l4util_cmpxchg_res().

l4_umword_t l4util_cmpxchg_res ( volatile l4_umword_t *  dest,
l4_umword_t  cmp_val,
l4_umword_t  new_val 
) [inline]

Parameters:
dest destination operand
cmp_val compare value
new_val new value for dest

Definition at line 255 of file ARCH-x86/atomic_arch.h.

References l4util_cmpxchg32_res().

void l4util_add16 ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 290 of file ARCH-x86/atomic_arch.h.

void l4util_add32 ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 290 of file ARCH-x86/atomic_arch.h.

void l4util_sub8 ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 291 of file ARCH-x86/atomic_arch.h.

void l4util_sub16 ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 291 of file ARCH-x86/atomic_arch.h.

void l4util_sub32 ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 291 of file ARCH-x86/atomic_arch.h.

void l4util_and8 ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 292 of file ARCH-x86/atomic_arch.h.

void l4util_and16 ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 292 of file ARCH-x86/atomic_arch.h.

void l4util_and32 ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 292 of file ARCH-x86/atomic_arch.h.

void l4util_or8 ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 293 of file ARCH-x86/atomic_arch.h.

void l4util_or16 ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 293 of file ARCH-x86/atomic_arch.h.

void l4util_or32 ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or

Definition at line 293 of file ARCH-x86/atomic_arch.h.

l4_uint16_t l4util_add16_res ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 325 of file ARCH-x86/atomic_arch.h.

l4_uint32_t l4util_add32_res ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 325 of file ARCH-x86/atomic_arch.h.

l4_uint8_t l4util_sub8_res ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 326 of file ARCH-x86/atomic_arch.h.

l4_uint16_t l4util_sub16_res ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 326 of file ARCH-x86/atomic_arch.h.

l4_uint32_t l4util_sub32_res ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 326 of file ARCH-x86/atomic_arch.h.

l4_uint8_t l4util_and8_res ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 327 of file ARCH-x86/atomic_arch.h.

l4_uint16_t l4util_and16_res ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 327 of file ARCH-x86/atomic_arch.h.

l4_uint32_t l4util_and32_res ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 327 of file ARCH-x86/atomic_arch.h.

l4_uint8_t l4util_or8_res ( volatile l4_uint8_t *  dest,
l4_uint8_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 328 of file ARCH-x86/atomic_arch.h.

l4_uint16_t l4util_or16_res ( volatile l4_uint16_t *  dest,
l4_uint16_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 328 of file ARCH-x86/atomic_arch.h.

l4_uint32_t l4util_or32_res ( volatile l4_uint32_t *  dest,
l4_uint32_t  val 
) [inline]

Parameters:
dest destination operand
val value to add/sub/and/or
Returns:
res

Definition at line 328 of file ARCH-x86/atomic_arch.h.

void l4util_inc16 ( volatile l4_uint16_t *  dest  )  [inline]

Parameters:
dest destination operand

Definition at line 352 of file ARCH-x86/atomic_arch.h.

void l4util_inc32 ( volatile l4_uint32_t *  dest  )  [inline]

Parameters:
dest destination operand

Definition at line 352 of file ARCH-x86/atomic_arch.h.

void l4util_dec8 ( volatile l4_uint8_t *  dest  )  [inline]

Parameters:
dest destination operand

Definition at line 353 of file ARCH-x86/atomic_arch.h.

void l4util_dec16 ( volatile l4_uint16_t *  dest  )  [inline]

Parameters:
dest destination operand

Definition at line 353 of file ARCH-x86/atomic_arch.h.

void l4util_dec32 ( volatile l4_uint32_t *  dest  )  [inline]

Parameters:
dest destination operand

Definition at line 353 of file ARCH-x86/atomic_arch.h.

l4_uint16_t l4util_inc16_res ( volatile l4_uint16_t *  dest  )  [inline]

Parameters:
dest destination operand
Returns:
res

Definition at line 378 of file ARCH-x86/atomic_arch.h.

l4_uint32_t l4util_inc32_res ( volatile l4_uint32_t *  dest  )  [inline]

Parameters:
dest destination operand
Returns:
res

Definition at line 378 of file ARCH-x86/atomic_arch.h.

l4_uint8_t l4util_dec8_res ( volatile l4_uint8_t *  dest  )  [inline]

Parameters:
dest destination operand
Returns:
res

Definition at line 379 of file ARCH-x86/atomic_arch.h.

l4_uint16_t l4util_dec16_res ( volatile l4_uint16_t *  dest  )  [inline]

Parameters:
dest destination operand
Returns:
res

Definition at line 379 of file ARCH-x86/atomic_arch.h.

l4_uint32_t l4util_dec32_res ( volatile l4_uint32_t *  dest  )  [inline]

Parameters:
dest destination operand
Returns:
res

Definition at line 379 of file ARCH-x86/atomic_arch.h.


L4 Utilities, part of DROPS  © 2000-2003