Files

39 lines
1.6 KiB
C

// Minimal MSVC intrinsic declarations needed by nt-lite public/user headers.
#pragma once
#include <stdint.h>
unsigned __int64 __readgsqword(unsigned long offset);
long _InterlockedCompareExchange(long volatile* destination, long exchange, long comparand);
long _InterlockedExchange(long volatile* target, long value);
long _InterlockedIncrement(long volatile* addend);
long _InterlockedDecrement(long volatile* addend);
__int64 _InterlockedCompareExchange64(__int64 volatile* destination, __int64 exchange, __int64 comparand);
__int64 _InterlockedIncrement64(__int64 volatile* addend);
__int64 _InterlockedDecrement64(__int64 volatile* addend);
__int64 _InterlockedExchangeAdd64(__int64 volatile* addend, __int64 value);
void* _InterlockedCompareExchangePointer(void* volatile* destination, void* exchange, void* comparand);
void* _InterlockedExchangePointer(void* volatile* target, void* value);
void _ReadWriteBarrier(void);
void _mm_pause(void);
_Static_assert(sizeof(long) == sizeof(int32_t), "MSVC long must be 32-bit");
_Static_assert(sizeof(__int64) == sizeof(int64_t), "MSVC __int64 must be 64-bit");
#ifdef _MSC_VER
#pragma intrinsic(__readgsqword)
#pragma intrinsic(_InterlockedCompareExchange)
#pragma intrinsic(_InterlockedExchange)
#pragma intrinsic(_InterlockedIncrement)
#pragma intrinsic(_InterlockedDecrement)
#pragma intrinsic(_InterlockedCompareExchange64)
#pragma intrinsic(_InterlockedIncrement64)
#pragma intrinsic(_InterlockedDecrement64)
#pragma intrinsic(_InterlockedExchangeAdd64)
#pragma intrinsic(_InterlockedCompareExchangePointer)
#pragma intrinsic(_InterlockedExchangePointer)
#pragma intrinsic(_ReadWriteBarrier)
#pragma intrinsic(_mm_pause)
#endif