// Minimal MSVC intrinsic declarations needed by nt-lite public/user headers. #pragma once #include 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