@@ -832,7 +832,7 @@ void _mm_stream_si64x(__int64 *, __int64);
832832#endif
833833#endif /* _M_X64 */
834834
835- #if defined(_M_ARM ) || defined(_M_X64 )
835+ #if defined(_M_ARM ) || defined(_M_X64 ) || defined( _M_ARM64 )
836836
837837__int64 _InterlockedAnd64 (_Interlocked_operand_ __int64 volatile * _Value , __int64 _Mask );
838838__int64 _InterlockedDecrement64 (_Interlocked_operand_ __int64 volatile * _Addend );
@@ -1009,6 +1009,74 @@ int _isunorderedf(float, float);
10091009
10101010#ifdef _M_ARM64
10111011unsigned __int64 __getReg (int );
1012+
1013+ /* Thread pointer (x18) accessors */
1014+ unsigned char __readx18byte (unsigned long Offset );
1015+ unsigned short __readx18word (unsigned long Offset );
1016+ unsigned long __readx18dword (unsigned long Offset );
1017+ unsigned __int64 __readx18qword (unsigned long Offset );
1018+ void __writex18byte (unsigned long Offset , unsigned char Value );
1019+ void __writex18word (unsigned long Offset , unsigned short Value );
1020+ void __writex18dword (unsigned long Offset , unsigned long Value );
1021+ void __writex18qword (unsigned long Offset , unsigned __int64 Value );
1022+ void __addx18byte (unsigned long Offset , unsigned char Value );
1023+ void __addx18word (unsigned long Offset , unsigned short Value );
1024+ void __addx18dword (unsigned long Offset , unsigned long Value );
1025+ void __addx18qword (unsigned long Offset , unsigned __int64 Value );
1026+ void __incx18byte (unsigned long Offset );
1027+ void __incx18word (unsigned long Offset );
1028+ void __incx18dword (unsigned long Offset );
1029+ void __incx18qword (unsigned long Offset );
1030+
1031+ /* Status register access */
1032+ __int64 _ReadStatusReg (unsigned int SysReg );
1033+ void _WriteStatusReg (unsigned int SysReg , unsigned __int64 Value );
1034+
1035+ /* Prefetch */
1036+ void __cdecl __prefetch (const void * Address );
1037+ void __prefetch2 (const void * Address , int Level );
1038+
1039+ /* Interlocked operations (ARM64 memory-order variants) */
1040+ long _InterlockedAdd (long volatile * Addend , long Value );
1041+ __int64 _InterlockedAdd64 (__int64 volatile * Addend , __int64 Value );
1042+ long _InterlockedAdd_acq (long volatile * Addend , long Value );
1043+ long _InterlockedAdd_rel (long volatile * Addend , long Value );
1044+ long _InterlockedAdd_nf (long volatile * Addend , long Value );
1045+ __int64 _InterlockedAdd64_acq (__int64 volatile * Addend , __int64 Value );
1046+ __int64 _InterlockedAdd64_rel (__int64 volatile * Addend , __int64 Value );
1047+ __int64 _InterlockedAdd64_nf (__int64 volatile * Addend , __int64 Value );
1048+
1049+ char _InterlockedAnd8_acq (char volatile * Value , char Mask );
1050+ char _InterlockedAnd8_rel (char volatile * Value , char Mask );
1051+ char _InterlockedAnd8_nf (char volatile * Value , char Mask );
1052+ short _InterlockedAnd16_acq (short volatile * Value , short Mask );
1053+ short _InterlockedAnd16_rel (short volatile * Value , short Mask );
1054+ short _InterlockedAnd16_nf (short volatile * Value , short Mask );
1055+ long _InterlockedAnd_acq (long volatile * Value , long Mask );
1056+ long _InterlockedAnd_rel (long volatile * Value , long Mask );
1057+ long _InterlockedAnd_nf (long volatile * Value , long Mask );
1058+ __int64 _InterlockedAnd64_acq (__int64 volatile * Value , __int64 Mask );
1059+ __int64 _InterlockedAnd64_rel (__int64 volatile * Value , __int64 Mask );
1060+ __int64 _InterlockedAnd64_nf (__int64 volatile * Value , __int64 Mask );
1061+
1062+ char _InterlockedCompareExchange8_acq (char volatile * Destination , char Exchange , char Comparand );
1063+ char _InterlockedCompareExchange8_rel (char volatile * Destination , char Exchange , char Comparand );
1064+ char _InterlockedCompareExchange8_nf (char volatile * Destination , char Exchange , char Comparand );
1065+ short _InterlockedCompareExchange16_acq (short volatile * Destination , short Exchange , short Comparand );
1066+ short _InterlockedCompareExchange16_rel (short volatile * Destination , short Exchange , short Comparand );
1067+ short _InterlockedCompareExchange16_nf (short volatile * Destination , short Exchange , short Comparand );
1068+ long _InterlockedCompareExchange (long volatile * Destination , long Exchange , long Comparand );
1069+ long _InterlockedCompareExchange_acq (long volatile * Destination , long Exchange , long Comparand );
1070+ long _InterlockedCompareExchange_rel (long volatile * Destination , long Exchange , long Comparand );
1071+ long _InterlockedCompareExchange_nf (long volatile * Destination , long Exchange , long Comparand );
1072+ __int64 _InterlockedCompareExchange64_acq (__int64 volatile * Destination , __int64 Exchange , __int64 Comparand );
1073+ __int64 _InterlockedCompareExchange64_rel (__int64 volatile * Destination , __int64 Exchange , __int64 Comparand );
1074+ __int64 _InterlockedCompareExchange64_nf (__int64 volatile * Destination , __int64 Exchange , __int64 Comparand );
1075+ void * _InterlockedCompareExchangePointer (void * volatile * Destination , void * Exchange , void * Comparand );
1076+ void * _InterlockedCompareExchangePointer_acq (void * volatile * Destination , void * Exchange , void * Comparand );
1077+ void * _InterlockedCompareExchangePointer_rel (void * volatile * Destination , void * Exchange , void * Comparand );
1078+ void * _InterlockedCompareExchangePointer_nf (void * volatile * Destination , void * Exchange , void * Comparand );
1079+ unsigned char _InterlockedCompareExchange128 (__int64 volatile * Destination , __int64 ExchangeHigh , __int64 ExchangeLow , __int64 * ComparandResult );
10121080#endif
10131081
10141082#if defined(_M_CEE_PURE )
0 commit comments