e32atomics.h File Reference

Detailed Description

General purpose atomic operations and utility functions All functions in this header are available on both user and kernel side.

Atomic operations: __e32_atomic_xxx_yyy8() should be used for 8 bit atomic variables __e32_atomic_xxx_yyy16() should be used for 16 bit atomic variables __e32_atomic_xxx_yyy32() should be used for 32 bit atomic variables __e32_atomic_xxx_yyy64() should be used for 64 bit atomic variables __e32_atomic_xxx_yyy_ptr() should be used for atomic updates to pointers

xxx specifies the operation performed load read memory atomically store write memory atomically swp write to a memory location and return the original value of the memory location add add a value to a memory location and return the original value of the memory location and bitwise AND a value with a memory location and return the original value of the memory location ior bitwise OR a value with a memory location and return the original value of the memory location xor bitwise XOR a value with a memory location and return the original value of the memory location axo atomic { orig_v = *p; *p = (orig_v & u) ^ v; } return orig_v; cas if the value of a memory location matches a specified expected value, write a specified new value and return TRUE, otherwise update the expected value with the actual value seen and return FALSE. tau if the value of a memory location is >= a specified threshold, considered as an unsigned integer, add a specified value to it otherwise add a different specified value to it; return the original value of the memory location tas if the value of a memory location is >= a specified threshold, considered as a signed integer, add a specified value to it otherwise add a different specified value to it; return the original value of the memory location

yyy specifies the memory ordering: rlx = relaxed memory ordering there is no guarantee on the order in which the atomic operation is observed relative to preceding or following memory accesses acq = acquire semantics the atomic operation is guaranteed to be observed before any following memory accesses rel = release semantics the atomic operation is guaranteed to be observed after any preceding memory accesses ord = fully ordered the atomic operation is guaranteed to be observed after any preceding memory accesses and before any following memory accesses

Note that these operations should only be used on normal memory regions since they are implemented in terms of LDREX/STREX and so multiple reads can occur before the operation completes. Also __e32_atomic_load_yyy64() can't be used on read-only memory regions since it uses LDREXD/STREXD to guarantee atomicity. Atomic operations may only be used on naturally aligned memory (i.e. *16() operations on an even address, *32() operations on an address which is a multiple of 4 and *64() operations on an address which is a multiple of 8). This applies even if you have (unwisely) decided to turn off alignment checking.

Barrier operations: Two barrier functions are provided: __e32_memory_barrier() - this ensures all preceding explicit memory accesses are observed before any following explicit memory accesses. Equates to the ARM DMB instruction. __e32_io_completion_barrier() - this ensures all preceding explicit memory accesses complete before any following instructions execute. For example, it ensures that writes to I/O devices have actually occurred before execution continues. Equates to the ARM DSB instruction.

Utility functions: __e32_find_ms1_32 Return bit position of most significant 1 in a 32 bit argument, or -1 if the argument is zero. __e32_find_ls1_32 Return bit position of least significant 1 in a 32 bit argument, or -1 if the argument is zero. __e32_bit_count_32 Return the count of bits set to 1 in a 32 bit argument. __e32_find_ms1_64 Return bit position of most significant 1 in a 64 bit argument, or -1 if the argument is zero. __e32_find_ls1_64 Return bit position of least significant 1 in a 64 bit argument, or -1 if the argument is zero. __e32_bit_count_64 Return the count of bits set to 1 in a 64 bit argument.

__e32_memory_barrier ( )

IMPORT_C void__e32_memory_barrier()

__e32_io_completion_barrier ( )

IMPORT_C void__e32_io_completion_barrier()

Barrier guaranteeing completion as well as ordering

__e32_atomic_load_acq8 ( const volatile TAny * )

IMPORT_C TUint8__e32_atomic_load_acq8(const volatile TAny *a)

__e32_atomic_store_rel8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_store_rel8(volatile TAny *a,
TUint8v
)

__e32_atomic_store_ord8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_store_ord8(volatile TAny *a,
TUint8v
)

__e32_atomic_swp_rlx8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_swp_rlx8(volatile TAny *a,
TUint8v
)

__e32_atomic_swp_acq8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_swp_acq8(volatile TAny *a,
TUint8v
)

__e32_atomic_swp_rel8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_swp_rel8(volatile TAny *a,
TUint8v
)

