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