#ifndef _NT_ATOMIC_H_
#define _NT_ATOMIC_H_
#include "nt_abi.h"
static __inline__ void at_locked_inc(
intptr_t volatile * ptr);
static __inline__ void at_locked_inc_32(
int32_t volatile * ptr);
static __inline__ void at_locked_inc_64(
int64_t volatile * ptr);
static __inline__ void at_locked_dec(
intptr_t volatile * ptr);
static __inline__ void at_locked_dec_32(
int32_t volatile * ptr);
static __inline__ void at_locked_dec_64(
int64_t volatile * ptr);
static __inline__ void at_locked_add(
intptr_t volatile * ptr,
intptr_t val);
static __inline__ void at_locked_add_32(
int32_t volatile * ptr,
int32_t val);
static __inline__ void at_locked_add_64(
int64_t volatile * ptr,
int64_t val);
static __inline__ void at_locked_sub(
intptr_t volatile * ptr,
intptr_t val);
static __inline__ void at_locked_sub_32(
int32_t volatile * ptr,
int32_t val);
static __inline__ void at_locked_sub_64(
int64_t volatile * ptr,
int64_t val);
static __inline__ intptr_t at_locked_xadd(
intptr_t volatile * ptr,
intptr_t val);
static __inline__ int32_t at_locked_xadd_32(
int32_t volatile * ptr,
int32_t val);
static __inline__ int64_t at_locked_xadd_64(
int64_t volatile * ptr,
int64_t val);
static __inline__ intptr_t at_locked_xsub(
intptr_t volatile * ptr,
intptr_t val);
static __inline__ int32_t at_locked_xsub_32(
int32_t volatile * ptr,
int32_t val);
static __inline__ int64_t at_locked_xsub_64(
int64_t volatile * ptr,
int64_t val);
static __inline__ intptr_t at_locked_cas(
intptr_t volatile * dst,
intptr_t cmp,
intptr_t xchg);
static __inline__ int32_t at_locked_cas_32(
int32_t volatile * dst,
int32_t cmp,
int32_t xchg);
static __inline__ int64_t at_locked_cas_64(
int64_t volatile * dst,
int64_t cmp,
int64_t xchg);
static __inline__ intptr_t at_locked_and(
intptr_t volatile * dst,
intptr_t mask);
static __inline__ int32_t at_locked_and_32(
int32_t volatile * dst,
int32_t mask);
static __inline__ int64_t at_locked_and_64(
int64_t volatile * dst,
int64_t mask);
static __inline__ intptr_t at_locked_or(
intptr_t volatile * dst,
intptr_t mask);
static __inline__ int32_t at_locked_or_32(
int32_t volatile * dst,
int32_t mask);
static __inline__ int64_t at_locked_or_64(
int64_t volatile * dst,
int64_t mask);
static __inline__ intptr_t at_locked_xor(
intptr_t volatile * dst,
intptr_t mask);
static __inline__ int32_t at_locked_xor_32(
int32_t volatile * dst,
int32_t mask);
static __inline__ int64_t at_locked_xor_64(
int64_t volatile * dst,
int64_t mask);
static __inline__ void at_store(
volatile intptr_t * dst,
intptr_t val);
static __inline__ int at_bsf(
unsigned int * index,
uintptr_t mask);
static __inline__ int at_bsr(
unsigned int * index,
uintptr_t mask);
static __inline__ size_t at_popcount(
uintptr_t mask);
static __inline__ size_t at_popcount_16(
uint16_t mask);
static __inline__ size_t at_popcount_32(
uint32_t mask);
static __inline__ size_t at_popcount_64(
uint64_t mask);
#include "bits/nt_atomic_inline_asm.h"
#endif