__e32_atomic_swp_ord8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_swp_ord8(volatile TAny *a,
TUint8v
)

__e32_atomic_cas_rlx8 ( volatile TAny *, TUint8 *, TUint8 )

IMPORT_C TBool__e32_atomic_cas_rlx8(volatile TAny *a,
TUint8 *q,
TUint8v
)

__e32_atomic_cas_acq8 ( volatile TAny *, TUint8 *, TUint8 )

IMPORT_C TBool__e32_atomic_cas_acq8(volatile TAny *a,
TUint8 *q,
TUint8v
)

__e32_atomic_cas_rel8 ( volatile TAny *, TUint8 *, TUint8 )

IMPORT_C TBool__e32_atomic_cas_rel8(volatile TAny *a,
TUint8 *q,
TUint8v
)

__e32_atomic_cas_ord8 ( volatile TAny *, TUint8 *, TUint8 )

IMPORT_C TBool__e32_atomic_cas_ord8(volatile TAny *a,
TUint8 *q,
TUint8v
)

__e32_atomic_add_rlx8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_add_rlx8(volatile TAny *a,
TUint8v
)

__e32_atomic_add_acq8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_add_acq8(volatile TAny *a,
TUint8v
)

__e32_atomic_add_rel8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_add_rel8(volatile TAny *a,
TUint8v
)

__e32_atomic_add_ord8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_add_ord8(volatile TAny *a,
TUint8v
)

__e32_atomic_and_rlx8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_and_rlx8(volatile TAny *a,
TUint8v
)

__e32_atomic_and_acq8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_and_acq8(volatile TAny *a,
TUint8v
)

__e32_atomic_and_rel8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_and_rel8(volatile TAny *a,
TUint8v
)

__e32_atomic_and_ord8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_and_ord8(volatile TAny *a,
TUint8v
)

__e32_atomic_ior_rlx8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_ior_rlx8(volatile TAny *a,
TUint8v
)

__e32_atomic_ior_acq8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_ior_acq8(volatile TAny *a,
TUint8v
)

__e32_atomic_ior_rel8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_ior_rel8(volatile TAny *a,
TUint8v
)

__e32_atomic_ior_ord8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_ior_ord8(volatile TAny *a,
TUint8v
)

__e32_atomic_xor_rlx8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_xor_rlx8(volatile TAny *a,
TUint8v
)

__e32_atomic_xor_acq8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_xor_acq8(volatile TAny *a,
TUint8v
)

__e32_atomic_xor_rel8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_xor_rel8(volatile TAny *a,
TUint8v
)

__e32_atomic_xor_ord8 ( volatile TAny *, TUint8 )

IMPORT_C TUint8__e32_atomic_xor_ord8(volatile TAny *a,
TUint8v
)

