libmetal
|
Go to the source code of this file.
Macros | |
#define | ATOMIC_FLAG_INIT 0 |
#define | ATOMIC_VAR_INIT(VAL) (VAL) |
#define | atomic_flag_test_and_set(FLAG) __sync_lock_test_and_set((FLAG), 1) |
#define | atomic_flag_test_and_set_explicit(FLAG, MO) atomic_flag_test_and_set(FLAG) |
#define | atomic_flag_clear(FLAG) __sync_lock_release((FLAG)) |
#define | atomic_flag_clear_explicit(FLAG, MO) atomic_flag_clear(FLAG) |
#define | atomic_init(OBJ, VAL) do { *(OBJ) = (VAL); } while (0) |
#define | atomic_is_lock_free(OBJ) (sizeof(*(OBJ)) <= sizeof(long)) |
#define | atomic_store(OBJ, VAL) do { *(OBJ) = (VAL); __sync_synchronize(); } while (0) |
#define | atomic_store_explicit(OBJ, VAL, MO) atomic_store((OBJ), (VAL)) |
#define | atomic_load(OBJ) ({ __sync_synchronize(); *(OBJ); }) |
#define | atomic_load_explicit(OBJ, MO) atomic_load(OBJ) |
#define | atomic_exchange(OBJ, DES) |
#define | atomic_exchange_explicit(OBJ, DES, MO) atomic_exchange((OBJ), (DES)) |
#define | atomic_compare_exchange_strong(OBJ, EXP, DES) |
#define | atomic_compare_exchange_strong_explicit(OBJ, EXP, DES, MO) atomic_compare_exchange_strong((OBJ), (EXP), (DES)) |
#define | atomic_compare_exchange_weak(OBJ, EXP, DES) atomic_compare_exchange_strong((OBJ), (EXP), (DES)) |
#define | atomic_compare_exchange_weak_explicit(OBJ, EXP, DES, MO) atomic_compare_exchange_weak((OBJ), (EXP), (DES)) |
#define | atomic_fetch_add(OBJ, VAL) __sync_fetch_and_add((OBJ), (VAL)) |
#define | atomic_fetch_add_explicit(OBJ, VAL, MO) atomic_fetch_add((OBJ), (VAL)) |
#define | atomic_fetch_sub(OBJ, VAL) __sync_fetch_and_sub((OBJ), (VAL)) |
#define | atomic_fetch_sub_explicit(OBJ, VAL, MO) atomic_fetch_sub((OBJ), (VAL)) |
#define | atomic_fetch_or(OBJ, VAL) __sync_fetch_and_or((OBJ), (VAL)) |
#define | atomic_fetch_or_explicit(OBJ, VAL, MO) atomic_fetch_or((OBJ), (VAL)) |
#define | atomic_fetch_xor(OBJ, VAL) __sync_fetch_and_xor((OBJ), (VAL)) |
#define | atomic_fetch_xor_explicit(OBJ, VAL, MO) atomic_fetch_xor((OBJ), (VAL)) |
#define | atomic_fetch_and(OBJ, VAL) __sync_fetch_and_and((OBJ), (VAL)) |
#define | atomic_fetch_and_explicit(OBJ, VAL, MO) atomic_fetch_and((OBJ), (VAL)) |
#define | atomic_thread_fence(MO) __sync_synchronize() |
#define | atomic_signal_fence(MO) __sync_synchronize() |
Typedefs | |
typedef int | atomic_flag |
typedef char | atomic_char |
typedef unsigned char | atomic_uchar |
typedef short | atomic_short |
typedef unsigned short | atomic_ushort |
typedef int | atomic_int |
typedef unsigned int | atomic_uint |
typedef long | atomic_long |
typedef unsigned long | atomic_ulong |
typedef long long | atomic_llong |
typedef unsigned long long | atomic_ullong |
Enumerations | |
enum | memory_order { memory_order_relaxed, memory_order_consume, memory_order_acquire, memory_order_release, memory_order_acq_rel, memory_order_seq_cst } |
#define atomic_compare_exchange_strong | ( | OBJ, | |
EXP, | |||
DES | |||
) |
#define atomic_compare_exchange_strong_explicit | ( | OBJ, | |
EXP, | |||
DES, | |||
MO | |||
) | atomic_compare_exchange_strong((OBJ), (EXP), (DES)) |
#define atomic_compare_exchange_weak | ( | OBJ, | |
EXP, | |||
DES | |||
) | atomic_compare_exchange_strong((OBJ), (EXP), (DES)) |
#define atomic_compare_exchange_weak_explicit | ( | OBJ, | |
EXP, | |||
DES, | |||
MO | |||
) | atomic_compare_exchange_weak((OBJ), (EXP), (DES)) |
#define atomic_exchange | ( | OBJ, | |
DES | |||
) |
#define atomic_exchange_explicit | ( | OBJ, | |
DES, | |||
MO | |||
) | atomic_exchange((OBJ), (DES)) |
#define atomic_fetch_add | ( | OBJ, | |
VAL | |||
) | __sync_fetch_and_add((OBJ), (VAL)) |
#define atomic_fetch_add_explicit | ( | OBJ, | |
VAL, | |||
MO | |||
) | atomic_fetch_add((OBJ), (VAL)) |
#define atomic_fetch_and | ( | OBJ, | |
VAL | |||
) | __sync_fetch_and_and((OBJ), (VAL)) |
#define atomic_fetch_and_explicit | ( | OBJ, | |
VAL, | |||
MO | |||
) | atomic_fetch_and((OBJ), (VAL)) |
#define atomic_fetch_or | ( | OBJ, | |
VAL | |||
) | __sync_fetch_and_or((OBJ), (VAL)) |
#define atomic_fetch_or_explicit | ( | OBJ, | |
VAL, | |||
MO | |||
) | atomic_fetch_or((OBJ), (VAL)) |
#define atomic_fetch_sub | ( | OBJ, | |
VAL | |||
) | __sync_fetch_and_sub((OBJ), (VAL)) |
#define atomic_fetch_sub_explicit | ( | OBJ, | |
VAL, | |||
MO | |||
) | atomic_fetch_sub((OBJ), (VAL)) |
#define atomic_fetch_xor | ( | OBJ, | |
VAL | |||
) | __sync_fetch_and_xor((OBJ), (VAL)) |
#define atomic_fetch_xor_explicit | ( | OBJ, | |
VAL, | |||
MO | |||
) | atomic_fetch_xor((OBJ), (VAL)) |
#define atomic_flag_clear | ( | FLAG | ) | __sync_lock_release((FLAG)) |
#define atomic_flag_clear_explicit | ( | FLAG, | |
MO | |||
) | atomic_flag_clear(FLAG) |
#define ATOMIC_FLAG_INIT 0 |
#define atomic_flag_test_and_set | ( | FLAG | ) | __sync_lock_test_and_set((FLAG), 1) |
#define atomic_flag_test_and_set_explicit | ( | FLAG, | |
MO | |||
) | atomic_flag_test_and_set(FLAG) |
#define atomic_init | ( | OBJ, | |
VAL | |||
) | do { *(OBJ) = (VAL); } while (0) |
#define atomic_is_lock_free | ( | OBJ | ) | (sizeof(*(OBJ)) <= sizeof(long)) |
#define atomic_load | ( | OBJ | ) | ({ __sync_synchronize(); *(OBJ); }) |
#define atomic_load_explicit | ( | OBJ, | |
MO | |||
) | atomic_load(OBJ) |
#define atomic_signal_fence | ( | MO | ) | __sync_synchronize() |
#define atomic_store | ( | OBJ, | |
VAL | |||
) | do { *(OBJ) = (VAL); __sync_synchronize(); } while (0) |
#define atomic_store_explicit | ( | OBJ, | |
VAL, | |||
MO | |||
) | atomic_store((OBJ), (VAL)) |
#define atomic_thread_fence | ( | MO | ) | __sync_synchronize() |
#define ATOMIC_VAR_INIT | ( | VAL | ) | (VAL) |
typedef char atomic_char |
typedef int atomic_flag |
typedef int atomic_int |
typedef long long atomic_llong |
typedef long atomic_long |
typedef short atomic_short |
typedef unsigned char atomic_uchar |
typedef unsigned int atomic_uint |
typedef unsigned long long atomic_ullong |
typedef unsigned long atomic_ulong |
typedef unsigned short atomic_ushort |
enum memory_order |