Blame include/ntapi/bits/i386/nt_atomic_i386_asm__msvc.h

dd89bb
#include <psxtypes/psxtypes.h>
dd89bb
dd89bb
long		_InterlockedIncrement(long volatile * ptr);
dd89bb
int64_t		_InterlockedIncrement64(int64_t volatile * ptr);
dd89bb
long		_InterlockedDecrement(long volatile * ptr);
dd89bb
int64_t		_InterlockedDecrement64(int64_t volatile * ptr);
dd89bb
long		_InterlockedExchangeAdd(long volatile * ptr, long val);
dd89bb
int64_t		_InterlockedExchangeAdd64(int64_t volatile * ptr, int64_t val);
dd89bb
long		_InterlockedCompareExchange(long volatile * dst, long xchg, long cmp);
dd89bb
int64_t		_InterlockedCompareExchange64(int64_t volatile * dst, int64_t xchg, int64_t cmp);
dd89bb
long		_InterlockedAnd(long volatile * dst, long mask);
dd89bb
int64_t		_InterlockedAnd64(int64_t volatile * dst, int64_t mask);
dd89bb
long		_InterlockedOr(long volatile * dst, long mask);
dd89bb
int64_t		_InterlockedOr64(int64_t volatile * dst, int64_t mask);
dd89bb
long		_InterlockedXor(long volatile * dst, long mask);
dd89bb
int64_t		_InterlockedXor64(int64_t volatile * dst, int64_t mask);
dd89bb
uint16_t	__popcnt16(uint16_t mask);
dd89bb
unsigned int	__popcnt(uint32_t mask);
dd89bb
uint64_t	__popcnt64(uint64_t mask);
dd89bb
void		_ReadWriteBarrier(void);
dd89bb
unsigned char	_BitScanForward(unsigned int * index, uintptr_t mask);
dd89bb
unsigned char	_BitScanReverse(unsigned int * index, uintptr_t mask);
dd89bb
dd89bb
static __inline__ void at_locked_inc(
dd89bb
	intptr_t volatile * ptr)