__e32_atomic_axo_rlx8 ( volatile TAny *, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_axo_rlx8(volatile TAny *a,
TUint8u,
TUint8v
)

__e32_atomic_axo_acq8 ( volatile TAny *, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_axo_acq8(volatile TAny *a,
TUint8u,
TUint8v
)

__e32_atomic_axo_rel8 ( volatile TAny *, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_axo_rel8(volatile TAny *a,
TUint8u,
TUint8v
)

__e32_atomic_axo_ord8 ( volatile TAny *, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_axo_ord8(volatile TAny *a,
TUint8u,
TUint8v
)

__e32_atomic_tau_rlx8 ( volatile TAny *, TUint8, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_tau_rlx8(volatile TAny *a,
TUint8t,
TUint8u,
TUint8v
)

__e32_atomic_tau_acq8 ( volatile TAny *, TUint8, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_tau_acq8(volatile TAny *a,
TUint8t,
TUint8u,
TUint8v
)

__e32_atomic_tau_rel8 ( volatile TAny *, TUint8, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_tau_rel8(volatile TAny *a,
TUint8t,
TUint8u,
TUint8v
)

__e32_atomic_tau_ord8 ( volatile TAny *, TUint8, TUint8, TUint8 )

IMPORT_C TUint8__e32_atomic_tau_ord8(volatile TAny *a,
TUint8t,
TUint8u,
TUint8v
)

__e32_atomic_tas_rlx8 ( volatile TAny *, TInt8, TInt8, TInt8 )

IMPORT_C TInt8__e32_atomic_tas_rlx8(volatile TAny *a,
TInt8t,
TInt8u,
TInt8v
)

__e32_atomic_tas_acq8 ( volatile TAny *, TInt8, TInt8, TInt8 )

IMPORT_C TInt8__e32_atomic_tas_acq8(volatile TAny *a,
TInt8t,
TInt8u,
TInt8v
)

__e32_atomic_tas_rel8 ( volatile TAny *, TInt8, TInt8, TInt8 )

IMPORT_C TInt8__e32_atomic_tas_rel8(volatile TAny *a,
TInt8t,
TInt8u,
TInt8v
)

__e32_atomic_tas_ord8 ( volatile TAny *, TInt8, TInt8, TInt8 )

IMPORT_C TInt8__e32_atomic_tas_ord8(volatile TAny *a,
TInt8t,
TInt8u,
TInt8v
)

__e32_atomic_load_acq16 ( const volatile TAny * )

IMPORT_C TUint16__e32_atomic_load_acq16(const volatile TAny *a)

__e32_atomic_store_rel16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_store_rel16(volatile TAny *a,
TUint16v
)

__e32_atomic_store_ord16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_store_ord16(volatile TAny *a,
TUint16v
)

__e32_atomic_swp_rlx16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_swp_rlx16(volatile TAny *a,
TUint16v
)

__e32_atomic_swp_acq16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_swp_acq16(volatile TAny *a,
TUint16v
)

__e32_atomic_swp_rel16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_swp_rel16(volatile TAny *a,
TUint16v
)

__e32_atomic_swp_ord16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_swp_ord16(volatile TAny *a,
TUint16v
)

__e32_atomic_cas_rlx16 ( volatile TAny *, TUint16 *, TUint16 )

IMPORT_C TBool__e32_atomic_cas_rlx16(volatile TAny *a,
TUint16 *q,
TUint16v
)

__e32_atomic_cas_acq16 ( volatile TAny *, TUint16 *, TUint16 )

IMPORT_C TBool__e32_atomic_cas_acq16(volatile TAny *a,
TUint16 *q,
TUint16v
)

__e32_atomic_cas_rel16 ( volatile TAny *, TUint16 *, TUint16 )

IMPORT_C TBool__e32_atomic_cas_rel16(volatile TAny *a,
TUint16 *q,
TUint16v
)

__e32_atomic_cas_ord16 ( volatile TAny *, TUint16 *, TUint16 )

IMPORT_C TBool__e32_atomic_cas_ord16(volatile TAny *a,
TUint16 *q,
TUint16v
)

__e32_atomic_add_rlx16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_add_rlx16(volatile TAny *a,
TUint16v
)

__e32_atomic_add_acq16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_add_acq16(volatile TAny *a,
TUint16v
)

__e32_atomic_add_rel16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_add_rel16(volatile TAny *a,
TUint16v
)

__e32_atomic_add_ord16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_add_ord16(volatile TAny *a,
TUint16v
)

__e32_atomic_and_rlx16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_and_rlx16(volatile TAny *a,
TUint16v
)

__e32_atomic_and_acq16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_and_acq16(volatile TAny *a,
TUint16v
)

__e32_atomic_and_rel16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_and_rel16(volatile TAny *a,
TUint16v
)

__e32_atomic_and_ord16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_and_ord16(volatile TAny *a,
TUint16v
)

__e32_atomic_ior_rlx16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_ior_rlx16(volatile TAny *a,
TUint16v
)

__e32_atomic_ior_acq16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_ior_acq16(volatile TAny *a,
TUint16v
)

__e32_atomic_ior_rel16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_ior_rel16(volatile TAny *a,
TUint16v
)

__e32_atomic_ior_ord16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_ior_ord16(volatile TAny *a,
TUint16v
)

__e32_atomic_xor_rlx16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_xor_rlx16(volatile TAny *a,
TUint16v
)

__e32_atomic_xor_acq16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_xor_acq16(volatile TAny *a,
TUint16v
)

__e32_atomic_xor_rel16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_xor_rel16(volatile TAny *a,
TUint16v
)

__e32_atomic_xor_ord16 ( volatile TAny *, TUint16 )

IMPORT_C TUint16__e32_atomic_xor_ord16(volatile TAny *a,
TUint16v
)

__e32_atomic_axo_rlx16 ( volatile TAny *, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_axo_rlx16(volatile TAny *a,
TUint16u,
TUint16v
)

__e32_atomic_axo_acq16 ( volatile TAny *, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_axo_acq16(volatile TAny *a,
TUint16u,
TUint16v
)

__e32_atomic_axo_rel16 ( volatile TAny *, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_axo_rel16(volatile TAny *a,
TUint16u,
TUint16v
)

__e32_atomic_axo_ord16 ( volatile TAny *, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_axo_ord16(volatile TAny *a,
TUint16u,
TUint16v
)

__e32_atomic_tau_rlx16 ( volatile TAny *, TUint16, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_tau_rlx16(volatile TAny *a,
TUint16t,
TUint16u,
TUint16v
)

__e32_atomic_tau_acq16 ( volatile TAny *, TUint16, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_tau_acq16(volatile TAny *a,
TUint16t,
TUint16u,
TUint16v
)

__e32_atomic_tau_rel16 ( volatile TAny *, TUint16, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_tau_rel16(volatile TAny *a,
TUint16t,
TUint16u,
TUint16v
)

__e32_atomic_tau_ord16 ( volatile TAny *, TUint16, TUint16, TUint16 )

IMPORT_C TUint16__e32_atomic_tau_ord16(volatile TAny *a,
TUint16t,
TUint16u,
TUint16v
)

__e32_atomic_tas_rlx16 ( volatile TAny *, TInt16, TInt16, TInt16 )

IMPORT_C TInt16__e32_atomic_tas_rlx16(volatile TAny *a,
TInt16t,
TInt16u,
TInt16v
)

__e32_atomic_tas_acq16 ( volatile TAny *, TInt16, TInt16, TInt16 )

IMPORT_C TInt16__e32_atomic_tas_acq16(volatile TAny *a,
TInt16t,
TInt16u,
TInt16v
)

__e32_atomic_tas_rel16 ( volatile TAny *, TInt16, TInt16, TInt16 )

IMPORT_C TInt16__e32_atomic_tas_rel16(volatile TAny *a,
TInt16t,
TInt16u,
TInt16v
)

__e32_atomic_tas_ord16 ( volatile TAny *, TInt16, TInt16, TInt16 )

IMPORT_C TInt16__e32_atomic_tas_ord16(volatile TAny *a,
TInt16t,
TInt16u,
TInt16v
)

__e32_atomic_load_acq32 ( const volatile TAny * )

IMPORT_C TUint32__e32_atomic_load_acq32(const volatile TAny *a)

__e32_atomic_store_rel32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_store_rel32(volatile TAny *a,
TUint32v
)

__e32_atomic_store_ord32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_store_ord32(volatile TAny *a,
TUint32v
)

__e32_atomic_swp_rlx32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_swp_rlx32(volatile TAny *a,
TUint32v
)

__e32_atomic_swp_acq32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_swp_acq32(volatile TAny *a,
TUint32v
)

__e32_atomic_swp_rel32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_swp_rel32(volatile TAny *a,
TUint32v
)

__e32_atomic_swp_ord32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_swp_ord32(volatile TAny *a,
TUint32v
)

__e32_atomic_cas_rlx32 ( volatile TAny *, TUint32 *, TUint32 )

IMPORT_C TBool__e32_atomic_cas_rlx32(volatile TAny *a,
TUint32 *q,
TUint32v
)

__e32_atomic_cas_acq32 ( volatile TAny *, TUint32 *, TUint32 )

IMPORT_C TBool__e32_atomic_cas_acq32(volatile TAny *a,
TUint32 *q,
TUint32v
)

__e32_atomic_cas_rel32 ( volatile TAny *, TUint32 *, TUint32 )

IMPORT_C TBool__e32_atomic_cas_rel32(volatile TAny *a,
TUint32 *q,
TUint32v
)

__e32_atomic_cas_ord32 ( volatile TAny *, TUint32 *, TUint32 )

IMPORT_C TBool__e32_atomic_cas_ord32(volatile TAny *a,
TUint32 *q,
TUint32v
)

__e32_atomic_add_rlx32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_add_rlx32(volatile TAny *a,
TUint32v
)

__e32_atomic_add_acq32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_add_acq32(volatile TAny *a,
TUint32v
)

__e32_atomic_add_rel32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_add_rel32(volatile TAny *a,
TUint32v
)

__e32_atomic_add_ord32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_add_ord32(volatile TAny *a,
TUint32v
)

__e32_atomic_and_rlx32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_and_rlx32(volatile TAny *a,
TUint32v
)

__e32_atomic_and_acq32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_and_acq32(volatile TAny *a,
TUint32v
)

__e32_atomic_and_rel32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_and_rel32(volatile TAny *a,
TUint32v
)

__e32_atomic_and_ord32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_and_ord32(volatile TAny *a,
TUint32v
)

__e32_atomic_ior_rlx32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_ior_rlx32(volatile TAny *a,
TUint32v
)

__e32_atomic_ior_acq32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_ior_acq32(volatile TAny *a,
TUint32v
)

__e32_atomic_ior_rel32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_ior_rel32(volatile TAny *a,
TUint32v
)

__e32_atomic_ior_ord32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_ior_ord32(volatile TAny *a,
TUint32v
)

__e32_atomic_xor_rlx32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_xor_rlx32(volatile TAny *a,
TUint32v
)

__e32_atomic_xor_acq32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_xor_acq32(volatile TAny *a,
TUint32v
)

__e32_atomic_xor_rel32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_xor_rel32(volatile TAny *a,
TUint32v
)

__e32_atomic_xor_ord32 ( volatile TAny *, TUint32 )

IMPORT_C TUint32__e32_atomic_xor_ord32(volatile TAny *a,
TUint32v
)

__e32_atomic_axo_rlx32 ( volatile TAny *, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_axo_rlx32(volatile TAny *a,
TUint32u,
TUint32v
)

__e32_atomic_axo_acq32 ( volatile TAny *, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_axo_acq32(volatile TAny *a,
TUint32u,
TUint32v
)

__e32_atomic_axo_rel32 ( volatile TAny *, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_axo_rel32(volatile TAny *a,
TUint32u,
TUint32v
)

__e32_atomic_axo_ord32 ( volatile TAny *, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_axo_ord32(volatile TAny *a,
TUint32u,
TUint32v
)

__e32_atomic_tau_rlx32 ( volatile TAny *, TUint32, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_tau_rlx32(volatile TAny *a,
TUint32t,
TUint32u,
TUint32v
)

__e32_atomic_tau_acq32 ( volatile TAny *, TUint32, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_tau_acq32(volatile TAny *a,
TUint32t,
TUint32u,
TUint32v
)

__e32_atomic_tau_rel32 ( volatile TAny *, TUint32, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_tau_rel32(volatile TAny *a,
TUint32t,
TUint32u,
TUint32v
)

__e32_atomic_tau_ord32 ( volatile TAny *, TUint32, TUint32, TUint32 )

IMPORT_C TUint32__e32_atomic_tau_ord32(volatile TAny *a,
TUint32t,
TUint32u,
TUint32v
)

__e32_atomic_tas_rlx32 ( volatile TAny *, TInt32, TInt32, TInt32 )

IMPORT_C TInt32__e32_atomic_tas_rlx32(volatile TAny *a,
TInt32t,
TInt32u,
TInt32v
)

__e32_atomic_tas_acq32 ( volatile TAny *, TInt32, TInt32, TInt32 )

IMPORT_C TInt32__e32_atomic_tas_acq32(volatile TAny *a,
TInt32t,
TInt32u,
TInt32v
)

__e32_atomic_tas_rel32 ( volatile TAny *, TInt32, TInt32, TInt32 )

IMPORT_C TInt32__e32_atomic_tas_rel32(volatile TAny *a,
TInt32t,
TInt32u,
TInt32v
)

__e32_atomic_tas_ord32 ( volatile TAny *, TInt32, TInt32, TInt32 )

IMPORT_C TInt32__e32_atomic_tas_ord32(volatile TAny *a,
TInt32t,
TInt32u,
TInt32v
)

__e32_atomic_load_acq64 ( const volatile TAny * )

IMPORT_C TUint64__e32_atomic_load_acq64(const volatile TAny *a)

__e32_atomic_store_rel64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_store_rel64(volatile TAny *a,
TUint64v
)

__e32_atomic_store_ord64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_store_ord64(volatile TAny *a,
TUint64v
)

__e32_atomic_swp_rlx64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_swp_rlx64(volatile TAny *a,
TUint64v
)

__e32_atomic_swp_acq64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_swp_acq64(volatile TAny *a,
TUint64v
)

__e32_atomic_swp_rel64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_swp_rel64(volatile TAny *a,
TUint64v
)

__e32_atomic_swp_ord64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_swp_ord64(volatile TAny *a,
TUint64v
)

__e32_atomic_cas_rlx64 ( volatile TAny *, TUint64 *, TUint64 )

IMPORT_C TBool__e32_atomic_cas_rlx64(volatile TAny *a,
TUint64 *q,
TUint64v
)

__e32_atomic_cas_acq64 ( volatile TAny *, TUint64 *, TUint64 )

IMPORT_C TBool__e32_atomic_cas_acq64(volatile TAny *a,
TUint64 *q,
TUint64v
)

__e32_atomic_cas_rel64 ( volatile TAny *, TUint64 *, TUint64 )

IMPORT_C TBool__e32_atomic_cas_rel64(volatile TAny *a,
TUint64 *q,
TUint64v
)

__e32_atomic_cas_ord64 ( volatile TAny *, TUint64 *, TUint64 )

IMPORT_C TBool__e32_atomic_cas_ord64(volatile TAny *a,
TUint64 *q,
TUint64v
)

__e32_atomic_add_rlx64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_add_rlx64(volatile TAny *a,
TUint64v
)

__e32_atomic_add_acq64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_add_acq64(volatile TAny *a,
TUint64v
)

__e32_atomic_add_rel64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_add_rel64(volatile TAny *a,
TUint64v
)

__e32_atomic_add_ord64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_add_ord64(volatile TAny *a,
TUint64v
)

__e32_atomic_and_rlx64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_and_rlx64(volatile TAny *a,
TUint64v
)

__e32_atomic_and_acq64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_and_acq64(volatile TAny *a,
TUint64v
)

__e32_atomic_and_rel64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_and_rel64(volatile TAny *a,
TUint64v
)

__e32_atomic_and_ord64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_and_ord64(volatile TAny *a,
TUint64v
)

__e32_atomic_ior_rlx64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_ior_rlx64(volatile TAny *a,
TUint64v
)

__e32_atomic_ior_acq64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_ior_acq64(volatile TAny *a,
TUint64v
)

__e32_atomic_ior_rel64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_ior_rel64(volatile TAny *a,
TUint64v
)

__e32_atomic_ior_ord64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_ior_ord64(volatile TAny *a,
TUint64v
)

__e32_atomic_xor_rlx64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_xor_rlx64(volatile TAny *a,
TUint64v
)

__e32_atomic_xor_acq64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_xor_acq64(volatile TAny *a,
TUint64v
)

__e32_atomic_xor_rel64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_xor_rel64(volatile TAny *a,
TUint64v
)

__e32_atomic_xor_ord64 ( volatile TAny *, TUint64 )

IMPORT_C TUint64__e32_atomic_xor_ord64(volatile TAny *a,
TUint64v
)

__e32_atomic_axo_rlx64 ( volatile TAny *, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_axo_rlx64(volatile TAny *a,
TUint64u,
TUint64v
)

__e32_atomic_axo_acq64 ( volatile TAny *, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_axo_acq64(volatile TAny *a,
TUint64u,
TUint64v
)

__e32_atomic_axo_rel64 ( volatile TAny *, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_axo_rel64(volatile TAny *a,
TUint64u,
TUint64v
)

__e32_atomic_axo_ord64 ( volatile TAny *, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_axo_ord64(volatile TAny *a,
TUint64u,
TUint64v
)

__e32_atomic_tau_rlx64 ( volatile TAny *, TUint64, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_tau_rlx64(volatile TAny *a,
TUint64t,
TUint64u,
TUint64v
)

__e32_atomic_tau_acq64 ( volatile TAny *, TUint64, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_tau_acq64(volatile TAny *a,
TUint64t,
TUint64u,
TUint64v
)

__e32_atomic_tau_rel64 ( volatile TAny *, TUint64, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_tau_rel64(volatile TAny *a,
TUint64t,
TUint64u,
TUint64v
)

__e32_atomic_tau_ord64 ( volatile TAny *, TUint64, TUint64, TUint64 )

IMPORT_C TUint64__e32_atomic_tau_ord64(volatile TAny *a,
TUint64t,
TUint64u,
TUint64v
)

__e32_atomic_tas_rlx64 ( volatile TAny *, TInt64, TInt64, TInt64 )

IMPORT_C TInt64__e32_atomic_tas_rlx64(volatile TAny *a,
TInt64t,
TInt64u,
TInt64v
)

__e32_atomic_tas_acq64 ( volatile TAny *, TInt64, TInt64, TInt64 )

IMPORT_C TInt64__e32_atomic_tas_acq64(volatile TAny *a,
TInt64t,
TInt64u,
TInt64v
)

__e32_atomic_tas_rel64 ( volatile TAny *, TInt64, TInt64, TInt64 )

IMPORT_C TInt64__e32_atomic_tas_rel64(volatile TAny *a,
TInt64t,
TInt64u,
TInt64v
)

__e32_atomic_tas_ord64 ( volatile TAny *, TInt64, TInt64, TInt64 )

IMPORT_C TInt64__e32_atomic_tas_ord64(volatile TAny *a,
TInt64t,
TInt64u,
TInt64v
)

__e32_atomic_load_acq_ptr

__e32_atomic_store_rel_ptr

__e32_atomic_store_ord_ptr

__e32_atomic_swp_rlx_ptr

__e32_atomic_swp_acq_ptr

__e32_atomic_swp_rel_ptr

__e32_atomic_swp_ord_ptr

__e32_atomic_cas_rlx_ptr

__e32_atomic_cas_acq_ptr

__e32_atomic_cas_rel_ptr

__e32_atomic_cas_ord_ptr

__e32_atomic_add_rlx_ptr

__e32_atomic_add_acq_ptr

__e32_atomic_add_rel_ptr

__e32_atomic_add_ord_ptr

__e32_atomic_and_rlx_ptr

__e32_atomic_and_acq_ptr

__e32_atomic_and_rel_ptr

__e32_atomic_and_ord_ptr

__e32_atomic_ior_rlx_ptr

__e32_atomic_ior_acq_ptr

__e32_atomic_ior_rel_ptr

__e32_atomic_ior_ord_ptr

__e32_atomic_xor_rlx_ptr

__e32_atomic_xor_acq_ptr

__e32_atomic_xor_rel_ptr

__e32_atomic_xor_ord_ptr

__e32_atomic_axo_rlx_ptr

__e32_atomic_axo_acq_ptr

__e32_atomic_axo_rel_ptr

__e32_atomic_axo_ord_ptr

__e32_atomic_tau_rlx_ptr

__e32_atomic_tau_acq_ptr

__e32_atomic_tau_rel_ptr

__e32_atomic_tau_ord_ptr

__e32_find_ms1_32 ( TUint32 )

IMPORT_C TInt__e32_find_ms1_32(TUint32v)

Find the most significant 1 in a 32 bit word

Parameters
vThe word to be scanned
Return Value
The bit number of the most significant 1 if v != 0 -1 if v == 0

__e32_find_ls1_32 ( TUint32 )

IMPORT_C TInt__e32_find_ls1_32(TUint32v)

Find the least significant 1 in a 32 bit word

Parameters
vThe word to be scanned
Return Value
The bit number of the least significant 1 if v != 0 -1 if v == 0

__e32_bit_count_32 ( TUint32 )

IMPORT_C TInt__e32_bit_count_32(TUint32v)

Count the number of 1's in a 32 bit word

Parameters
vThe word to be scanned
Return Value
The number of 1's

__e32_find_ms1_64 ( TUint64 )

IMPORT_C TInt__e32_find_ms1_64(TUint64v)

Find the most significant 1 in a 64 bit word

Parameters
vThe word to be scanned
Return Value
The bit number of the most significant 1 if v != 0 -1 if v == 0

__e32_find_ls1_64 ( TUint64 )

IMPORT_C TInt__e32_find_ls1_64(TUint64v)

Find the least significant 1 in a 64 bit word

Parameters
vThe word to be scanned
Return Value
The bit number of the least significant 1 if v != 0 -1 if v == 0

__e32_bit_count_64 ( TUint64 )

IMPORT_C TInt__e32_bit_count_64(TUint64v)

Count the number of 1's in a 64 bit word

Parameters
vThe word to be scanned
Return Value
The number of 1's