Intrin.h revision 97b94cb783237b3b14e988dced3d2bb48e016edc
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* ===-------- Intrin.h ---------------------------------------------------===
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a copy
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * of this software and associated documentation files (the "Software"), to deal
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * in the Software without restriction, including without limitation the rights
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * copies of the Software, and to permit persons to whom the Software is
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * furnished to do so, subject to the following conditions:
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * The above copyright notice and this permission notice shall be included in
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * all copies or substantial portions of the Software.
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THE SOFTWARE.
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *===-----------------------------------------------------------------------===
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Only include this if we're compiling for the windows platform. */
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef _MSC_VER
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include_next <Intrin.h>
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef __INTRIN_H
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define __INTRIN_H
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* First include the standard intrinsics. */
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <x86intrin.h>
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef __cplusplus
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)extern "C" {
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* And the random ones that aren't in those files. */
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__m64 _m_from_float(float);
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__m64 _m_from_int(int _l);
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _m_prefetch(void *);
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)float _m_to_float(__m64);
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _m_to_int(__m64 _M);
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* Other assorted instruction intrinsics. */
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __addfsbyte(unsigned long, unsigned char);
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __addfsdword(unsigned long, unsigned long);
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __addfsword(unsigned long, unsigned short);
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __code_seg(const char *);
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cpuid(int[4], int);
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cpuidex(int[4], int, int);
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __debugbreak(void);
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 __emul(int, int);
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __emulu(unsigned int, unsigned int);
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl __fastfail(unsigned int);
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __getcallerseflags(void);
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __halt(void);
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char __inbyte(unsigned short);
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __inbytestring(unsigned short, unsigned char *, unsigned long);
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __incfsbyte(unsigned long);
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __incfsdword(unsigned long);
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __incfsword(unsigned long);
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __indword(unsigned short);
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __indwordstring(unsigned short, unsigned long *, unsigned long);
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __int2c(void);
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __invlpg(void *);
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned short __inword(unsigned short);
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __inwordstring(unsigned short, unsigned short *, unsigned long);
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __lidt(void *);
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __ll_lshift(unsigned __int64, int);
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 __ll_rshift(__int64, int);
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __llwpcb(void *);
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char __lwpins32(unsigned int, unsigned int, unsigned int);
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __lwpval32(unsigned int, unsigned int, unsigned int);
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __lzcnt(unsigned int);
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned short __lzcnt16(unsigned short);
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __movsb(unsigned char *, unsigned char const *, size_t);
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __movsd(unsigned long *, unsigned long const *, size_t);
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __movsw(unsigned short *, unsigned short const *, size_t);
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __nop(void);
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __nvreg_restore_fence(void);
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __nvreg_save_fence(void);
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __outbyte(unsigned short, unsigned char);
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __outbytestring(unsigned short, unsigned char *, unsigned long);
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __outdword(unsigned short, unsigned long);
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __outdwordstring(unsigned short, unsigned long *, unsigned long);
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __outword(unsigned short, unsigned short);
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __outwordstring(unsigned short, unsigned short *, unsigned long);
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __popcnt(unsigned int);
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned short __popcnt16(unsigned short);
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __rdtsc(void);
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __rdtscp(unsigned int *);
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __readcr0(void);
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __readcr2(void);
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __readcr3(void);
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __readcr5(void);
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __readcr8(void);
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __readdr(unsigned int);
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __readeflags(void);
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char __readfsbyte(unsigned long);
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __readfsdword(unsigned long);
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __readfsqword(unsigned long);
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned short __readfsword(unsigned long);
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __readmsr(unsigned long);
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __readpmc(unsigned long);
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __segmentlimit(unsigned long);
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __sidt(void *);
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void *__slwpcb(void);
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __stosb(unsigned char *, unsigned char, size_t);
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __stosd(unsigned long *, unsigned long, size_t);
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __stosw(unsigned short *, unsigned short, size_t);
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __svm_clgi(void);
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __svm_invlpga(void *, int);
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __svm_skinit(int);
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __svm_stgi(void);
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __svm_vmload(size_t);
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __svm_vmrun(size_t);
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __svm_vmsave(size_t);
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __ud2(void);
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __ull_rshift(unsigned __int64, int);
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __vmx_off(void);
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __vmx_vmptrst(unsigned __int64 *);
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __wbinvd(void);
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writecr0(unsigned int);
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writecr3(unsigned int);
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writecr4(unsigned int);
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writecr8(unsigned int);
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writedr(unsigned int, unsigned int);
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writeeflags(unsigned int);
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writefsbyte(unsigned long, unsigned char);
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writefsdword(unsigned long, unsigned long);
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writefsqword(unsigned long, unsigned __int64);
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writefsword(unsigned long, unsigned short);
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __writemsr(unsigned long, unsigned __int64);
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void *_AddressOfReturnAddress(void);
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _andn_u32(unsigned int, unsigned int);
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _bextr_u32(unsigned int, unsigned int, unsigned int);
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _bextr_u32(unsigned int, unsigned int, unsigned int);
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _bextri_u32(unsigned int, unsigned int);
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask);
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask);
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittest(long const *, long);
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittestandcomplement(long *, long);
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittestandreset(long *, long);
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittestandset(long *, long);
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blcfill_u32(unsigned int);
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blci_u32(unsigned int);
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blcic_u32(unsigned int);
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blcmsk_u32(unsigned int);
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blcs_u32(unsigned int);
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blsfill_u32(unsigned int);
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blsi_u32(unsigned int);
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blsic_u32(unsigned int);
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blsmsk_u32(unsigned int);
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blsmsk_u32(unsigned int);
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blsr_u32(unsigned int);
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _blsr_u32(unsigned int);
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __cdecl _byteswap_ulong(unsigned long);
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned short __cdecl _byteswap_ushort(unsigned short);
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned _bzhi_u32(unsigned int, unsigned int);
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _disable(void);
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _enable(void);
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _fxrstor(void const *);
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _fxsave(void *);
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedAddLargeStatistic(__int64 volatile *_Addend, long _Value);
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedAnd(long volatile *_Value, long _Mask);
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedAnd16(short volatile *_Value, short _Mask);
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedAnd8(char volatile *_Value, char _Mask);
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _interlockedbittestandreset(long volatile *, long);
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _interlockedbittestandset(long volatile *, long);
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long __cdecl _InterlockedCompareExchange(long volatile *_Destination,
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         long _Exchange, long _Comparand);
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedCompareExchange_HLEAcquire(long volatile *, long, long);
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedCompareExchange_HLERelease(long volatile *, long, long);
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedCompareExchange16(short volatile *_Destination,
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                    short _Exchange, short _Comparand);
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _InterlockedCompareExchange64(__int64 volatile *_Destination,
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                      __int64 _Exchange, __int64 _Comparand);
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _InterlockedcompareExchange64_HLEAcquire(__int64 volatile *, __int64,
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                 __int64);
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64,
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                 __int64);
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedCompareExchange8(char volatile *_Destination, char _Exchange,
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  char _Comparand);
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void *_InterlockedCompareExchangePointer_HLEAcquire(void *volatile *, void *,
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                    void *);
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void *_InterlockedCompareExchangePointer_HLERelease(void *volatile *, void *,
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                    void *);
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long __cdecl _InterlockedDecrement(long volatile *_Addend);
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedDecrement16(short volatile *_Addend);
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long __cdecl _InterlockedExchange(long volatile *_Target, long _Value);
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedExchange16(short volatile *_Target, short _Value);
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedExchange8(char volatile *_Target, char _Value);
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long __cdecl _InterlockedExchangeAdd(long volatile *_Addend, long _Value);
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedExchangeAdd_HLEAcquire(long volatile *, long);
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedExchangeAdd_HLERelease(long volatile *, long);
221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedExchangeAdd8(char volatile *_Addend, char _Value);
223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long __cdecl _InterlockedIncrement(long volatile *_Addend);
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedIncrement16(short volatile *_Addend);
227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedOr(long volatile *_Value, long _Mask);
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedOr16(short volatile *_Value, short _Mask);
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedOr8(char volatile *_Value, char _Mask);
233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedXor(long volatile *_Value, long _Mask);
235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedXor16(short volatile *_Value, short _Mask);
237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedXor8(char volatile *_Value, char _Mask);
239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _invpcid(unsigned int, void *);
240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __cdecl _lrotl(unsigned long, int);
242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned long __cdecl _lrotr(unsigned long, int);
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _lzcnt_u32(unsigned int);
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _ReadBarrier(void);
247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _ReadWriteBarrier(void);
248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void *_ReturnAddress(void);
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _rorx_u32(unsigned int, const unsigned int);
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int __cdecl _rdrand16_step(unsigned short *);
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int __cdecl _rdrand32_step(unsigned int *);
253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __cdecl _rotl(unsigned int _Value, int _Shift);
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned short _rotl16(unsigned short _Value, unsigned char _Shift);
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __cdecl _rotl64(unsigned __int64 _Value, int _Shift);
259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _rotl8(unsigned char _Value, unsigned char _Shift);
261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __cdecl _rotr(unsigned int _Value, int _Shift);
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned short _rotr16(unsigned short _Value, unsigned char _Shift);
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __cdecl _rotr64(unsigned __int64 _Value, int _Shift);
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _rotr8(unsigned char _Value, unsigned char _Shift);
269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)int _sarx_i32(int, unsigned int);
270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* FIXME: Need definition for jmp_buf.
272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   int __cdecl _setjmp(jmp_buf); */
273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _shlx_u32(unsigned int, unsigned int);
275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _shrx_u32(unsigned int, unsigned int);
276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _Store_HLERelease(long volatile *, long);
277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _Store64_HLERelease(__int64 volatile *, __int64);
278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _StorePointer_HLERelease(void *volatile *, void *);
279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _t1mskc_u32(unsigned int);
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _tzcnt_u32(unsigned int);
281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _tzcnt_u32(unsigned int);
282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int _tzmsk_u32(unsigned int);
283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _WriteBarrier(void);
284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _xabort(const unsigned int imm);
285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int32 xbegin(void);
286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _xend(void);
287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __cdecl _xgetbv(unsigned int);
288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _xrstor(void const *, unsigned __int64);
289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _xsave(void *, unsigned __int64);
290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _xsaveopt(void *, unsigned __int64);
291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _xsetbv(unsigned int, unsigned __int64);
292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _xtest(void);
293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* These additional intrinsics are turned on in x64/amd64/x86_64 mode. */
295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifdef __X86_64__
296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __addgsbyte(unsigned long, unsigned char);
297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __addgsdword(unsigned long, unsigned long);
298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __addgsqword(unsigned long, unsigned __int64);
299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __addgsword(unsigned long, unsigned short);
300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __faststorefence(void);
30103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void __incgsbyte(unsigned long);
302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __incgsdword(unsigned long);
303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __incgsqword(unsigned long);
304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __incgsword(unsigned long);
305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __popcnt64(unsigned __int64);
306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __shiftleft128(unsigned __int64 _LowPart,
307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                unsigned __int64 _HighPart,
308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                unsigned char _Shift);
309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __shiftright128(unsigned __int64 _LowPart,
310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 unsigned __int64 _HighPart,
311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                 unsigned char _Shift);
312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __stosq(unsigned __int64 *, unsigned __int64, size_t);
313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _andn_u64(unsigned __int64, unsigned __int64);
314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _bextr_u64(unsigned __int64, unsigned int, unsigned int);
315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _bextri_u64(unsigned __int64, unsigned int);
316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask);
318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask);
320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittest64(__int64 const *, __int64);
322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittestandcomplement64(__int64 *, __int64);
324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittestandreset64(__int64 *, __int64);
326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__
327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _bittestandset64(__int64 *, __int64);
328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blcfill_u64(unsigned __int64);
329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blci_u64(unsigned __int64);
330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blcic_u64(unsigned __int64);
331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blcmsk_u64(unsigned __int64);
332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blcs_u64(unsigned __int64);
333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blsfill_u64(unsigned __int64);
334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blsi_u64(unsigned __int64);
335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blsic_u64(unsigned __int64);
336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blmsk_u64(unsigned __int64);
337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _blsr_u64(unsigned __int64);
338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _bzhi_u64(unsigned __int64, unsigned int);
340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _fxrstor64(void const *);
341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _fxsave64(void *);
342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedAnd_np(long volatile *_Value, long _Mask);
343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedAnd16_np(short volatile *_Value, short _Mask);
344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _InterlockedAnd64_np(__int64 volatile *_Value, __int64 _Mask);
345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedAnd8_np(char volatile *_Value, char _Mask);
346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _interlockedbittestandreset64(__int64 volatile *, __int64);
347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _interlockedbittestandset64(__int64 volatile *, __int64);
348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedCompareExchange_np(long volatile *_Destination, long _Exchange,
349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                    long _Comparand);
350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _InterlockedCompareExchange128(__int64 volatile *_Destination,
351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                             __int64 _ExchangeHigh,
352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                             __int64 _ExchangeLow,
353f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                             __int64 *_CompareandResult);
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned char _InterlockedCompareExchange128_np(__int64 volatile *_Destination,
355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                __int64 _ExchangeHigh,
356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                __int64 _ExchangeLow,
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                                __int64 *_ComparandResult);
358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedCompareExchange16_np(short volatile *_Destination,
359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                       short _Exchange, short _Comparand);
360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _InterlockedCompareExchange64_np(__int64 volatile *_Destination,
361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         __int64 _Exchange, __int64 _Comparand);
362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void *_InterlockedCompareExchangePointer_np(void *volatile *_Destination,
363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                            void *_Exchange, void *_Comparand);
364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedOr_np(long volatile *_Value, long _Mask);
365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedOr16_np(short volatile *_Value, short _Mask);
366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _InterlockedOr64_np(__int64 volatile *_Value, __int64 _Mask);
367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)char _InterlockedOr8_np(char volatile *_Value, char _Mask);
368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)long _InterlockedXor_np(long volatile *_Value, long _Mask);
369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)short _InterlockedXor16_np(short volatile *_Value, short _Mask);
370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _InterlockedXor64_np(__int64 volatile *_Value, __int64 _Mask);
37103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)char _InterlockedXor8_np(char volatile *_Value, char _Mask);
372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _lzcnt_u64(unsigned __int64);
373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__int64 _mul128(__int64 _Multiplier, __int64 _Multiplicand,
374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                __int64 *_HighProduct);
375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __cdecl _readfsbase_u32(void);
376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __cdecl _readfsbase_u64(void);
377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned int __cdecl _readgsbase_u32(void);
378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 __cdecl _readgsbase_u64(void);
379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _rorx_u64(unsigned __int64, const unsigned int);
380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _tzcnt_u64(unsigned __int64);
381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _tzmsk_u64(unsigned __int64);
382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)unsigned __int64 _umul128(unsigned __int64 _Multiplier,
383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                          unsigned __int64 _Multiplicand,
384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                          unsigned __int64 *_HighProduct);
385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _writefsbase_u32(unsigned int);
386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void _cdecl _writefsbase_u64(unsigned __int64);
387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _writegsbase_u32(unsigned int);
388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _writegsbase_u64(unsigned __int64);
389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _xrstor64(void const *, unsigned __int64);
390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _xsave64(void *, unsigned __int64);
391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void __cdecl _xsaveopt64(void *, unsigned __int64);
392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif /* __X86_64__ */
394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*----------------------------------------------------------------------------*\
396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)|* Bit Twiddling
397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)\*----------------------------------------------------------------------------*/
398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotl8(unsigned char _Value, unsigned char _Shift) {
400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x7;
401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value << _Shift) | (_Value >> (8 - _Shift)) : _Value;
402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotr8(unsigned char _Value, unsigned char _Shift) {
405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x7;
40603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return _Shift ? (_Value >> _Shift) | (_Value << (8 - _Shift)) : _Value;
407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__))
409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotl16(unsigned short _Value, unsigned char _Shift) {
410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0xf;
411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value << _Shift) | (_Value >> (16 - _Shift)) : _Value;
412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__))
414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotr16(unsigned short _Value, unsigned char _Shift) {
415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0xf;
416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value >> _Shift) | (_Value << (16 - _Shift)) : _Value;
417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotl(unsigned int _Value, int _Shift) {
420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x1f;
421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value;
422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotr(unsigned int _Value, int _Shift) {
425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x1f;
426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value;
427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_lrotl(unsigned long _Value, int _Shift) {
430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x1f;
431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value;
432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))
434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_lrotr(unsigned long _Value, int _Shift) {
435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x1f;
436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value;
437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static
439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__))
440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotl64(unsigned __int64 _Value, int _Shift) {
441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x3f;
442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value << _Shift) | (_Value >> (64 - _Shift)) : _Value;
443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static
445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__))
446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_rotr64(unsigned __int64 _Value, int _Shift) {
447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  _Shift &= 0x3f;
448f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return _Shift ? (_Value >> _Shift) | (_Value << (64 - _Shift)) : _Value;
449f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
45003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)/*----------------------------------------------------------------------------*\
451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)|* Bit Counting and Testing
452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)\*----------------------------------------------------------------------------*/
453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_BitScanForward(unsigned long *_Index, unsigned long _Mask) {
455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (!_Mask)
456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return 0;
457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  *_Index = __builtin_ctzl(_Mask);
458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return 1;
459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_BitScanReverse(unsigned long *_Index, unsigned long _Mask) {
462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (!_Mask)
463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return 0;
464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  *_Index = 31 - __builtin_clzl(_Mask);
465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return 1;
466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)_lzcnt_u32(unsigned int a) {
469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (!a)
470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return 32;
471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return __builtin_clzl(a);
472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__))
474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__popcnt16(unsigned short value) {
475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return __builtin_popcount((int)value);
476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
477f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__))
478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)__popcnt(unsigned int value) {
479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return __builtin_popcount(value);
480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
482_bittest(long const *a, long b) {
483  return (*a >> b) & 1;
484}
485static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
486_bittestandcomplement(long *a, long b) {
487  unsigned char x = (*a >> b) & 1;
488  *a = *a ^ (1 << b);
489  return x;
490}
491static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
492_bittestandreset(long *a, long b) {
493  unsigned char x = (*a >> b) & 1;
494  *a = *a & ~(1 << b);
495  return x;
496}
497static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
498_bittestandset(long *a, long b) {
499  unsigned char x = (*a >> b) & 1;
500  *a = *a & (1 << b);
501  return x;
502}
503#ifdef __X86_64__
504static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
505_BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask) {
506  if (!_Mask)
507    return 0;
508  *_Index = __builtin_ctzll(_Mask);
509  return 1;
510}
511static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
512_BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask) {
513  if (!_Mask)
514    return 0;
515  *_Index = 63 - __builtin_clzll(_Mask);
516  return 1;
517}
518static
519__inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__))
520_lzcnt_u64(unsigned __int64 a) {
521  if (!a)
522    return 64;
523  return __builtin_clzll(a);
524}
525static __inline__
526unsigned __int64 __attribute__((__always_inline__, __nodebug__))
527 __popcnt64(unsigned __int64 value) {
528  return __builtin_popcountll(value);
529}
530static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
531_bittest64(__int64 const *a, __int64 b) {
532  return (*a >> b) & 1;
533}
534static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
535_bittestandcomplement64(__int64 *a, __int64 b) {
536  unsigned char x = (*a >> b) & 1;
537  *a = *a ^ (1ll << b);
538  return x;
539}
540static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
541_bittestandreset64(__int64 *a, __int64 b) {
542  unsigned char x = (*a >> b) & 1;
543  *a = *a & ~(1ll << b);
544  return x;
545}
546static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))
547_bittestandset64(__int64 *a, __int64 b) {
548  unsigned char x = (*a >> b) & 1;
549  *a = *a & (1ll << b);
550  return x;
551}
552#endif
553/*----------------------------------------------------------------------------*\
554|* Interlocked Exchange Add
555\*----------------------------------------------------------------------------*/
556static __inline__ char __attribute__((__always_inline__, __nodebug__))
557_InterlockedExchangeAdd8(char volatile *_Addend, char _Value) {
558  return __atomic_add_fetch(_Addend, _Value, 0) - _Value;
559}
560static __inline__ short __attribute__((__always_inline__, __nodebug__))
561_InterlockedExchangeAdd16(short volatile *_Addend, short _Value) {
562  return __atomic_add_fetch(_Addend, _Value, 0) - _Value;
563}
564static __inline__ long __attribute__((__always_inline__, __nodebug__))
565_InterlockedExchangeAdd(long volatile *_Addend, long _Value) {
566  return __atomic_add_fetch(_Addend, _Value, 0) - _Value;
567}
568#ifdef __X86_64__
569static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
570_InterlockedExchangeAdd64(__int64 volatile *_Addend, __int64 _Value) {
571  return __atomic_add_fetch(_Addend, _Value, 0) - _Value;
572}
573#endif
574/*----------------------------------------------------------------------------*\
575|* Interlocked Exchange Sub
576\*----------------------------------------------------------------------------*/
577static __inline__ char __attribute__((__always_inline__, __nodebug__))
578_InterlockedExchangeSub8(char volatile *_Subend, char _Value) {
579  return __atomic_sub_fetch(_Subend, _Value, 0) + _Value;
580}
581static __inline__ short __attribute__((__always_inline__, __nodebug__))
582_InterlockedExchangeSub16(short volatile *_Subend, short _Value) {
583  return __atomic_sub_fetch(_Subend, _Value, 0) + _Value;
584}
585static __inline__ long __attribute__((__always_inline__, __nodebug__))
586_InterlockedExchangeSub(long volatile *_Subend, long _Value) {
587  return __atomic_sub_fetch(_Subend, _Value, 0) + _Value;
588}
589#ifdef __X86_64__
590static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
591_InterlockedExchangeSub64(__int64 volatile *_Subend, __int64 _Value) {
592  return __atomic_sub_fetch(_Subend, _Value, 0) + _Value;
593}
594#endif
595/*----------------------------------------------------------------------------*\
596|* Interlocked Increment
597\*----------------------------------------------------------------------------*/
598static __inline__ char __attribute__((__always_inline__, __nodebug__))
599_InterlockedIncrement16(char volatile *_Value) {
600  return __atomic_add_fetch(_Value, 1, 0);
601}
602static __inline__ long __attribute__((__always_inline__, __nodebug__))
603_InterlockedIncrement(long volatile *_Value) {
604  return __atomic_add_fetch(_Value, 1, 0);
605}
606#ifdef __X86_64__
607static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
608_InterlockedIncrement64(__int64 volatile *_Value) {
609  return __atomic_add_fetch(_Value, 1, 0);
610}
611#endif
612/*----------------------------------------------------------------------------*\
613|* Interlocked Decrement
614\*----------------------------------------------------------------------------*/
615static __inline__ char __attribute__((__always_inline__, __nodebug__))
616_InterlockedDecrement16(char volatile *_Value) {
617  return __atomic_sub_fetch(_Value, 1, 0);
618}
619static __inline__ long __attribute__((__always_inline__, __nodebug__))
620_InterlockedDecrement(long volatile *_Value) {
621  return __atomic_sub_fetch(_Value, 1, 0);
622}
623#ifdef __X86_64__
624static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
625_InterlockedDecrement64(__int64 volatile *_Value) {
626  return __atomic_sub_fetch(_Value, 1, 0);
627}
628#endif
629/*----------------------------------------------------------------------------*\
630|* Interlocked And
631\*----------------------------------------------------------------------------*/
632static __inline__ char __attribute__((__always_inline__, __nodebug__))
633_InterlockedAnd8(char volatile *_Value, char _Mask) {
634  return __atomic_and_fetch(_Value, _Mask, 0);
635}
636static __inline__ short __attribute__((__always_inline__, __nodebug__))
637_InterlockedAnd16(short volatile *_Value, short _Mask) {
638  return __atomic_and_fetch(_Value, _Mask, 0);
639}
640static __inline__ long __attribute__((__always_inline__, __nodebug__))
641_InterlockedAnd(long volatile *_Value, long _Mask) {
642  return __atomic_and_fetch(_Value, _Mask, 0);
643}
644#ifdef __X86_64__
645static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
646_InterlockedAnd64(__int64 volatile *_Value, __int64 _Mask) {
647  return __atomic_and_fetch(_Value, _Mask, 0);
648}
649#endif
650/*----------------------------------------------------------------------------*\
651|* Interlocked Or
652\*----------------------------------------------------------------------------*/
653static __inline__ char __attribute__((__always_inline__, __nodebug__))
654_InterlockedOr8(char volatile *_Value, char _Mask) {
655  return __atomic_or_fetch(_Value, _Mask, 0);
656}
657static __inline__ short __attribute__((__always_inline__, __nodebug__))
658_InterlockedOr16(short volatile *_Value, short _Mask) {
659  return __atomic_or_fetch(_Value, _Mask, 0);
660}
661static __inline__ long __attribute__((__always_inline__, __nodebug__))
662_InterlockedOr(long volatile *_Value, long _Mask) {
663  return __atomic_or_fetch(_Value, _Mask, 0);
664}
665#ifdef __X86_64__
666static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
667_InterlockedOr64(__int64 volatile *_Value, __int64 _Mask) {
668  return __atomic_or_fetch(_Value, _Mask, 0);
669}
670#endif
671/*----------------------------------------------------------------------------*\
672|* Interlocked Xor
673\*----------------------------------------------------------------------------*/
674static __inline__ char __attribute__((__always_inline__, __nodebug__))
675_InterlockedXor8(char volatile *_Value, char _Mask) {
676  return __atomic_xor_fetch(_Value, _Mask, 0);
677}
678static __inline__ short __attribute__((__always_inline__, __nodebug__))
679_InterlockedXor16(short volatile *_Value, short _Mask) {
680  return __atomic_xor_fetch(_Value, _Mask, 0);
681}
682static __inline__ long __attribute__((__always_inline__, __nodebug__))
683_InterlockedXor(long volatile *_Value, long _Mask) {
684  return __atomic_xor_fetch(_Value, _Mask, 0);
685}
686#ifdef __X86_64__
687static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
688_InterlockedXor64(__int64 volatile *_Value, __int64 _Mask) {
689  return __atomic_xor_fetch(_Value, _Mask, 0);
690}
691#endif
692/*----------------------------------------------------------------------------*\
693|* Interlocked Exchange
694\*----------------------------------------------------------------------------*/
695static __inline__ char __attribute__((__always_inline__, __nodebug__))
696_InterlockedExchange8(char volatile *_Target, char _Value) {
697  __atomic_exchange(_Target, &_Value, &_Value, 0);
698  return _Value;
699}
700static __inline__ short __attribute__((__always_inline__, __nodebug__))
701_InterlockedExchange16(short volatile *_Target, short _Value) {
702  __atomic_exchange(_Target, &_Value, &_Value, 0);
703  return _Value;
704}
705static __inline__ long __attribute__((__always_inline__, __nodebug__))
706_InterlockedExchange(long volatile *_Target, long _Value) {
707  __atomic_exchange(_Target, &_Value, &_Value, 0);
708  return _Value;
709}
710#ifdef __X86_64__
711static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
712_InterlockedExchange64(__int64 volatile *_Target, __int64 _Value) {
713  __atomic_exchange(_Target, &_Value, &_Value, 0);
714  return _Value;
715}
716#endif
717/*----------------------------------------------------------------------------*\
718|* Interlocked Compare Exchange
719\*----------------------------------------------------------------------------*/
720static __inline__ char __attribute__((__always_inline__, __nodebug__))
721_InterlockedCompareExchange8(char volatile *_Destination,
722                             char _Exchange, char _Comparand) {
723  __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0);
724  return _Comparand;
725}
726static __inline__ short __attribute__((__always_inline__, __nodebug__))
727_InterlockedCompareExchange16(short volatile *_Destination,
728                              short _Exchange, short _Comparand) {
729  __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0);
730  return _Comparand;
731}
732static __inline__ long __attribute__((__always_inline__, __nodebug__))
733_InterlockedCompareExchange(long volatile *_Destination,
734                            long _Exchange, long _Comparand) {
735  __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0);
736  return _Comparand;
737}
738#ifdef __X86_64__
739static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))
740_InterlockedCompareExchange64(__int64 volatile *_Destination,
741                              __int64 _Exchange, __int64 _Comparand) {
742  __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0);
743  return _Comparand;
744}
745#endif
746/*----------------------------------------------------------------------------*\
747|* Misc
748\*----------------------------------------------------------------------------*/
749static __inline__ void * __attribute__((__always_inline__, __nodebug__))
750_AddressOfReturnAddress(void) {
751  return (void*)((char*)__builtin_frame_address(0) + sizeof(void*));
752}
753static __inline__ void * __attribute__((__always_inline__, __nodebug__))
754_ReturnAddress(void) {
755  return __builtin_return_address(0);
756}
757
758#ifdef __cplusplus
759}
760#endif
761
762#endif /* __INTRIN_H */
763#endif /* _MSC_VER */
764