16bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* ===-------- intrin.h ---------------------------------------------------=== 26bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 36bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * Permission is hereby granted, free of charge, to any person obtaining a copy 46bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * of this software and associated documentation files (the "Software"), to deal 56bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * in the Software without restriction, including without limitation the rights 66bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 76bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * copies of the Software, and to permit persons to whom the Software is 86bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * furnished to do so, subject to the following conditions: 96bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * The above copyright notice and this permission notice shall be included in 116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * all copies or substantial portions of the Software. 126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * THE SOFTWARE. 206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker * 216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker *===-----------------------------------------------------------------------=== 226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker */ 236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* Only include this if we're compiling for the windows platform. */ 256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifndef _MSC_VER 266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#include_next <intrin.h> 276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#else 286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifndef __INTRIN_H 306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define __INTRIN_H 316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* First include the standard intrinsics. */ 336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__i386__) || defined(__x86_64__) 346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#include <x86intrin.h> 356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) 386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#include <armintr.h> 396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* For the definition of jmp_buf. */ 426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if __STDC_HOSTED__ 436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#include <setjmp.h> 446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* Define the default attributes for the functions in this file. */ 476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__)) 486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __cplusplus 506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerextern "C" { 516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__MMX__) 546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* And the random ones that aren't in those files. */ 556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__m64 _m_from_float(float); 566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerfloat _m_to_float(__m64); 576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* Other assorted instruction intrinsics. */ 606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __addfsbyte(unsigned long, unsigned char); 616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __addfsdword(unsigned long, unsigned long); 626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __addfsword(unsigned long, unsigned short); 636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __code_seg(const char *); 646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __cpuid(int[4], int); 666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __cpuidex(int[4], int, int); 686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __debugbreak(void); 696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 __emul(int, int); 716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __emulu(unsigned int, unsigned int); 736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __cdecl __fastfail(unsigned int); 746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int __getcallerseflags(void); 756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __halt(void); 776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __inbyte(unsigned short); 786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __inbytestring(unsigned short, unsigned char *, unsigned long); 796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __incfsbyte(unsigned long); 806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __incfsdword(unsigned long); 816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __incfsword(unsigned long); 826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __indword(unsigned short); 836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __indwordstring(unsigned short, unsigned long *, unsigned long); 846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __int2c(void); 856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __invlpg(void *); 866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short __inword(unsigned short); 876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __inwordstring(unsigned short, unsigned short *, unsigned long); 886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __lidt(void *); 896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __ll_lshift(unsigned __int64, int); 906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 __ll_rshift(__int64, int); 916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __llwpcb(void *); 926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __lwpins32(unsigned int, unsigned int, unsigned int); 936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __lwpval32(unsigned int, unsigned int, unsigned int); 946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int __lzcnt(unsigned int); 956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short __lzcnt16(unsigned short); 966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __movsb(unsigned char *, unsigned char const *, size_t); 986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __movsd(unsigned long *, unsigned long const *, size_t); 1006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __movsw(unsigned short *, unsigned short const *, size_t); 1026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __nop(void); 1046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __nvreg_restore_fence(void); 1056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __nvreg_save_fence(void); 1066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __outbyte(unsigned short, unsigned char); 1076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __outbytestring(unsigned short, unsigned char *, unsigned long); 1086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __outdword(unsigned short, unsigned long); 1096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __outdwordstring(unsigned short, unsigned long *, unsigned long); 1106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __outword(unsigned short, unsigned short); 1116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __outwordstring(unsigned short, unsigned short *, unsigned long); 1126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int __popcnt(unsigned int); 1146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short __popcnt16(unsigned short); 1166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __readcr0(void); 1176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __readcr2(void); 1186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __readcr3(void); 1206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __readcr4(void); 1216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __readcr8(void); 1226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int __readdr(unsigned int); 1236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __i386__ 1246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __readfsbyte(unsigned long); 1266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __readfsdword(unsigned long); 1286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __readfsqword(unsigned long); 1306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short __readfsword(unsigned long); 1326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 1336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __readmsr(unsigned long); 1356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __readpmc(unsigned long); 1366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __segmentlimit(unsigned long); 1376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __sidt(void *); 1386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *__slwpcb(void); 1396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __stosb(unsigned char *, unsigned char, size_t); 1416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __stosd(unsigned long *, unsigned long, size_t); 1436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __stosw(unsigned short *, unsigned short, size_t); 1456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __svm_clgi(void); 1466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __svm_invlpga(void *, int); 1476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __svm_skinit(int); 1486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __svm_stgi(void); 1496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __svm_vmload(size_t); 1506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __svm_vmrun(size_t); 1516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __svm_vmsave(size_t); 1526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __ud2(void); 1536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __ull_rshift(unsigned __int64, int); 1546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __vmx_off(void); 1556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __vmx_vmptrst(unsigned __int64 *); 1566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __wbinvd(void); 1576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writecr0(unsigned int); 1586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writecr3(unsigned int); 1606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writecr4(unsigned int); 1616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writecr8(unsigned int); 1626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writedr(unsigned int, unsigned int); 1636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writefsbyte(unsigned long, unsigned char); 1646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writefsdword(unsigned long, unsigned long); 1656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writefsqword(unsigned long, unsigned __int64); 1666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writefsword(unsigned long, unsigned short); 1676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writemsr(unsigned long, unsigned __int64); 1686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *_AddressOfReturnAddress(void); 1706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask); 1726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask); 1746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittest(long const *, long); 1766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittestandcomplement(long *, long); 1786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittestandreset(long *, long); 1806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittestandset(long *, long); 1826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __cdecl _byteswap_uint64(unsigned __int64); 1836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __cdecl _byteswap_ulong(unsigned long); 1846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short __cdecl _byteswap_ushort(unsigned short); 1856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __cdecl _disable(void); 1866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __cdecl _enable(void); 1876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedAddLargeStatistic(__int64 volatile *_Addend, long _Value); 1886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedAnd(long volatile *_Value, long _Mask); 1906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedAnd16(short volatile *_Value, short _Mask); 1926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedAnd8(char volatile *_Value, char _Mask); 1946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _interlockedbittestandreset(long volatile *, long); 1956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _interlockedbittestandset(long volatile *, long); 1976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 1986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong __cdecl _InterlockedCompareExchange(long volatile *_Destination, 1996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _Exchange, long _Comparand); 2006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedCompareExchange_HLEAcquire(long volatile *, long, long); 2016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedCompareExchange_HLERelease(long volatile *, long, long); 2026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedCompareExchange16(short volatile *_Destination, 2046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker short _Exchange, short _Comparand); 2056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedCompareExchange64(__int64 volatile *_Destination, 2076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _Exchange, __int64 _Comparand); 2086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedcompareExchange64_HLEAcquire(__int64 volatile *, __int64, 2096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64); 2106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64, 2116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64); 2126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedCompareExchange8(char volatile *_Destination, char _Exchange, 2146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker char _Comparand); 2156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *_InterlockedCompareExchangePointer_HLEAcquire(void *volatile *, void *, 2166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker void *); 2176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *_InterlockedCompareExchangePointer_HLERelease(void *volatile *, void *, 2186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker void *); 2196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong __cdecl _InterlockedDecrement(long volatile *_Addend); 2216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedDecrement16(short volatile *_Addend); 2236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedExchange(long volatile *_Target, long _Value); 2246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedExchange16(short volatile *_Target, short _Value); 2266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedExchange8(char volatile *_Target, char _Value); 2286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong __cdecl _InterlockedExchangeAdd(long volatile *_Addend, long _Value); 2306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedExchangeAdd_HLEAcquire(long volatile *, long); 2316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedExchangeAdd_HLERelease(long volatile *, long); 2326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedExchangeAdd16(short volatile *_Addend, short _Value); 2346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedExchangeAdd64_HLEAcquire(__int64 volatile *, __int64); 2356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedExchangeAdd64_HLERelease(__int64 volatile *, __int64); 2366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedExchangeAdd8(char volatile *_Addend, char _Value); 2386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong __cdecl _InterlockedIncrement(long volatile *_Addend); 2406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedIncrement16(short volatile *_Addend); 2426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedOr(long volatile *_Value, long _Mask); 2446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedOr16(short volatile *_Value, short _Mask); 2466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedOr8(char volatile *_Value, char _Mask); 2486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedXor(long volatile *_Value, long _Mask); 2506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedXor16(short volatile *_Value, short _Mask); 2526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedXor8(char volatile *_Value, char _Mask); 2546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __cdecl _invpcid(unsigned int, void *); 2556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __cdecl _lrotl(unsigned long, int); 2576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __cdecl _lrotr(unsigned long, int); 2596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void 2606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__attribute__((__deprecated__("use other intrinsics or C++11 atomics instead"))) 2616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_ReadBarrier(void); 2626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void 2636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__attribute__((__deprecated__("use other intrinsics or C++11 atomics instead"))) 2646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_ReadWriteBarrier(void); 2656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *_ReturnAddress(void); 2676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int _rorx_u32(unsigned int, const unsigned int); 2686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int __cdecl _rotl(unsigned int _Value, int _Shift); 2706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short _rotl16(unsigned short _Value, unsigned char _Shift); 2726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __cdecl _rotl64(unsigned __int64 _Value, int _Shift); 2746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _rotl8(unsigned char _Value, unsigned char _Shift); 2766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int __cdecl _rotr(unsigned int _Value, int _Shift); 2786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short _rotr16(unsigned short _Value, unsigned char _Shift); 2806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __cdecl _rotr64(unsigned __int64 _Value, int _Shift); 2826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _rotr8(unsigned char _Value, unsigned char _Shift); 2846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerint _sarx_i32(int, unsigned int); 2856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if __STDC_HOSTED__ 2866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerint __cdecl _setjmp(jmp_buf); 2876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 2886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int _shlx_u32(unsigned int, unsigned int); 2896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned int _shrx_u32(unsigned int, unsigned int); 2906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid _Store_HLERelease(long volatile *, long); 2916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid _Store64_HLERelease(__int64 volatile *, __int64); 2926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid _StorePointer_HLERelease(void *volatile *, void *); 2936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void 2946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__attribute__((__deprecated__("use other intrinsics or C++11 atomics instead"))) 2956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_WriteBarrier(void); 2966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int32 xbegin(void); 2976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid _xend(void); 2986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 2996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define _XCR_XFEATURE_ENABLED_MASK 0 3006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __cdecl _xgetbv(unsigned int); 3016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __cdecl _xsetbv(unsigned int, unsigned __int64); 3026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 3036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/* These additional intrinsics are turned on in x64/amd64/x86_64 mode. */ 3046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __x86_64__ 3056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __addgsbyte(unsigned long, unsigned char); 3066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __addgsdword(unsigned long, unsigned long); 3076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __addgsqword(unsigned long, unsigned __int64); 3086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __addgsword(unsigned long, unsigned short); 3096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __faststorefence(void); 3116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __incgsbyte(unsigned long); 3126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __incgsdword(unsigned long); 3136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __incgsqword(unsigned long); 3146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __incgsword(unsigned long); 3156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __lwpins64(unsigned __int64, unsigned int, unsigned int); 3166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __lwpval64(unsigned __int64, unsigned int, unsigned int); 3176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __lzcnt64(unsigned __int64); 3186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __movsq(unsigned long long *, unsigned long long const *, size_t); 3206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __popcnt64(unsigned __int64); 3226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __readgsbyte(unsigned long); 3246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned long __readgsdword(unsigned long); 3266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __readgsqword(unsigned long); 3286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned short __readgsword(unsigned long); 3296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __shiftleft128(unsigned __int64 _LowPart, 3306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned __int64 _HighPart, 3316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Shift); 3326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __shiftright128(unsigned __int64 _LowPart, 3336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned __int64 _HighPart, 3346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Shift); 3356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __stosq(unsigned __int64 *, unsigned __int64, size_t); 3376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __vmx_on(unsigned __int64 *); 3386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __vmx_vmclear(unsigned __int64 *); 3396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __vmx_vmlaunch(void); 3406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __vmx_vmptrld(unsigned __int64 *); 3416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __vmx_vmread(size_t, size_t *); 3426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __vmx_vmresume(void); 3436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char __vmx_vmwrite(size_t, size_t); 3446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writegsbyte(unsigned long, unsigned char); 3456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writegsdword(unsigned long, unsigned long); 3466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writegsqword(unsigned long, unsigned __int64); 3476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid __writegsword(unsigned long, unsigned short); 3486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask); 3506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask); 3526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittest64(__int64 const *, __int64); 3546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittestandcomplement64(__int64 *, __int64); 3566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittestandreset64(__int64 *, __int64); 3586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _bittestandset64(__int64 *, __int64); 3606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __cdecl _byteswap_uint64(unsigned __int64); 3616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedAnd_np(long volatile *_Value, long _Mask); 3626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedAnd16_np(short volatile *_Value, short _Mask); 3636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedAnd64_np(__int64 volatile *_Value, __int64 _Mask); 3646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedAnd8_np(char volatile *_Value, char _Mask); 3656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _interlockedbittestandreset64(__int64 volatile *, __int64); 3666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 3676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _interlockedbittestandset64(__int64 volatile *, __int64); 3686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedCompareExchange_np(long volatile *_Destination, long _Exchange, 3696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _Comparand); 3706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _InterlockedCompareExchange128(__int64 volatile *_Destination, 3716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _ExchangeHigh, 3726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _ExchangeLow, 3736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 *_CompareandResult); 3746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned char _InterlockedCompareExchange128_np(__int64 volatile *_Destination, 3756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _ExchangeHigh, 3766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _ExchangeLow, 3776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 *_ComparandResult); 3786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedCompareExchange16_np(short volatile *_Destination, 3796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker short _Exchange, short _Comparand); 3806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedCompareExchange64_HLEAcquire(__int64 volatile *, __int64, 3816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64); 3826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64, 3836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64); 3846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedCompareExchange64_np(__int64 volatile *_Destination, 3856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _Exchange, __int64 _Comparand); 3866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *_InterlockedCompareExchangePointer(void *volatile *_Destination, 3876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker void *_Exchange, void *_Comparand); 3886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *_InterlockedCompareExchangePointer_np(void *volatile *_Destination, 3896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker void *_Exchange, void *_Comparand); 3906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickervoid *_InterlockedExchangePointer(void *volatile *_Target, void *_Value); 3916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedOr_np(long volatile *_Value, long _Mask); 3926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedOr16_np(short volatile *_Value, short _Mask); 3936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedOr64_np(__int64 volatile *_Value, __int64 _Mask); 3946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedOr8_np(char volatile *_Value, char _Mask); 3956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerlong _InterlockedXor_np(long volatile *_Value, long _Mask); 3966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickershort _InterlockedXor16_np(short volatile *_Value, short _Mask); 3976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedXor64_np(__int64 volatile *_Value, __int64 _Mask); 3986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerchar _InterlockedXor8_np(char volatile *_Value, char _Mask); 3996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 _rorx_u64(unsigned __int64, const unsigned int); 4006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _sarx_i64(__int64, unsigned int); 4016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if __STDC_HOSTED__ 4026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerint __cdecl _setjmpex(jmp_buf); 4036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 4046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 _shlx_u64(unsigned __int64, unsigned int); 4056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 _shrx_u64(unsigned __int64, unsigned int); 4066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 __mulh(__int64, __int64); 4086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 __umulh(unsigned __int64, unsigned __int64); 4106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _mul128(__int64, __int64, __int64*); 4126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerunsigned __int64 _umul128(unsigned __int64, 4146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned __int64, 4156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned __int64*); 4166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 4176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif /* __x86_64__ */ 4186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 4196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__x86_64__) || defined(__arm__) 4206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 4216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedDecrement64(__int64 volatile *_Addend); 4236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedExchange64(__int64 volatile *_Target, __int64 _Value); 4256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedExchangeAdd64(__int64 volatile *_Addend, __int64 _Value); 4276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedExchangeSub64(__int64 volatile *_Subend, __int64 _Value); 4296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedIncrement64(__int64 volatile *_Addend); 4316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedOr64(__int64 volatile *_Value, __int64 _Mask); 4336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedXor64(__int64 volatile *_Value, __int64 _Mask); 4356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ 4366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__int64 _InterlockedAnd64(__int64 volatile *_Value, __int64 _Mask); 4376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 4386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 4396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 4406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 4416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Bit Counting and Testing 4426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 4436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittest(long const *_BitBase, long _BitPos) { 4456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (*_BitBase >> _BitPos) & 1; 4466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittestandcomplement(long *_BitBase, long _BitPos) { 4496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Res = (*_BitBase >> _BitPos) & 1; 4506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker *_BitBase = *_BitBase ^ (1 << _BitPos); 4516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Res; 4526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittestandreset(long *_BitBase, long _BitPos) { 4556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Res = (*_BitBase >> _BitPos) & 1; 4566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker *_BitBase = *_BitBase & ~(1 << _BitPos); 4576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Res; 4586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittestandset(long *_BitBase, long _BitPos) { 4616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Res = (*_BitBase >> _BitPos) & 1; 4626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker *_BitBase = *_BitBase | (1 << _BitPos); 4636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Res; 4646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_interlockedbittestandset(long volatile *_BitBase, long _BitPos) { 4676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_SEQ_CST); 4686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (_PrevVal >> _BitPos) & 1; 4696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 4716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_interlockedbittestandset_acq(long volatile *_BitBase, long _BitPos) { 4736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_ACQUIRE); 4746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (_PrevVal >> _BitPos) & 1; 4756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_interlockedbittestandset_nf(long volatile *_BitBase, long _BitPos) { 4786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_RELAXED); 4796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (_PrevVal >> _BitPos) & 1; 4806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_interlockedbittestandset_rel(long volatile *_BitBase, long _BitPos) { 4836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _PrevVal = __atomic_fetch_or(_BitBase, 1l << _BitPos, __ATOMIC_RELEASE); 4846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (_PrevVal >> _BitPos) & 1; 4856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 4876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __x86_64__ 4886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittest64(__int64 const *_BitBase, __int64 _BitPos) { 4906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (*_BitBase >> _BitPos) & 1; 4916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittestandcomplement64(__int64 *_BitBase, __int64 _BitPos) { 4946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Res = (*_BitBase >> _BitPos) & 1; 4956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker *_BitBase = *_BitBase ^ (1ll << _BitPos); 4966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Res; 4976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 4986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 4996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittestandreset64(__int64 *_BitBase, __int64 _BitPos) { 5006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Res = (*_BitBase >> _BitPos) & 1; 5016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker *_BitBase = *_BitBase & ~(1ll << _BitPos); 5026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Res; 5036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 5056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_bittestandset64(__int64 *_BitBase, __int64 _BitPos) { 5066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned char _Res = (*_BitBase >> _BitPos) & 1; 5076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker *_BitBase = *_BitBase | (1ll << _BitPos); 5086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Res; 5096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 5116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_interlockedbittestandset64(__int64 volatile *_BitBase, __int64 _BitPos) { 5126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long long _PrevVal = 5136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_fetch_or(_BitBase, 1ll << _BitPos, __ATOMIC_SEQ_CST); 5146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (_PrevVal >> _BitPos) & 1; 5156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 5176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 5186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked Exchange Add 5196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 5206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 5216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 5226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd8_acq(char volatile *_Addend, char _Value) { 5236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE); 5246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 5266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd8_nf(char volatile *_Addend, char _Value) { 5276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED); 5286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 5306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd8_rel(char volatile *_Addend, char _Value) { 5316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED); 5326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 5346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd16_acq(short volatile *_Addend, short _Value) { 5356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE); 5366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 5386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd16_nf(short volatile *_Addend, short _Value) { 5396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED); 5406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 5426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd16_rel(short volatile *_Addend, short _Value) { 5436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELEASE); 5446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 5466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd_acq(long volatile *_Addend, long _Value) { 5476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE); 5486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 5506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd_nf(long volatile *_Addend, long _Value) { 5516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED); 5526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 5546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd_rel(long volatile *_Addend, long _Value) { 5556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELEASE); 5566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 5586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd64_acq(__int64 volatile *_Addend, __int64 _Value) { 5596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_ACQUIRE); 5606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 5626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd64_nf(__int64 volatile *_Addend, __int64 _Value) { 5636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELAXED); 5646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 5666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchangeAdd64_rel(__int64 volatile *_Addend, __int64 _Value) { 5676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_add(_Addend, _Value, __ATOMIC_RELEASE); 5686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 5706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 5716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked Increment 5726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 5736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 5746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 5756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement16_acq(short volatile *_Value) { 5766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_ACQUIRE); 5776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 5796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement16_nf(short volatile *_Value) { 5806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_RELAXED); 5816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 5836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement16_rel(short volatile *_Value) { 5846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_RELEASE); 5856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 5876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement_acq(long volatile *_Value) { 5886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_ACQUIRE); 5896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 5916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement_nf(long volatile *_Value) { 5926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_RELAXED); 5936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 5956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement_rel(long volatile *_Value) { 5966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_RELEASE); 5976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 5986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 5996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement64_acq(__int64 volatile *_Value) { 6006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_ACQUIRE); 6016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 6036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement64_nf(__int64 volatile *_Value) { 6046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_RELAXED); 6056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 6076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedIncrement64_rel(__int64 volatile *_Value) { 6086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_add_fetch(_Value, 1, __ATOMIC_RELEASE); 6096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 6116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 6126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked Decrement 6136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 6146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 6156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 6166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement16_acq(short volatile *_Value) { 6176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_ACQUIRE); 6186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 6206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement16_nf(short volatile *_Value) { 6216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELAXED); 6226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 6246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement16_rel(short volatile *_Value) { 6256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELEASE); 6266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 6286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement_acq(long volatile *_Value) { 6296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_ACQUIRE); 6306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 6326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement_nf(long volatile *_Value) { 6336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELAXED); 6346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 6366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement_rel(long volatile *_Value) { 6376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELEASE); 6386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 6406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement64_acq(__int64 volatile *_Value) { 6416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_ACQUIRE); 6426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 6446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement64_nf(__int64 volatile *_Value) { 6456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELAXED); 6466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 6486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedDecrement64_rel(__int64 volatile *_Value) { 6496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_sub_fetch(_Value, 1, __ATOMIC_RELEASE); 6506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 6526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 6536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked And 6546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 6556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 6566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 6576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd8_acq(char volatile *_Value, char _Mask) { 6586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE); 6596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 6616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd8_nf(char volatile *_Value, char _Mask) { 6626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED); 6636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 6656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd8_rel(char volatile *_Value, char _Mask) { 6666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE); 6676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 6696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd16_acq(short volatile *_Value, short _Mask) { 6706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE); 6716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 6736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd16_nf(short volatile *_Value, short _Mask) { 6746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED); 6756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 6776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd16_rel(short volatile *_Value, short _Mask) { 6786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE); 6796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 6816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd_acq(long volatile *_Value, long _Mask) { 6826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE); 6836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 6856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd_nf(long volatile *_Value, long _Mask) { 6866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED); 6876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 6896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd_rel(long volatile *_Value, long _Mask) { 6906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE); 6916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 6936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd64_acq(__int64 volatile *_Value, __int64 _Mask) { 6946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_ACQUIRE); 6956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 6966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 6976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd64_nf(__int64 volatile *_Value, __int64 _Mask) { 6986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELAXED); 6996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 7016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedAnd64_rel(__int64 volatile *_Value, __int64 _Mask) { 7026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_and(_Value, _Mask, __ATOMIC_RELEASE); 7036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 7056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 7066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked Or 7076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 7086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 7096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 7106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr8_acq(char volatile *_Value, char _Mask) { 7116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE); 7126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 7146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr8_nf(char volatile *_Value, char _Mask) { 7156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED); 7166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 7186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr8_rel(char volatile *_Value, char _Mask) { 7196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE); 7206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 7226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr16_acq(short volatile *_Value, short _Mask) { 7236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE); 7246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 7266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr16_nf(short volatile *_Value, short _Mask) { 7276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED); 7286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 7306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr16_rel(short volatile *_Value, short _Mask) { 7316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE); 7326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 7346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr_acq(long volatile *_Value, long _Mask) { 7356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE); 7366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 7386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr_nf(long volatile *_Value, long _Mask) { 7396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED); 7406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 7426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr_rel(long volatile *_Value, long _Mask) { 7436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE); 7446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 7466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr64_acq(__int64 volatile *_Value, __int64 _Mask) { 7476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_ACQUIRE); 7486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 7506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr64_nf(__int64 volatile *_Value, __int64 _Mask) { 7516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELAXED); 7526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 7546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedOr64_rel(__int64 volatile *_Value, __int64 _Mask) { 7556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_or(_Value, _Mask, __ATOMIC_RELEASE); 7566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 7586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 7596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked Xor 7606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 7616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 7626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 7636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor8_acq(char volatile *_Value, char _Mask) { 7646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE); 7656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 7676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor8_nf(char volatile *_Value, char _Mask) { 7686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED); 7696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 7716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor8_rel(char volatile *_Value, char _Mask) { 7726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE); 7736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 7756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor16_acq(short volatile *_Value, short _Mask) { 7766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE); 7776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 7796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor16_nf(short volatile *_Value, short _Mask) { 7806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED); 7816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 7836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor16_rel(short volatile *_Value, short _Mask) { 7846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE); 7856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 7876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor_acq(long volatile *_Value, long _Mask) { 7886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE); 7896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 7916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor_nf(long volatile *_Value, long _Mask) { 7926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED); 7936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 7956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor_rel(long volatile *_Value, long _Mask) { 7966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE); 7976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 7986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 7996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor64_acq(__int64 volatile *_Value, __int64 _Mask) { 8006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_ACQUIRE); 8016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 8036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor64_nf(__int64 volatile *_Value, __int64 _Mask) { 8046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELAXED); 8056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 8076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedXor64_rel(__int64 volatile *_Value, __int64 _Mask) { 8086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __atomic_fetch_xor(_Value, _Mask, __ATOMIC_RELEASE); 8096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 8116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 8126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked Exchange 8136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 8146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 8156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 8166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange8_acq(char volatile *_Target, char _Value) { 8176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE); 8186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 8216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange8_nf(char volatile *_Target, char _Value) { 8226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED); 8236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 8266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange8_rel(char volatile *_Target, char _Value) { 8276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE); 8286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 8316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange16_acq(short volatile *_Target, short _Value) { 8326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE); 8336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 8366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange16_nf(short volatile *_Target, short _Value) { 8376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED); 8386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 8416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange16_rel(short volatile *_Target, short _Value) { 8426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE); 8436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 8466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange_acq(long volatile *_Target, long _Value) { 8476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE); 8486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 8516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange_nf(long volatile *_Target, long _Value) { 8526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED); 8536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 8566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange_rel(long volatile *_Target, long _Value) { 8576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE); 8586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 8616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange64_acq(__int64 volatile *_Target, __int64 _Value) { 8626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_ACQUIRE); 8636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 8666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange64_nf(__int64 volatile *_Target, __int64 _Value) { 8676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELAXED); 8686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 8716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedExchange64_rel(__int64 volatile *_Target, __int64 _Value) { 8726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_exchange(_Target, &_Value, &_Value, __ATOMIC_RELEASE); 8736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Value; 8746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 8766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 8776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Interlocked Compare Exchange 8786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 8796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__arm__) || defined(__aarch64__) 8806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 8816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange8_acq(char volatile *_Destination, 8826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker char _Exchange, char _Comparand) { 8836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 8846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE); 8856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 8866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 8886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange8_nf(char volatile *_Destination, 8896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker char _Exchange, char _Comparand) { 8906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 8916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELAXED); 8926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 8936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 8946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ char __DEFAULT_FN_ATTRS 8956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange8_rel(char volatile *_Destination, 8966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker char _Exchange, char _Comparand) { 8976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 8986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELEASE); 8996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 9026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange16_acq(short volatile *_Destination, 9036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker short _Exchange, short _Comparand) { 9046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE); 9066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 9096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange16_nf(short volatile *_Destination, 9106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker short _Exchange, short _Comparand) { 9116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELAXED); 9136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 9166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange16_rel(short volatile *_Destination, 9176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker short _Exchange, short _Comparand) { 9186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELEASE); 9206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 9236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange_acq(long volatile *_Destination, 9246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _Exchange, long _Comparand) { 9256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE); 9276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ long __DEFAULT_FN_ATTRS 9306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange_nf(long volatile *_Destination, 9316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _Exchange, long _Comparand) { 9326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELAXED); 9346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ short __DEFAULT_FN_ATTRS 9376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange_rel(long volatile *_Destination, 9386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker long _Exchange, long _Comparand) { 9396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELEASE); 9416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 9446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange64_acq(__int64 volatile *_Destination, 9456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _Exchange, __int64 _Comparand) { 9466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_ACQUIRE); 9486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 9516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange64_nf(__int64 volatile *_Destination, 9526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _Exchange, __int64 _Comparand) { 9536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELAXED); 9556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ __int64 __DEFAULT_FN_ATTRS 9586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_InterlockedCompareExchange64_rel(__int64 volatile *_Destination, 9596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __int64 _Exchange, __int64 _Comparand) { 9606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 9616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __ATOMIC_SEQ_CST, __ATOMIC_RELEASE); 9626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return _Comparand; 9636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 9656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 9666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* readfs, readgs 9676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* (Pointers in address space #256 and #257 are relative to the GS and FS 9686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* segment registers, respectively.) 9696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 9706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#define __ptr_to_addr_space(__addr_space_nbr, __type, __offset) \ 9716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker ((volatile __type __attribute__((__address_space__(__addr_space_nbr)))*) \ 9726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker (__offset)) 9736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 9746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __i386__ 9756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 9766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readfsbyte(unsigned long __offset) { 9776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return *__ptr_to_addr_space(257, unsigned char, __offset); 9786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned short __DEFAULT_FN_ATTRS 9806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readfsword(unsigned long __offset) { 9816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return *__ptr_to_addr_space(257, unsigned short, __offset); 9826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned __int64 __DEFAULT_FN_ATTRS 9846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readfsqword(unsigned long __offset) { 9856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return *__ptr_to_addr_space(257, unsigned __int64, __offset); 9866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 9886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __x86_64__ 9896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned char __DEFAULT_FN_ATTRS 9906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readgsbyte(unsigned long __offset) { 9916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return *__ptr_to_addr_space(256, unsigned char, __offset); 9926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned short __DEFAULT_FN_ATTRS 9946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readgsword(unsigned long __offset) { 9956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return *__ptr_to_addr_space(256, unsigned short, __offset); 9966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 9976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned long __DEFAULT_FN_ATTRS 9986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readgsdword(unsigned long __offset) { 9996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return *__ptr_to_addr_space(256, unsigned long, __offset); 10006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned __int64 __DEFAULT_FN_ATTRS 10026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readgsqword(unsigned long __offset) { 10036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return *__ptr_to_addr_space(256, unsigned __int64, __offset); 10046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 10066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#undef __ptr_to_addr_space 10076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 10086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* movs, stos 10096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 10106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__i386__) || defined(__x86_64__) 10116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__movsb(unsigned char *__dst, unsigned char const *__src, size_t __n) { 10136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__("rep movsb" : : "D"(__dst), "S"(__src), "c"(__n) 10146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "%edi", "%esi", "%ecx"); 10156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__movsd(unsigned long *__dst, unsigned long const *__src, size_t __n) { 10186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__("rep movsl" : : "D"(__dst), "S"(__src), "c"(__n) 10196bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "%edi", "%esi", "%ecx"); 10206bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10216bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10226bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__movsw(unsigned short *__dst, unsigned short const *__src, size_t __n) { 10236bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__("rep movsw" : : "D"(__dst), "S"(__src), "c"(__n) 10246bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "%edi", "%esi", "%ecx"); 10256bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10266bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10276bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__stosd(unsigned long *__dst, unsigned long __x, size_t __n) { 10286bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__("rep stosl" : : "D"(__dst), "a"(__x), "c"(__n) 10296bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "%edi", "%ecx"); 10306bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10316bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10326bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__stosw(unsigned short *__dst, unsigned short __x, size_t __n) { 10336bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__("rep stosw" : : "D"(__dst), "a"(__x), "c"(__n) 10346bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "%edi", "%ecx"); 10356bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10366bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 10376bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __x86_64__ 10386bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10396bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__movsq(unsigned long long *__dst, unsigned long long const *__src, size_t __n) { 10406bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__("rep movsq" : : "D"(__dst), "S"(__src), "c"(__n) 10416bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "%edi", "%esi", "%ecx"); 10426bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10436bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10446bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__stosq(unsigned __int64 *__dst, unsigned __int64 __x, size_t __n) { 10456bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__("rep stosq" : : "D"(__dst), "a"(__x), "c"(__n) 10466bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "%edi", "%ecx"); 10476bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10486bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 10496bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 10506bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 10516bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Misc 10526bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 10536bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__i386__) || defined(__x86_64__) 10546bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10556bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__cpuid(int __info[4], int __level) { 10566bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3]) 10576bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "a"(__level)); 10586bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10596bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10606bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__cpuidex(int __info[4], int __level, int __ecx) { 10616bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3]) 10626bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker : "a"(__level), "c"(__ecx)); 10636bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10646bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned __int64 __cdecl __DEFAULT_FN_ATTRS 10656bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker_xgetbv(unsigned int __xcr_no) { 10666bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned int __eax, __edx; 10676bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ ("xgetbv" : "=a" (__eax), "=d" (__edx) : "c" (__xcr_no)); 10686bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return ((unsigned __int64)__edx << 32) | __eax; 10696bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10706bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10716bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__halt(void) { 10726bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ volatile ("hlt"); 10736bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10746bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 10756bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__nop(void) { 10766bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ volatile ("nop"); 10776bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10786bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 10796bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 10806bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker/*----------------------------------------------------------------------------*\ 10816bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker|* Privileged intrinsics 10826bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker\*----------------------------------------------------------------------------*/ 10836bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#if defined(__i386__) || defined(__x86_64__) 10846bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned __int64 __DEFAULT_FN_ATTRS 10856bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readmsr(unsigned long __register) { 10866bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker // Loads the contents of a 64-bit model specific register (MSR) specified in 10876bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker // the ECX register into registers EDX:EAX. The EDX register is loaded with 10886bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker // the high-order 32 bits of the MSR and the EAX register is loaded with the 10896bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker // low-order 32 bits. If less than 64 bits are implemented in the MSR being 10906bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker // read, the values returned to EDX:EAX in unimplemented bit locations are 10916bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker // undefined. 10926bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long __edx; 10936bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long __eax; 10946bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ ("rdmsr" : "=d"(__edx), "=a"(__eax) : "c"(__register)); 10956bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return (((unsigned __int64)__edx) << 32) | (unsigned __int64)__eax; 10966bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 10976bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 10986bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ unsigned long __DEFAULT_FN_ATTRS 10996bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__readcr3(void) { 11006bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker unsigned long __cr3_val; 11016bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ __volatile__ ("mov %%cr3, %0" : "=q"(__cr3_val) : : "memory"); 11026bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker return __cr3_val; 11036bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 11046bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 11056bdbd720989797e8a53237ef3ef213c4114f869gitbuildkickerstatic __inline__ void __DEFAULT_FN_ATTRS 11066bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker__writecr3(unsigned int __cr3_val) { 11076bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker __asm__ ("mov %0, %%cr3" : : "q"(__cr3_val) : "memory"); 11086bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 11096bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 11106bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 11116bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#ifdef __cplusplus 11126bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker} 11136bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif 11146bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 11156bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#undef __DEFAULT_FN_ATTRS 11166bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker 11176bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif /* __INTRIN_H */ 11186bdbd720989797e8a53237ef3ef213c4114f869gitbuildkicker#endif /* _MSC_VER */ 1119