27#ifndef ZYCORE_ATOMIC_GNU_H
28#define ZYCORE_ATOMIC_GNU_H
41#if defined(ZYAN_CLANG) || defined(ZYAN_GCC) || defined(ZYAN_ICC)
51 &destination->
value, (
void*)comparand, (
void*)value, &destination->
value));
57 &destination->
value)) + 1;
72 return (
ZyanU32)(__sync_val_compare_and_swap(&destination->
value, comparand, value,
73 &destination->
value));
78 return (
ZyanU32)(__sync_fetch_and_add(&destination->
value, 1, &destination->
value)) + 1;
83 return (
ZyanU32)(__sync_sub_and_fetch(&destination->
value, 1, &destination->
value));
93 return (
ZyanU64)(__sync_val_compare_and_swap(&destination->
value, comparand, value,
94 &destination->
value));
99 return (
ZyanU64)(__sync_fetch_and_add(&destination->
value, 1, &destination->
value)) + 1;
104 return (
ZyanU64)(__sync_sub_and_fetch(&destination->
value, 1, &destination->
value));
struct ZyanAtomicPointer_ ZyanAtomicPointer
struct ZyanAtomic64_ ZyanAtomic64
struct ZyanAtomic32_ ZyanAtomic32
General helper and platform detection macros.
#define ZYAN_INLINE
Definition Defines.h:356
Includes and defines some default data types.
uintptr_t ZyanUPointer
Definition Types.h:226
uint64_t ZyanU64
Definition Types.h:219
uint32_t ZyanU32
Definition Types.h:218
ZyanU32 volatile value
Definition Atomic.h:51
ZyanU64 volatile value
Definition Atomic.h:59
ZyanVoidPointer volatile value
Definition Atomic.h:67