package sync2

import "intrinsics"

cpu_relax :: intrinsics.cpu_relax;

atomic_fence         :: intrinsics.atomic_fence;
atomic_fence_acquire :: intrinsics.atomic_fence_acq;
atomic_fence_release :: intrinsics.atomic_fence_rel;
atomic_fence_acqrel  :: intrinsics.atomic_fence_acqrel;

atomic_store           :: intrinsics.atomic_store;
atomic_store_release   :: intrinsics.atomic_store_rel;
atomic_store_relaxed   :: intrinsics.atomic_store_relaxed;
atomic_store_unordered :: intrinsics.atomic_store_unordered;

atomic_load           :: intrinsics.atomic_load;
atomic_load_acquire   :: intrinsics.atomic_load_acq;
atomic_load_relaxed   :: intrinsics.atomic_load_relaxed;
atomic_load_unordered :: intrinsics.atomic_load_unordered;

atomic_add          :: intrinsics.atomic_add;
atomic_add_acquire  :: intrinsics.atomic_add_acq;
atomic_add_release  :: intrinsics.atomic_add_rel;
atomic_add_acqrel   :: intrinsics.atomic_add_acqrel;
atomic_add_relaxed  :: intrinsics.atomic_add_relaxed;
atomic_sub          :: intrinsics.atomic_sub;
atomic_sub_acquire  :: intrinsics.atomic_sub_acq;
atomic_sub_release  :: intrinsics.atomic_sub_rel;
atomic_sub_acqrel   :: intrinsics.atomic_sub_acqrel;
atomic_sub_relaxed  :: intrinsics.atomic_sub_relaxed;
atomic_and          :: intrinsics.atomic_and;
atomic_and_acquire  :: intrinsics.atomic_and_acq;
atomic_and_release  :: intrinsics.atomic_and_rel;
atomic_and_acqrel   :: intrinsics.atomic_and_acqrel;
atomic_and_relaxed  :: intrinsics.atomic_and_relaxed;
atomic_nand         :: intrinsics.atomic_nand;
atomic_nand_acquire :: intrinsics.atomic_nand_acq;
atomic_nand_release :: intrinsics.atomic_nand_rel;
atomic_nand_acqrel  :: intrinsics.atomic_nand_acqrel;
atomic_nand_relaxed :: intrinsics.atomic_nand_relaxed;
atomic_or           :: intrinsics.atomic_or;
atomic_or_acquire   :: intrinsics.atomic_or_acq;
atomic_or_release   :: intrinsics.atomic_or_rel;
atomic_or_acqrel    :: intrinsics.atomic_or_acqrel;
atomic_or_relaxed   :: intrinsics.atomic_or_relaxed;
atomic_xor          :: intrinsics.atomic_xor;
atomic_xor_acquire  :: intrinsics.atomic_xor_acq;
atomic_xor_release  :: intrinsics.atomic_xor_rel;
atomic_xor_acqrel   :: intrinsics.atomic_xor_acqrel;
atomic_xor_relaxed  :: intrinsics.atomic_xor_relaxed;

atomic_exchange         :: intrinsics.atomic_xchg;
atomic_exchange_acquire :: intrinsics.atomic_xchg_acq;
atomic_exchange_release :: intrinsics.atomic_xchg_rel;
atomic_exchange_acqrel  :: intrinsics.atomic_xchg_acqrel;
atomic_exchange_relaxed :: intrinsics.atomic_xchg_relaxed;

// Returns value and optional ok boolean
atomic_compare_exchange_strong                     :: intrinsics.atomic_cxchg;
atomic_compare_exchange_strong_acquire             :: intrinsics.atomic_cxchg_acq;
atomic_compare_exchange_strong_release             :: intrinsics.atomic_cxchg_rel;
atomic_compare_exchange_strong_acqrel              :: intrinsics.atomic_cxchg_acqrel;
atomic_compare_exchange_strong_relaxed             :: intrinsics.atomic_cxchg_relaxed;
atomic_compare_exchange_strong_failrelaxed         :: intrinsics.atomic_cxchg_failrelaxed;
atomic_compare_exchange_strong_failacquire         :: intrinsics.atomic_cxchg_failacq;
atomic_compare_exchange_strong_acquire_failrelaxed :: intrinsics.atomic_cxchg_acq_failrelaxed;
atomic_compare_exchange_strong_acqrel_failrelaxed  :: intrinsics.atomic_cxchg_acqrel_failrelaxed;

// Returns value and optional ok boolean
atomic_compare_exchange_weak                     :: intrinsics.atomic_cxchgweak;
atomic_compare_exchange_weak_acquire             :: intrinsics.atomic_cxchgweak_acq;
atomic_compare_exchange_weak_release             :: intrinsics.atomic_cxchgweak_rel;
atomic_compare_exchange_weak_acqrel              :: intrinsics.atomic_cxchgweak_acqrel;
atomic_compare_exchange_weak_relaxed             :: intrinsics.atomic_cxchgweak_relaxed;
atomic_compare_exchange_weak_failrelaxed         :: intrinsics.atomic_cxchgweak_failrelaxed;
atomic_compare_exchange_weak_failacquire         :: intrinsics.atomic_cxchgweak_failacq;
atomic_compare_exchange_weak_acquire_failrelaxed :: intrinsics.atomic_cxchgweak_acq_failrelaxed;
atomic_compare_exchange_weak_acqrel_failrelaxed  :: intrinsics.atomic_cxchgweak_acqrel_failrelaxed;