dd89bb
{
dd89bb
	_InterlockedIncrement(ptr);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_inc_32(
dd89bb
	int32_t volatile * ptr)
dd89bb
{
dd89bb
	_InterlockedIncrement((long *)ptr);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_inc_64(
dd89bb
	int64_t volatile * ptr)
dd89bb
{
dd89bb
	_InterlockedIncrement64(ptr);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_dec(
dd89bb
	intptr_t volatile * ptr)
dd89bb
{
dd89bb
	_InterlockedDecrement(ptr);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_dec_32(
dd89bb
	int32_t volatile * ptr)
dd89bb
{
dd89bb
	_InterlockedDecrement((long *)ptr);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_dec_64(
dd89bb
	int64_t volatile * ptr)
dd89bb
{
dd89bb
	_InterlockedDecrement64(ptr);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_add(
dd89bb
	intptr_t volatile *	ptr,
dd89bb
	intptr_t		val)
dd89bb
{
dd89bb
	_InterlockedExchangeAdd(ptr, val);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_add_32(
dd89bb
	int32_t volatile *	ptr,
dd89bb
	int32_t			val)
dd89bb
{
dd89bb
	_InterlockedExchangeAdd((long *)ptr, val);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_add_64(
dd89bb
	int64_t volatile *	ptr,
dd89bb
	int64_t			val)
dd89bb
{
dd89bb
	_InterlockedExchangeAdd64(ptr, val);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_sub(
dd89bb
	intptr_t volatile *	ptr,
dd89bb
	intptr_t		val)
dd89bb
{
dd89bb
	_InterlockedExchangeAdd(ptr, -val);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_sub_32(
dd89bb
	int32_t volatile *	ptr,
dd89bb
	int32_t			val)
dd89bb
{
dd89bb
	_InterlockedExchangeAdd((long *)ptr, -val);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_locked_sub_64(
dd89bb
	int64_t volatile *	ptr,
dd89bb
	int64_t			val)
dd89bb
{
dd89bb
	_InterlockedExchangeAdd64(ptr, -val);
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ intptr_t at_locked_xadd(
dd89bb
	intptr_t volatile *	ptr,
dd89bb
	intptr_t		val)
dd89bb
{
dd89bb
	return _InterlockedExchangeAdd(ptr, val);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int32_t at_locked_xadd_32(
dd89bb
	int32_t volatile *	ptr,
dd89bb
	int32_t			val)
dd89bb
{
dd89bb
	return _InterlockedExchangeAdd((long *)ptr, val);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int64_t at_locked_xadd_64(
dd89bb
	int64_t volatile *	ptr,
dd89bb
	int64_t			val)
dd89bb
{
dd89bb
	return _InterlockedExchangeAdd64(ptr, val);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ intptr_t at_locked_xsub(
dd89bb
	intptr_t volatile *	ptr,
dd89bb
	intptr_t		val)
dd89bb
{
dd89bb
	return _InterlockedExchangeAdd(ptr, -val);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int32_t at_locked_xsub_32(
dd89bb
	int32_t volatile *	ptr,
dd89bb
	int32_t			val)
dd89bb
{
dd89bb
	return _InterlockedExchangeAdd((long *)ptr, -val);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int64_t at_locked_xsub_64(
dd89bb
	int64_t volatile *	ptr,
dd89bb
	int64_t			val)
dd89bb
{
dd89bb
	return _InterlockedExchangeAdd64(ptr, -val);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ intptr_t at_locked_cas(
dd89bb
	intptr_t volatile *	dst,
dd89bb
	intptr_t		cmp,
dd89bb
	intptr_t		xchg)
dd89bb
{
dd89bb
	return _InterlockedCompareExchange(dst,xchg,cmp);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int32_t at_locked_cas_32(
dd89bb
	int32_t volatile *	dst,
dd89bb
	int32_t			cmp,
dd89bb
	int32_t			xchg)
dd89bb
{
dd89bb
	return _InterlockedCompareExchange((long *)dst,xchg,cmp);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int64_t at_locked_cas_64(
dd89bb
	int64_t volatile *	dst,
dd89bb
	int64_t			cmp,
dd89bb
	int64_t			xchg)
dd89bb
{
dd89bb
	return _InterlockedCompareExchange64(dst,xchg,cmp);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ intptr_t at_locked_and(
dd89bb
	intptr_t volatile *	dst,
dd89bb
	intptr_t		mask)
dd89bb
{
dd89bb
	return _InterlockedAnd(dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int32_t at_locked_and_32(
dd89bb
	int32_t volatile *	dst,
dd89bb
	int32_t			mask)
dd89bb
{
dd89bb
	return _InterlockedAnd((long *)dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int64_t at_locked_and_64(
dd89bb
	int64_t volatile *	dst,
dd89bb
	int64_t			mask)
dd89bb
{
dd89bb
	return _InterlockedAnd64(dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ intptr_t at_locked_or(
dd89bb
	intptr_t volatile *	dst,
dd89bb
	intptr_t		mask)
dd89bb
{
dd89bb
	return _InterlockedOr(dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int32_t at_locked_or_32(
dd89bb
	int32_t volatile *	dst,
dd89bb
	int32_t			mask)
dd89bb
{
dd89bb
	return _InterlockedOr((long *)dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int64_t at_locked_or_64(
dd89bb
	int64_t volatile *	dst,
dd89bb
	int64_t			mask)
dd89bb
{
dd89bb
	return _InterlockedOr64(dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ intptr_t at_locked_xor(
dd89bb
	intptr_t volatile *	dst,
dd89bb
	intptr_t		mask)
dd89bb
{
dd89bb
	return _InterlockedXor(dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int32_t at_locked_xor_32(
dd89bb
	int32_t volatile *	dst,
dd89bb
	int32_t			mask)
dd89bb
{
dd89bb
	return _InterlockedXor((long *)dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int64_t at_locked_xor_64(
dd89bb
	int64_t volatile *	dst,
dd89bb
	int64_t			mask)
dd89bb
{
dd89bb
	return _InterlockedXor64(dst,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_store(
dd89bb
	volatile intptr_t *	dst,
dd89bb
	intptr_t		val)
dd89bb
{
dd89bb
	_ReadWriteBarrier();
dd89bb
	*dst = val;
dd89bb
	_ReadWriteBarrier();
dd89bb
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_store_32(
dd89bb
	volatile int32_t *	dst,
dd89bb
	int32_t			val)
dd89bb
{
dd89bb
	_ReadWriteBarrier();
dd89bb
	*dst = val;
dd89bb
	_ReadWriteBarrier();
dd89bb
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ void at_store_64(
dd89bb
	volatile int64_t *	dst,
dd89bb
	int64_t			val)
dd89bb
{
dd89bb
	_ReadWriteBarrier();
dd89bb
	*dst = val;
dd89bb
	_ReadWriteBarrier();
dd89bb
dd89bb
	return;
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int at_bsf(
dd89bb
	unsigned int *		index,
dd89bb
	uintptr_t		mask)
dd89bb
{
dd89bb
	return (int)_BitScanForward(index,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ int at_bsr(
dd89bb
	unsigned int *		index,
dd89bb
	uintptr_t		mask)
dd89bb
{
dd89bb
	return (int)_BitScanReverse(index,mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ size_t at_popcount(
dd89bb
	uintptr_t		mask)
dd89bb
{
dd89bb
	return __popcnt(mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ size_t at_popcount_16(
dd89bb
	uint16_t		mask)
dd89bb
{
dd89bb
	return __popcnt16(mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ size_t at_popcount_32(
dd89bb
	uint32_t		mask)
dd89bb
{
dd89bb
	return __popcnt(mask);
dd89bb
}
dd89bb
dd89bb
dd89bb
static __inline__ size_t at_popcount_64(
dd89bb
	uint64_t		mask)
dd89bb
{
dd89bb
	return (size_t)__popcnt64(mask);
dd89bb
}