39 lines
1.6 KiB
C
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
|