Reactos
1
2#pragma once
3#define __INTRIN_H_
4
5#ifndef RC_INVOKED
6
7#include <vcruntime.h>
8#include <intrin0.inl.h>
9#include <setjmp.h>
10#include <stddef.h>
11
12#if defined(_M_IX86) || defined(_M_X64)
13#include <immintrin.h>
14//#include <ammintrin.h>
15#include <xmmintrin.h> // native headers: immintrin.h -> wmmintrin.h -> nmmintrin.h -> smmintrin.h -> tmmintrin.h -> pmmintrin.h -> emmintrin.h
16#endif /* _M_IX86 || _M_X64 */
17
18#if defined(_M_IX86)
19//#include <mm3dnow.h>
20#endif /* _M_IX86 */
21
22#if defined(_M_ARM)
23//#include <arm_neon.h>
24#include <armintr.h>
25#endif /* _M_ARM */
26
27#if defined(_M_ARM64)
28#include <arm64intr.h>
29//#include <arm64_neon.h>
30#endif /* _M_ARM64 */
31
32#if defined(__cplusplus)
33extern "C" {
34#endif
35
36void* _AddressOfReturnAddress(void);
37unsigned char _BitScanForward(unsigned long * _Index, unsigned long _Mask);
38unsigned char _BitScanReverse(unsigned long * _Index, unsigned long _Mask);
39long _InterlockedAnd(_Interlocked_operand_ long volatile * _Value, long _Mask);
40short _InterlockedAnd16(_Interlocked_operand_ short volatile * _Value, short _Mask);
41char _InterlockedAnd8(_Interlocked_operand_ char volatile * _Value, char _Mask);
42long __cdecl _InterlockedCompareExchange(_Interlocked_operand_ long volatile * _Destination, long _Exchange, long _Comparand);
43short _InterlockedCompareExchange16(_Interlocked_operand_ short volatile * _Destination, short _Exchange, short _Comparand);
44__int64 _InterlockedCompareExchange64(_Interlocked_operand_ __int64 volatile * _Destination, __int64 _Exchange, __int64 _Comparand);
45char _InterlockedCompareExchange8(_Interlocked_operand_ char volatile * _Destination, char _Exchange, char _Comparand);
46void * _InterlockedCompareExchangePointer(_Interlocked_operand_ void * volatile * _Destination, void * _Exchange, void * _Comparand);
47long __cdecl _InterlockedDecrement(_Interlocked_operand_ long volatile * _Addend);
48short _InterlockedDecrement16(_Interlocked_operand_ short volatile * _Addend);
49long __cdecl _InterlockedExchange(_Interlocked_operand_ long volatile * _Target, long _Value);
50short _InterlockedExchange16(_Interlocked_operand_ short volatile * _Target, short _Value);
51char _InterlockedExchange8(_Interlocked_operand_ char volatile * _Target, char _Value);
52long __cdecl _InterlockedExchangeAdd(_Interlocked_operand_ long volatile * _Addend, long _Value);
53short _InterlockedExchangeAdd16(_Interlocked_operand_ short volatile * _Addend, short _Value);
54char _InterlockedExchangeAdd8(_Interlocked_operand_ char volatile * _Addend, char _Value);
55void * _InterlockedExchangePointer(_Interlocked_operand_ void * volatile * _Target, void * _Value);
56long __cdecl _InterlockedIncrement(_Interlocked_operand_ long volatile * _Addend);
57short _InterlockedIncrement16(_Interlocked_operand_ short volatile * _Addend);
58long _InterlockedOr(_Interlocked_operand_ long volatile * _Value, long _Mask);
59short _InterlockedOr16(_Interlocked_operand_ short volatile * _Value, short _Mask);
60char _InterlockedOr8(_Interlocked_operand_ char volatile * _Value, char _Mask);
61long _InterlockedXor(_Interlocked_operand_ long volatile * _Value, long _Mask);
62short _InterlockedXor16(_Interlocked_operand_ short volatile * _Value, short _Mask);
63char _InterlockedXor8(_Interlocked_operand_ char volatile * _Value, char _Mask);
64void _ReadBarrier(void);
65void _ReadWriteBarrier(void);
66void * _ReturnAddress(void);
67void _WriteBarrier(void);
68void __code_seg(const char *);
69void __cdecl __debugbreak(void);
70__declspec(noreturn) void __fastfail(unsigned int);
71void __nop(void);
72__int64 __cdecl _abs64(__int64);
73unsigned char _bittest(long const *, long);
74unsigned char _bittestandcomplement(long *, long);
75unsigned char _bittestandreset(long *, long);
76unsigned char _bittestandset(long *, long);
77_Check_return_ unsigned __int64 __cdecl _byteswap_uint64(_In_ unsigned __int64);
78_Check_return_ unsigned long __cdecl _byteswap_ulong(_In_ unsigned long);
79_Check_return_ unsigned short __cdecl _byteswap_ushort(_In_ unsigned short);
80void __cdecl _disable(void);
81void __cdecl _enable(void);
82unsigned char _interlockedbittestandreset(long volatile *, long);
83unsigned char _interlockedbittestandset(long volatile *, long);
84_Check_return_ unsigned long __cdecl _lrotl(_In_ unsigned long, _In_ int);
85_Check_return_ unsigned long __cdecl _lrotr(_In_ unsigned long, _In_ int);
86_Check_return_ unsigned int __cdecl _rotl(_In_ unsigned int _Value, _In_ int _Shift);
87_Check_return_ unsigned short __cdecl _rotl16(_In_ unsigned short _Value, _In_ unsigned char _Shift);
88_Check_return_ unsigned __int64 __cdecl _rotl64(_In_ unsigned __int64 _Value, _In_ int _Shift);
89_Check_return_ unsigned char __cdecl _rotl8(_In_ unsigned char _Value, _In_ unsigned char _Shift);
90_Check_return_ unsigned int __cdecl _rotr(_In_ unsigned int _Value, _In_ int _Shift);
91_Check_return_ unsigned short __cdecl _rotr16(_In_ unsigned short _Value, _In_ unsigned char _Shift);
92_Check_return_ unsigned __int64 __cdecl _rotr64(_In_ unsigned __int64 _Value, _In_ int _Shift);
93_Check_return_ unsigned char __cdecl _rotr8(_In_ unsigned char _Value, _In_ unsigned char _Shift);
94
95#if defined(_M_IX86) || defined(_M_X64)
96
97void __cpuid(int[4], int);
98void __cpuidex(int[4], int, int);
99__int64 __emul(int, int);
100unsigned __int64 __emulu(unsigned int, unsigned int);
101unsigned int __getcallerseflags(void);
102void __halt(void);
103unsigned char __inbyte(unsigned short);
104void __inbytestring(unsigned short, unsigned char *, unsigned long);
105unsigned long __indword(unsigned short);
106void __indwordstring(unsigned short, unsigned long *, unsigned long);
107void __int2c(void);
108void __invlpg(void *);
109unsigned short __inword(unsigned short);
110void __inwordstring(unsigned short, unsigned short *, unsigned long);
111void __lidt(void *);
112unsigned __int64 __ll_lshift(unsigned __int64, int);
113__int64 __ll_rshift(__int64, int);
114unsigned int __lzcnt(unsigned int);
115unsigned short __lzcnt16(unsigned short);
116void __movsb(unsigned char *, unsigned char const *, size_t);
117void __movsd(unsigned long *, unsigned long const *, size_t);
118void __movsw(unsigned short *, unsigned short const *, size_t);
119void __nvreg_restore_fence(void);
120void __nvreg_save_fence(void);
121void __outbyte(unsigned short, unsigned char);
122void __outbytestring(unsigned short, unsigned char *, unsigned long);
123void __outdword(unsigned short, unsigned long);
124void __outdwordstring(unsigned short, unsigned long *, unsigned long);
125void __outword(unsigned short, unsigned short);
126void __outwordstring(unsigned short, unsigned short *, unsigned long);
127unsigned int __popcnt(unsigned int);
128unsigned short __popcnt16(unsigned short);
129unsigned __int64 __rdtsc(void);
130unsigned __int64 __rdtscp(unsigned int *);
131unsigned __int64 __readmsr(unsigned long);
132unsigned __int64 __readpmc(unsigned long);
133unsigned long __segmentlimit(unsigned long);
134void __sidt(void *);
135void _sgdt(void *);
136void __stosb(unsigned char *, unsigned char, size_t);
137void __stosd(unsigned long *, unsigned long, size_t);
138void __stosw(unsigned short *, unsigned short, size_t);
139void __svm_clgi(void);
140void __svm_invlpga(void *, int);
141void __svm_skinit(int);
142void __svm_stgi(void);
143void __svm_vmload(size_t);
144void __svm_vmrun(size_t);
145void __svm_vmsave(size_t);
146void __ud2(void);
147unsigned __int64 __ull_rshift(unsigned __int64, int);
148void __vmx_off(void);
149void __vmx_vmptrst(unsigned __int64 *);
150void __wbinvd(void);
151void __writemsr(unsigned long, unsigned __int64);
152int __cdecl _inp(unsigned short);
153unsigned long __cdecl _inpd(unsigned short);
154unsigned short __cdecl _inpw(unsigned short);
155void _m_prefetch(void *);
156void _m_prefetchw(volatile const void *);
157
158void _mm_mfence(void);
159void _mm_lfence(void);
160void _mm_sfence(void);
161void _mm_pause(void);
162
163#if 0
164__m128i _mm_abs_epi16(__m128i);
165__m128i _mm_abs_epi32(__m128i);
166__m128i _mm_abs_epi8(__m128i);
167__m64 _mm_abs_pi16(__m64);
168__m64 _mm_abs_pi32(__m64);
169__m64 _mm_abs_pi8(__m64);
170__m128i _mm_add_epi16(__m128i, __m128i);
171__m128i _mm_add_epi32(__m128i, __m128i);
172__m128i _mm_add_epi64(__m128i, __m128i);
173__m128i _mm_add_epi8(__m128i, __m128i);
174__m128d _mm_add_pd(__m128d, __m128d);
175__m128 _mm_add_ps(__m128, __m128);
176__m128d _mm_add_sd(__m128d, __m128d);
177__m128 _mm_add_ss(__m128, __m128);
178__m128i _mm_adds_epi16(__m128i, __m128i);
179__m128i _mm_adds_epi8(__m128i, __m128i);
180__m128i _mm_adds_epu16(__m128i, __m128i);
181__m128i _mm_adds_epu8(__m128i, __m128i);
182__m128d _mm_addsub_pd(__m128d, __m128d);
183__m128 _mm_addsub_ps(__m128, __m128);
184__m128i _mm_alignr_epi8(__m128i, __m128i, int);
185__m64 _mm_alignr_pi8(__m64, __m64, int);
186__m128d _mm_and_pd(__m128d, __m128d);
187__m128 _mm_and_ps(__m128, __m128);
188__m128i _mm_and_si128(__m128i, __m128i);
189__m128d _mm_andnot_pd(__m128d, __m128d);
190__m128 _mm_andnot_ps(__m128, __m128);
191__m128i _mm_andnot_si128(__m128i, __m128i);
192__m128i _mm_avg_epu16(__m128i, __m128i);
193__m128i _mm_avg_epu8(__m128i, __m128i);
194__m128i _mm_blend_epi16(__m128i, __m128i, int);
195__m128d _mm_blend_pd(__m128d, __m128d, int);
196__m128 _mm_blend_ps(__m128, __m128, int);
197__m128i _mm_blendv_epi8(__m128i, __m128i, __m128i);
198__m128d _mm_blendv_pd(__m128d, __m128d, __m128d);
199__m128 _mm_blendv_ps(__m128, __m128, __m128);
200void _mm_clflush(void const *);
201__m128i _mm_cmpeq_epi16(__m128i, __m128i);
202__m128i _mm_cmpeq_epi32(__m128i, __m128i);
203__m128i _mm_cmpeq_epi64(__m128i, __m128i);
204__m128i _mm_cmpeq_epi8(__m128i, __m128i);
205__m128d _mm_cmpeq_pd(__m128d, __m128d);
206__m128 _mm_cmpeq_ps(__m128, __m128);
207__m128d _mm_cmpeq_sd(__m128d, __m128d);
208__m128 _mm_cmpeq_ss(__m128, __m128);
209int _mm_cmpestra(__m128i, int, __m128i, int, int);
210int _mm_cmpestrc(__m128i, int, __m128i, int, int);
211int _mm_cmpestri(__m128i, int, __m128i, int, int);
212__m128i _mm_cmpestrm(__m128i, int, __m128i, int, int);
213int _mm_cmpestro(__m128i, int, __m128i, int, int);
214int _mm_cmpestrs(__m128i, int, __m128i, int, int);
215int _mm_cmpestrz(__m128i, int, __m128i, int, int);
216__m128d _mm_cmpge_pd(__m128d, __m128d);
217__m128 _mm_cmpge_ps(__m128, __m128);
218__m128d _mm_cmpge_sd(__m128d, __m128d);
219__m128 _mm_cmpge_ss(__m128, __m128);
220__m128i _mm_cmpgt_epi16(__m128i, __m128i);
221__m128i _mm_cmpgt_epi32(__m128i, __m128i);
222__m128i _mm_cmpgt_epi64(__m128i, __m128i);
223__m128i _mm_cmpgt_epi8(__m128i, __m128i);
224__m128d _mm_cmpgt_pd(__m128d, __m128d);
225__m128 _mm_cmpgt_ps(__m128, __m128);
226__m128d _mm_cmpgt_sd(__m128d, __m128d);
227__m128 _mm_cmpgt_ss(__m128, __m128);
228int _mm_cmpistra(__m128i, __m128i, int);
229int _mm_cmpistrc(__m128i, __m128i, int);
230int _mm_cmpistri(__m128i, __m128i, int);
231__m128i _mm_cmpistrm(__m128i, __m128i, int);
232int _mm_cmpistro(__m128i, __m128i, int);
233int _mm_cmpistrs(__m128i, __m128i, int);
234int _mm_cmpistrz(__m128i, __m128i, int);
235__m128d _mm_cmple_pd(__m128d, __m128d);
236__m128 _mm_cmple_ps(__m128, __m128);
237__m128d _mm_cmple_sd(__m128d, __m128d);
238__m128 _mm_cmple_ss(__m128, __m128);
239__m128i _mm_cmplt_epi16(__m128i, __m128i);
240__m128i _mm_cmplt_epi32(__m128i, __m128i);
241__m128i _mm_cmplt_epi8(__m128i, __m128i);
242__m128d _mm_cmplt_pd(__m128d, __m128d);
243__m128 _mm_cmplt_ps(__m128, __m128);
244__m128d _mm_cmplt_sd(__m128d, __m128d);
245__m128 _mm_cmplt_ss(__m128, __m128);
246__m128d _mm_cmpneq_pd(__m128d, __m128d);
247__m128 _mm_cmpneq_ps(__m128, __m128);
248__m128d _mm_cmpneq_sd(__m128d, __m128d);
249__m128 _mm_cmpneq_ss(__m128, __m128);
250__m128d _mm_cmpnge_pd(__m128d, __m128d);
251__m128 _mm_cmpnge_ps(__m128, __m128);
252__m128d _mm_cmpnge_sd(__m128d, __m128d);
253__m128 _mm_cmpnge_ss(__m128, __m128);
254__m128d _mm_cmpngt_pd(__m128d, __m128d);
255__m128 _mm_cmpngt_ps(__m128, __m128);
256__m128d _mm_cmpngt_sd(__m128d, __m128d);
257__m128 _mm_cmpngt_ss(__m128, __m128);
258__m128d _mm_cmpnle_pd(__m128d, __m128d);
259__m128 _mm_cmpnle_ps(__m128, __m128);
260__m128d _mm_cmpnle_sd(__m128d, __m128d);
261__m128 _mm_cmpnle_ss(__m128, __m128);
262__m128d _mm_cmpnlt_pd(__m128d, __m128d);
263__m128 _mm_cmpnlt_ps(__m128, __m128);
264__m128d _mm_cmpnlt_sd(__m128d, __m128d);
265__m128 _mm_cmpnlt_ss(__m128, __m128);
266__m128d _mm_cmpord_pd(__m128d, __m128d);
267__m128 _mm_cmpord_ps(__m128, __m128);
268__m128d _mm_cmpord_sd(__m128d, __m128d);
269__m128 _mm_cmpord_ss(__m128, __m128);
270__m128d _mm_cmpunord_pd(__m128d, __m128d);
271__m128 _mm_cmpunord_ps(__m128, __m128);
272__m128d _mm_cmpunord_sd(__m128d, __m128d);
273__m128 _mm_cmpunord_ss(__m128, __m128);
274int _mm_comieq_sd(__m128d, __m128d);
275int _mm_comieq_ss(__m128, __m128);
276int _mm_comige_sd(__m128d, __m128d);
277int _mm_comige_ss(__m128, __m128);
278int _mm_comigt_sd(__m128d, __m128d);
279int _mm_comigt_ss(__m128, __m128);
280int _mm_comile_sd(__m128d, __m128d);
281int _mm_comile_ss(__m128, __m128);
282int _mm_comilt_sd(__m128d, __m128d);
283int _mm_comilt_ss(__m128, __m128);
284int _mm_comineq_sd(__m128d, __m128d);
285int _mm_comineq_ss(__m128, __m128);
286unsigned int _mm_crc32_u16(unsigned int, unsigned short);
287unsigned int _mm_crc32_u32(unsigned int, unsigned int);
288unsigned int _mm_crc32_u8(unsigned int, unsigned char);
289__m128 _mm_cvt_si2ss(__m128, int);
290int _mm_cvt_ss2si(__m128);
291__m128i _mm_cvtepi16_epi32(__m128i);
292__m128i _mm_cvtepi16_epi64(__m128i);
293__m128i _mm_cvtepi32_epi64(__m128i);
294__m128d _mm_cvtepi32_pd(__m128i);
295__m128 _mm_cvtepi32_ps(__m128i);
296__m128i _mm_cvtepi8_epi16(__m128i);
297__m128i _mm_cvtepi8_epi32(__m128i);
298__m128i _mm_cvtepi8_epi64(__m128i);
299__m128i _mm_cvtepu16_epi32(__m128i);
300__m128i _mm_cvtepu16_epi64(__m128i);
301__m128i _mm_cvtepu32_epi64(__m128i);
302__m128i _mm_cvtepu8_epi16(__m128i);
303__m128i _mm_cvtepu8_epi32(__m128i);
304__m128i _mm_cvtepu8_epi64(__m128i);
305__m128i _mm_cvtpd_epi32(__m128d);
306__m128 _mm_cvtpd_ps(__m128d);
307__m128i _mm_cvtps_epi32(__m128);
308__m128d _mm_cvtps_pd(__m128);
309int _mm_cvtsd_si32(__m128d);
310__m128 _mm_cvtsd_ss(__m128, __m128d);
311int _mm_cvtsi128_si32(__m128i);
312__m128d _mm_cvtsi32_sd(__m128d, int);
313__m128i _mm_cvtsi32_si128(int);
314__m128d _mm_cvtss_sd(__m128d, __m128);
315int _mm_cvtt_ss2si(__m128);
316__m128i _mm_cvttpd_epi32(__m128d);
317__m128i _mm_cvttps_epi32(__m128);
318int _mm_cvttsd_si32(__m128d);
319__m128d _mm_div_pd(__m128d, __m128d);
320__m128 _mm_div_ps(__m128, __m128);
321__m128d _mm_div_sd(__m128d, __m128d);
322__m128 _mm_div_ss(__m128, __m128);
323__m128d _mm_dp_pd(__m128d, __m128d, int);
324__m128 _mm_dp_ps(__m128, __m128, int);
325int _mm_extract_epi16(__m128i, int);
326int _mm_extract_epi32(__m128i, int);
327int _mm_extract_epi8(__m128i, int);
328int _mm_extract_ps(__m128, int);
329__m128i _mm_extract_si64(__m128i, __m128i);
330__m128i _mm_extracti_si64(__m128i, int, int);
331unsigned int _mm_getcsr(void);
332__m128i _mm_hadd_epi16(__m128i, __m128i);
333__m128i _mm_hadd_epi32(__m128i, __m128i);
334__m128d _mm_hadd_pd(__m128d, __m128d);
335__m64 _mm_hadd_pi16(__m64, __m64);
336__m64 _mm_hadd_pi32(__m64, __m64);
337__m128 _mm_hadd_ps(__m128, __m128);
338__m128i _mm_hadds_epi16(__m128i, __m128i);
339__m64 _mm_hadds_pi16(__m64, __m64);
340__m128i _mm_hsub_epi16(__m128i, __m128i);
341__m128i _mm_hsub_epi32(__m128i, __m128i);
342__m128d _mm_hsub_pd(__m128d, __m128d);
343__m64 _mm_hsub_pi16(__m64, __m64);
344__m64 _mm_hsub_pi32(__m64, __m64);
345__m128 _mm_hsub_ps(__m128, __m128);
346__m128i _mm_hsubs_epi16(__m128i, __m128i);
347__m64 _mm_hsubs_pi16(__m64, __m64);
348__m128i _mm_insert_epi16(__m128i, int, int);
349__m128i _mm_insert_epi32(__m128i, int, int);
350__m128i _mm_insert_epi8(__m128i, int, int);
351__m128 _mm_insert_ps(__m128, __m128, int);
352__m128i _mm_insert_si64(__m128i, __m128i);
353__m128i _mm_inserti_si64(__m128i, __m128i, int, int);
354__m128i _mm_lddqu_si128(__m128i const *);
355__m128d _mm_load1_pd(double const *);
356__m128d _mm_load_pd(double const *);
357__m128 _mm_load_ps(float const *);
358__m128 _mm_load_ps1(float const *);
359__m128d _mm_load_sd(double const *);
360__m128i _mm_load_si128(__m128i const *);
361__m128 _mm_load_ss(float const *);
362__m128d _mm_loaddup_pd(double const *);
363__m128d _mm_loadh_pd(__m128d, double const *);
364__m128 _mm_loadh_pi(__m128, __m64 const *);
365__m128i _mm_loadl_epi64(__m128i const *);
366__m128d _mm_loadl_pd(__m128d, double const *);
367__m128 _mm_loadl_pi(__m128, __m64 const *);
368__m128d _mm_loadr_pd(double const *);
369__m128 _mm_loadr_ps(float const *);
370__m128d _mm_loadu_pd(double const *);
371__m128 _mm_loadu_ps(float const *);
372__m128i _mm_loadu_si128(__m128i const *);
373__m128i _mm_madd_epi16(__m128i, __m128i);
374__m128i _mm_maddubs_epi16(__m128i, __m128i);
375__m64 _mm_maddubs_pi16(__m64, __m64);
376void _mm_maskmoveu_si128(__m128i, __m128i, _Out_writes_bytes_(16) char *);
377__m128i _mm_max_epi16(__m128i, __m128i);
378__m128i _mm_max_epi32(__m128i, __m128i);
379__m128i _mm_max_epi8(__m128i, __m128i);
380__m128i _mm_max_epu16(__m128i, __m128i);
381__m128i _mm_max_epu32(__m128i, __m128i);
382__m128i _mm_max_epu8(__m128i, __m128i);
383__m128d _mm_max_pd(__m128d, __m128d);
384__m128 _mm_max_ps(__m128, __m128);
385__m128d _mm_max_sd(__m128d, __m128d);
386__m128 _mm_max_ss(__m128, __m128);
387__m128i _mm_min_epi16(__m128i, __m128i);
388__m128i _mm_min_epi32(__m128i, __m128i);
389__m128i _mm_min_epi8(__m128i, __m128i);
390__m128i _mm_min_epu16(__m128i, __m128i);
391__m128i _mm_min_epu32(__m128i, __m128i);
392__m128i _mm_min_epu8(__m128i, __m128i);
393__m128d _mm_min_pd(__m128d, __m128d);
394__m128 _mm_min_ps(__m128, __m128);
395__m128d _mm_min_sd(__m128d, __m128d);
396__m128 _mm_min_ss(__m128, __m128);
397__m128i _mm_minpos_epu16(__m128i);
398void _mm_monitor(void const *, unsigned int, unsigned int);
399__m128i _mm_move_epi64(__m128i);
400__m128d _mm_move_sd(__m128d, __m128d);
401__m128 _mm_move_ss(__m128, __m128);
402__m128d _mm_movedup_pd(__m128d);
403__m128 _mm_movehdup_ps(__m128);
404__m128 _mm_movehl_ps(__m128, __m128);
405__m128 _mm_moveldup_ps(__m128);
406__m128 _mm_movelh_ps(__m128, __m128);
407int _mm_movemask_epi8(__m128i);
408int _mm_movemask_pd(__m128d);
409int _mm_movemask_ps(__m128);
410__m64 _mm_movepi64_pi64(__m128i);
411__m128i _mm_movpi64_epi64(__m64);
412__m128i _mm_mpsadbw_epu8(__m128i, __m128i, int);
413__m128i _mm_mul_epi32(__m128i, __m128i);
414__m128i _mm_mul_epu32(__m128i, __m128i);
415__m128d _mm_mul_pd(__m128d, __m128d);
416__m128 _mm_mul_ps(__m128, __m128);
417__m128d _mm_mul_sd(__m128d, __m128d);
418__m128 _mm_mul_ss(__m128, __m128);
419__m128i _mm_mulhi_epi16(__m128i, __m128i);
420__m128i _mm_mulhi_epu16(__m128i, __m128i);
421__m128i _mm_mulhrs_epi16(__m128i, __m128i);
422__m64 _mm_mulhrs_pi16(__m64, __m64);
423__m128i _mm_mullo_epi16(__m128i, __m128i);
424__m128i _mm_mullo_epi32(__m128i, __m128i);
425void _mm_mwait(unsigned int, unsigned int);
426__m128d _mm_or_pd(__m128d, __m128d);
427__m128 _mm_or_ps(__m128, __m128);
428__m128i _mm_or_si128(__m128i, __m128i);
429__m128i _mm_packs_epi16(__m128i, __m128i);
430__m128i _mm_packs_epi32(__m128i, __m128i);
431__m128i _mm_packus_epi16(__m128i, __m128i);
432__m128i _mm_packus_epi32(__m128i, __m128i);
433int _mm_popcnt_u32(unsigned int);
434void _mm_prefetch(_In_ char const *, _In_ int);
435__m128 _mm_rcp_ps(__m128);
436__m128 _mm_rcp_ss(__m128);
437__m128d _mm_round_pd(__m128d, int);
438__m128 _mm_round_ps(__m128, int);
439__m128d _mm_round_sd(__m128d, __m128d, int);
440__m128 _mm_round_ss(__m128, __m128, int);
441__m128 _mm_rsqrt_ps(__m128);
442__m128 _mm_rsqrt_ss(__m128);
443__m128i _mm_sad_epu8(__m128i, __m128i);
444__m128i _mm_set1_epi16(short);
445__m128i _mm_set1_epi32(int);
446__m128i _mm_set1_epi8(char);
447__m128d _mm_set1_pd(double);
448__m128i _mm_set_epi16(short, short, short, short, short, short, short, short);
449__m128i _mm_set_epi32(int, int, int, int);
450__m128i _mm_set_epi8(char, char, char, char, char, char, char, char, char, char, char, char, char, char, char, char);
451__m128d _mm_set_pd(double, double);
452__m128 _mm_set_ps(float, float, float, float);
453__m128 _mm_set_ps1(float);
454__m128d _mm_set_sd(double);
455__m128 _mm_set_ss(float);
456void _mm_setcsr(unsigned int);
457__m128i _mm_setl_epi64(__m128i);
458__m128i _mm_setr_epi16(short, short, short, short, short, short, short, short);
459__m128i _mm_setr_epi32(int, int, int, int);
460__m128i _mm_setr_epi8(char, char, char, char, char, char, char, char, char, char, char, char, char, char, char, char);
461__m128d _mm_setr_pd(double, double);
462__m128 _mm_setr_ps(float, float, float, float);
463__m128d _mm_setzero_pd(void);
464__m128 _mm_setzero_ps(void);
465__m128i _mm_setzero_si128(void);
466__m128i _mm_shuffle_epi32(__m128i, int);
467__m128i _mm_shuffle_epi8(__m128i, __m128i);
468__m128d _mm_shuffle_pd(__m128d, __m128d, int);
469__m64 _mm_shuffle_pi8(__m64, __m64);
470__m128 _mm_shuffle_ps(__m128, __m128, unsigned int);
471__m128i _mm_shufflehi_epi16(__m128i, int);
472__m128i _mm_shufflelo_epi16(__m128i, int);
473__m128i _mm_sign_epi16(__m128i, __m128i);
474__m128i _mm_sign_epi32(__m128i, __m128i);
475__m128i _mm_sign_epi8(__m128i, __m128i);
476__m64 _mm_sign_pi16(__m64, __m64);
477__m64 _mm_sign_pi32(__m64, __m64);
478__m64 _mm_sign_pi8(__m64, __m64);
479__m128i _mm_sll_epi16(__m128i, __m128i);
480__m128i _mm_sll_epi32(__m128i, __m128i);
481__m128i _mm_sll_epi64(__m128i, __m128i);
482__m128i _mm_slli_epi16(__m128i, int);
483__m128i _mm_slli_epi32(__m128i, int);
484__m128i _mm_slli_epi64(__m128i, int);
485__m128i _mm_slli_si128(__m128i, int);
486__m128d _mm_sqrt_pd(__m128d);
487__m128 _mm_sqrt_ps(__m128);
488__m128d _mm_sqrt_sd(__m128d, __m128d);
489__m128 _mm_sqrt_ss(__m128);
490__m128i _mm_sra_epi16(__m128i, __m128i);
491__m128i _mm_sra_epi32(__m128i, __m128i);
492__m128i _mm_srai_epi16(__m128i, int);
493__m128i _mm_srai_epi32(__m128i, int);
494__m128i _mm_srl_epi16(__m128i, __m128i);
495__m128i _mm_srl_epi32(__m128i, __m128i);
496__m128i _mm_srl_epi64(__m128i, __m128i);
497__m128i _mm_srli_epi16(__m128i, int);
498__m128i _mm_srli_epi32(__m128i, int);
499__m128i _mm_srli_epi64(__m128i, int);
500__m128i _mm_srli_si128(__m128i, int);
501void _mm_store1_pd(double *, __m128d);
502void _mm_store_pd(double *, __m128d);
503void _mm_store_ps(float *, __m128);
504void _mm_store_ps1(float *, __m128);
505void _mm_store_sd(double *, __m128d);
506void _mm_store_si128(__m128i *, __m128i);
507void _mm_store_ss(float *, __m128);
508void _mm_storeh_pd(double *, __m128d);
509void _mm_storeh_pi(__m64 *, __m128);
510void _mm_storel_epi64(__m128i *, __m128i);
511void _mm_storel_pd(double *, __m128d);
512void _mm_storel_pi(__m64 *, __m128);
513void _mm_storer_pd(double *, __m128d);
514void _mm_storer_ps(float *, __m128);
515void _mm_storeu_pd(double *, __m128d);
516void _mm_storeu_ps(float *, __m128);
517void _mm_storeu_si128(__m128i *, __m128i);
518__m128i _mm_stream_load_si128(__m128i *);
519void _mm_stream_pd(double *, __m128d);
520void _mm_stream_ps(float *, __m128);
521void _mm_stream_sd(double *, __m128d);
522void _mm_stream_si128(__m128i *, __m128i);
523void _mm_stream_si32(int *, int);
524void _mm_stream_ss(float *, __m128);
525__m128i _mm_sub_epi16(__m128i, __m128i);
526__m128i _mm_sub_epi32(__m128i, __m128i);
527__m128i _mm_sub_epi64(__m128i, __m128i);
528__m128i _mm_sub_epi8(__m128i, __m128i);
529__m128d _mm_sub_pd(__m128d, __m128d);
530__m128 _mm_sub_ps(__m128, __m128);
531__m128d _mm_sub_sd(__m128d, __m128d);
532__m128 _mm_sub_ss(__m128, __m128);
533__m128i _mm_subs_epi16(__m128i, __m128i);
534__m128i _mm_subs_epi8(__m128i, __m128i);
535__m128i _mm_subs_epu16(__m128i, __m128i);
536__m128i _mm_subs_epu8(__m128i, __m128i);
537int _mm_testc_si128(__m128i, __m128i);
538int _mm_testnzc_si128(__m128i, __m128i);
539int _mm_testz_si128(__m128i, __m128i);
540int _mm_ucomieq_sd(__m128d, __m128d);
541int _mm_ucomieq_ss(__m128, __m128);
542int _mm_ucomige_sd(__m128d, __m128d);
543int _mm_ucomige_ss(__m128, __m128);
544int _mm_ucomigt_sd(__m128d, __m128d);
545int _mm_ucomigt_ss(__m128, __m128);
546int _mm_ucomile_sd(__m128d, __m128d);
547int _mm_ucomile_ss(__m128, __m128);
548int _mm_ucomilt_sd(__m128d, __m128d);
549int _mm_ucomilt_ss(__m128, __m128);
550int _mm_ucomineq_sd(__m128d, __m128d);
551int _mm_ucomineq_ss(__m128, __m128);
552__m128i _mm_unpackhi_epi16(__m128i, __m128i);
553__m128i _mm_unpackhi_epi32(__m128i, __m128i);
554__m128i _mm_unpackhi_epi64(__m128i, __m128i);
555__m128i _mm_unpackhi_epi8(__m128i, __m128i);
556__m128d _mm_unpackhi_pd(__m128d, __m128d);
557__m128 _mm_unpackhi_ps(__m128, __m128);
558__m128i _mm_unpacklo_epi16(__m128i, __m128i);
559__m128i _mm_unpacklo_epi32(__m128i, __m128i);
560__m128i _mm_unpacklo_epi64(__m128i, __m128i);
561__m128i _mm_unpacklo_epi8(__m128i, __m128i);
562__m128d _mm_unpacklo_pd(__m128d, __m128d);
563__m128 _mm_unpacklo_ps(__m128, __m128);
564__m128d _mm_xor_pd(__m128d, __m128d);
565__m128 _mm_xor_ps(__m128, __m128);
566__m128i _mm_xor_si128(__m128i, __m128i);
567#endif // 0
568
569int __cdecl _outp(unsigned short, int);
570unsigned long __cdecl _outpd(unsigned short, unsigned long);
571unsigned short __cdecl _outpw(unsigned short, unsigned short);
572int __cdecl inp(unsigned short);
573unsigned long __cdecl inpd(unsigned short);
574unsigned short __cdecl inpw(unsigned short);
575int __cdecl outp(unsigned short, int);
576unsigned long __cdecl outpd(unsigned short, unsigned long);
577unsigned short __cdecl outpw(unsigned short, unsigned short);
578
579#endif /* _M_IX86 || _M_X64 */
580
581#if defined(_M_IX86)
582
583long _InterlockedAddLargeStatistic(_Interlocked_operand_ __int64 volatile * _Addend, long _Value);
584void __addfsbyte(unsigned long, unsigned char);
585void __addfsdword(unsigned long, unsigned long);
586void __addfsword(unsigned long, unsigned short);
587void __incfsbyte(unsigned long);
588void __incfsdword(unsigned long);
589void __incfsword(unsigned long);
590unsigned long __readcr0(void);
591unsigned long __readcr2(void);
592unsigned long __readcr3(void);
593unsigned long __readcr4(void);
594unsigned long __readcr8(void);
595unsigned int __readdr(unsigned int);
596unsigned int __readeflags(void);
597unsigned char __readfsbyte(unsigned long);
598unsigned long __readfsdword(unsigned long);
599unsigned short __readfsword(unsigned long);
600void __writecr0(unsigned int);
601void __writecr3(unsigned int);
602void __writecr4(unsigned int);
603void __writecr8(unsigned int);
604void __writedr(unsigned int, unsigned int);
605void __writeeflags(unsigned int);
606void __writefsbyte(unsigned long, unsigned char);
607void __writefsdword(unsigned long, unsigned long);
608void __writefsword(unsigned long, unsigned short);
609void _m_empty(void);
610void _m_femms(void);
611
612#if 0
613__m64 _m_from_float(float);
614__m64 _m_from_int(int);
615void _m_maskmovq(__m64, __m64, _Out_writes_bytes_(8) char *);
616__m64 _m_packssdw(__m64, __m64);
617__m64 _m_packsswb(__m64, __m64);
618__m64 _m_packuswb(__m64, __m64);
619__m64 _m_paddb(__m64, __m64);
620__m64 _m_paddd(__m64, __m64);
621__m64 _m_paddsb(__m64, __m64);
622__m64 _m_paddsw(__m64, __m64);
623__m64 _m_paddusb(__m64, __m64);
624__m64 _m_paddusw(__m64, __m64);
625__m64 _m_paddw(__m64, __m64);
626__m64 _m_pand(__m64, __m64);
627__m64 _m_pandn(__m64, __m64);
628__m64 _m_pavgb(__m64, __m64);
629__m64 _m_pavgusb(__m64, __m64);
630__m64 _m_pavgw(__m64, __m64);
631__m64 _m_pcmpeqb(__m64, __m64);
632__m64 _m_pcmpeqd(__m64, __m64);
633__m64 _m_pcmpeqw(__m64, __m64);
634__m64 _m_pcmpgtb(__m64, __m64);
635__m64 _m_pcmpgtd(__m64, __m64);
636__m64 _m_pcmpgtw(__m64, __m64);
637int _m_pextrw(__m64, int);
638__m64 _m_pf2id(__m64);
639__m64 _m_pf2iw(__m64);
640__m64 _m_pfacc(__m64, __m64);
641__m64 _m_pfadd(__m64, __m64);
642__m64 _m_pfcmpeq(__m64, __m64);
643__m64 _m_pfcmpge(__m64, __m64);
644__m64 _m_pfcmpgt(__m64, __m64);
645__m64 _m_pfmax(__m64, __m64);
646__m64 _m_pfmin(__m64, __m64);
647__m64 _m_pfmul(__m64, __m64);
648__m64 _m_pfnacc(__m64, __m64);
649__m64 _m_pfpnacc(__m64, __m64);
650__m64 _m_pfrcp(__m64);
651__m64 _m_pfrcpit1(__m64, __m64);
652__m64 _m_pfrcpit2(__m64, __m64);
653__m64 _m_pfrsqit1(__m64, __m64);
654__m64 _m_pfrsqrt(__m64);
655__m64 _m_pfsub(__m64, __m64);
656__m64 _m_pfsubr(__m64, __m64);
657__m64 _m_pi2fd(__m64);
658__m64 _m_pi2fw(__m64);
659__m64 _m_pinsrw(__m64, int, int);
660__m64 _m_pmaddwd(__m64, __m64);
661__m64 _m_pmaxsw(__m64, __m64);
662__m64 _m_pmaxub(__m64, __m64);
663__m64 _m_pminsw(__m64, __m64);
664__m64 _m_pminub(__m64, __m64);
665int _m_pmovmskb(__m64);
666__m64 _m_pmulhrw(__m64, __m64);
667__m64 _m_pmulhuw(__m64, __m64);
668__m64 _m_pmulhw(__m64, __m64);
669__m64 _m_pmullw(__m64, __m64);
670__m64 _m_por(__m64, __m64);
671__m64 _m_psadbw(__m64, __m64);
672__m64 _m_pshufw(__m64, int);
673__m64 _m_pslld(__m64, __m64);
674__m64 _m_pslldi(__m64, int);
675__m64 _m_psllq(__m64, __m64);
676__m64 _m_psllqi(__m64, int);
677__m64 _m_psllw(__m64, __m64);
678__m64 _m_psllwi(__m64, int);
679__m64 _m_psrad(__m64, __m64);
680__m64 _m_psradi(__m64, int);
681__m64 _m_psraw(__m64, __m64);
682__m64 _m_psrawi(__m64, int);
683__m64 _m_psrld(__m64, __m64);
684__m64 _m_psrldi(__m64, int);
685__m64 _m_psrlq(__m64, __m64);
686__m64 _m_psrlqi(__m64, int);
687__m64 _m_psrlw(__m64, __m64);
688__m64 _m_psrlwi(__m64, int);
689__m64 _m_psubb(__m64, __m64);
690__m64 _m_psubd(__m64, __m64);
691__m64 _m_psubsb(__m64, __m64);
692__m64 _m_psubsw(__m64, __m64);
693__m64 _m_psubusb(__m64, __m64);
694__m64 _m_psubusw(__m64, __m64);
695__m64 _m_psubw(__m64, __m64);
696__m64 _m_pswapd(__m64);
697__m64 _m_punpckhbw(__m64, __m64);
698__m64 _m_punpckhdq(__m64, __m64);
699__m64 _m_punpckhwd(__m64, __m64);
700__m64 _m_punpcklbw(__m64, __m64);
701__m64 _m_punpckldq(__m64, __m64);
702__m64 _m_punpcklwd(__m64, __m64);
703__m64 _m_pxor(__m64, __m64);
704float _m_to_float(__m64);
705int _m_to_int(__m64);
706__m64 _mm_add_si64(__m64, __m64);
707__m128 _mm_cvt_pi2ps(__m128, __m64);
708__m64 _mm_cvt_ps2pi(__m128);
709__m64 _mm_cvtpd_pi32(__m128d);
710__m128d _mm_cvtpi32_pd(__m64);
711__m64 _mm_cvtt_ps2pi(__m128);
712__m64 _mm_cvttpd_pi32(__m128d);
713__m64 _mm_mul_su32(__m64, __m64);
714__m128i _mm_set1_epi64(__m64);
715__m64 _mm_set1_pi16(short);
716__m64 _mm_set1_pi32(int);
717__m64 _mm_set1_pi8(char);
718__m128i _mm_set_epi64(__m64, __m64);
719__m64 _mm_set_pi16(short, short, short, short);
720__m64 _mm_set_pi32(int, int);
721__m64 _mm_set_pi8(char, char, char, char, char, char, char, char);
722__m128i _mm_setr_epi64(__m64, __m64);
723__m64 _mm_setr_pi16(short, short, short, short);
724__m64 _mm_setr_pi32(int, int);
725__m64 _mm_setr_pi8(char, char, char, char, char, char, char, char);
726__m64 _mm_setzero_si64(void);
727void _mm_stream_pi(__m64 *, __m64);
728__m64 _mm_sub_si64(__m64, __m64);
729#endif // 0
730
731#endif /* _M_IX86 */
732
733#if defined(_M_X64)
734
735unsigned char _BitScanForward64(unsigned long * _Index, unsigned __int64 _Mask);
736unsigned char _BitScanReverse64(unsigned long * _Index, unsigned __int64 _Mask);
737short _InterlockedAnd16_np(short volatile * _Value, short _Mask);
738__int64 _InterlockedAnd64_np(__int64 volatile * _Value, __int64 _Mask);
739char _InterlockedAnd8_np(char volatile * _Value, char _Mask);
740long _InterlockedAnd_np(long volatile * _Value, long _Mask);
741unsigned char _InterlockedCompareExchange128(_Interlocked_operand_ __int64 volatile * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult);
742unsigned char _InterlockedCompareExchange128_np(__int64 volatile * _Destination, __int64 _ExchangeHigh, __int64 _ExchangeLow, __int64 * _ComparandResult);
743short _InterlockedCompareExchange16_np(short volatile * _Destination, short _Exchange, short _Comparand);
744__int64 _InterlockedCompareExchange64_np(__int64 volatile * _Destination, __int64 _Exchange, __int64 _Comparand);
745void * _InterlockedCompareExchangePointer_np(void * volatile * _Destination, void * _Exchange, void * _Comparand);
746long _InterlockedCompareExchange_np(long volatile * _Destination, long _Exchange, long _Comparand);
747short _InterlockedOr16_np(short volatile * _Value, short _Mask);
748__int64 _InterlockedOr64_np(__int64 volatile * _Value, __int64 _Mask);
749char _InterlockedOr8_np(char volatile * _Value, char _Mask);
750long _InterlockedOr_np(long volatile * _Value, long _Mask);
751short _InterlockedXor16_np(short volatile * _Value, short _Mask);
752__int64 _InterlockedXor64_np(__int64 volatile * _Value, __int64 _Mask);
753char _InterlockedXor8_np(char volatile * _Value, char _Mask);
754long _InterlockedXor_np(long volatile * _Value, long _Mask);
755void __addgsbyte(unsigned long, unsigned char);
756void __addgsdword(unsigned long, unsigned long);
757void __addgsqword(unsigned long, unsigned __int64);
758void __addgsword(unsigned long, unsigned short);
759void __faststorefence(void);
760void __incgsbyte(unsigned long);
761void __incgsdword(unsigned long);
762void __incgsqword(unsigned long);
763void __incgsword(unsigned long);
764unsigned __int64 __lzcnt64(unsigned __int64);
765void __movsq(unsigned long long *, unsigned long long const *, size_t);
766__int64 __mulh(__int64, __int64);
767__int64 _mul128(__int64 _Multiplier, __int64 _Multiplicand, __int64 * _HighProduct);
768unsigned __int64 _umul128(unsigned __int64 _Multiplier, unsigned __int64 _Multiplicand, unsigned __int64 * _HighProduct);
769unsigned __int64 __popcnt64(unsigned __int64);
770unsigned __int64 __readcr0(void);
771unsigned __int64 __readcr2(void);
772unsigned __int64 __readcr3(void);
773unsigned __int64 __readcr4(void);
774unsigned __int64 __readcr8(void);
775unsigned __int64 __readdr(unsigned int);
776unsigned __int64 __readeflags(void);
777unsigned char __readgsbyte(unsigned long);
778unsigned long __readgsdword(unsigned long);
779unsigned __int64 __readgsqword(unsigned long);
780unsigned short __readgsword(unsigned long);
781unsigned __int64 __shiftleft128(unsigned __int64 _LowPart, unsigned __int64 _HighPart, unsigned char _Shift);
782unsigned __int64 __shiftright128(unsigned __int64 _LowPart, unsigned __int64 _HighPart, unsigned char _Shift);
783void __stosq(unsigned __int64 *, unsigned __int64, size_t);
784unsigned __int64 __umulh(unsigned __int64, unsigned __int64);
785unsigned char __vmx_on(unsigned __int64 *);
786unsigned char __vmx_vmclear(unsigned __int64 *);
787unsigned char __vmx_vmlaunch(void);
788unsigned char __vmx_vmptrld(unsigned __int64 *);
789unsigned char __vmx_vmread(size_t, size_t *);
790unsigned char __vmx_vmresume(void);
791unsigned char __vmx_vmwrite(size_t, size_t);
792void __writecr0(unsigned __int64);
793void __writecr3(unsigned __int64);
794void __writecr4(unsigned __int64);
795void __writecr8(unsigned __int64);
796void __writedr(unsigned int, unsigned __int64);
797void __writeeflags(unsigned __int64);
798void __writegsbyte(unsigned long, unsigned char);
799void __writegsdword(unsigned long, unsigned long);
800void __writegsqword(unsigned long, unsigned __int64);
801void __writegsword(unsigned long, unsigned short);
802unsigned char _bittest64(__int64 const *, __int64);
803unsigned char _bittestandcomplement64(__int64 *, __int64);
804unsigned char _bittestandreset64(__int64 *, __int64);
805unsigned char _bittestandset64(__int64 *, __int64);
806unsigned char _interlockedbittestandreset64(__int64 volatile *, __int64);
807unsigned char _interlockedbittestandset64(__int64 volatile *, __int64);
808unsigned __int64 _mm_crc32_u64(unsigned __int64, unsigned __int64);
809#if 0
810__int64 _mm_cvtsd_si64(__m128d);
811__int64 _mm_cvtsd_si64x(__m128d);
812__int64 _mm_cvtsi128_si64(__m128i);
813__int64 _mm_cvtsi128_si64x(__m128i);
814__m128d _mm_cvtsi64_sd(__m128d, __int64);
815__m128i _mm_cvtsi64_si128(__int64);
816__m128 _mm_cvtsi64_ss(__m128, __int64);
817__m128d _mm_cvtsi64x_sd(__m128d, __int64);
818__m128i _mm_cvtsi64x_si128(__int64);
819__m128 _mm_cvtsi64x_ss(__m128, __int64);
820__int64 _mm_cvtss_si64(__m128);
821__int64 _mm_cvtss_si64x(__m128);
822__int64 _mm_cvttsd_si64(__m128d);
823__int64 _mm_cvttsd_si64x(__m128d);
824__int64 _mm_cvttss_si64(__m128);
825__int64 _mm_cvttss_si64x(__m128);
826__int64 _mm_extract_epi64(__m128i, int);
827__m128i _mm_insert_epi64(__m128i, __int64, int);
828__int64 _mm_popcnt_u64(unsigned __int64);
829__m128i _mm_set1_epi64x(__int64);
830__m128i _mm_set_epi64x(__int64, __int64);
831void _mm_stream_si64x(__int64 *, __int64);
832#endif
833#endif /* _M_X64 */
834
835#if defined(_M_ARM) || defined(_M_X64)
836
837__int64 _InterlockedAnd64(_Interlocked_operand_ __int64 volatile * _Value, __int64 _Mask);
838__int64 _InterlockedDecrement64(_Interlocked_operand_ __int64 volatile * _Addend);
839__int64 _InterlockedExchange64(_Interlocked_operand_ __int64 volatile * _Target, __int64 _Value);
840__int64 _InterlockedExchangeAdd64(_Interlocked_operand_ __int64 volatile * _Addend, __int64 _Value);
841__int64 _InterlockedIncrement64(_Interlocked_operand_ __int64 volatile * _Addend);
842__int64 _InterlockedOr64(_Interlocked_operand_ __int64 volatile * _Value, __int64 _Mask);
843__int64 _InterlockedXor64(_Interlocked_operand_ __int64 volatile * _Value, __int64 _Mask);
844
845#endif /* _M_ARM || _M_X64 */
846
847#if defined(_M_ARM)
848
849int _AddSatInt(int, int);
850double _CopyDoubleFromInt64(__int64);
851float _CopyFloatFromInt32(__int32);
852__int32 _CopyInt32FromFloat(float);
853__int64 _CopyInt64FromDouble(double);
854unsigned int _CountLeadingOnes(unsigned long);
855unsigned int _CountLeadingOnes64(unsigned __int64);
856unsigned int _CountLeadingSigns(long);
857unsigned int _CountLeadingSigns64(__int64);
858unsigned int _CountLeadingZeros(unsigned long);
859unsigned int _CountLeadingZeros64(unsigned __int64);
860unsigned int _CountOneBits(unsigned long);
861unsigned int _CountOneBits64(unsigned __int64);
862int _DAddSatInt(int, int);
863int _DSubSatInt(int, int);
864long _InterlockedAdd(_Interlocked_operand_ long volatile * _Addend, long _Value);
865__int64 _InterlockedAdd64(_Interlocked_operand_ __int64 volatile * _Addend, __int64 _Value);
866__int64 _InterlockedAdd64_acq(__int64 volatile * _Addend, __int64 _Value);
867__int64 _InterlockedAdd64_nf(__int64 volatile * _Addend, __int64 _Value);
868__int64 _InterlockedAdd64_rel(__int64 volatile * _Addend, __int64 _Value);
869long _InterlockedAdd_acq(long volatile * _Addend, long _Value);
870long _InterlockedAdd_nf(long volatile * _Addend, long _Value);
871long _InterlockedAdd_rel(long volatile * _Addend, long _Value);
872short _InterlockedAnd16_acq(short volatile * _Value, short _Mask);
873short _InterlockedAnd16_nf(short volatile * _Value, short _Mask);
874short _InterlockedAnd16_rel(short volatile * _Value, short _Mask);
875__int64 _InterlockedAnd64_acq(__int64 volatile * _Value, __int64 _Mask);
876__int64 _InterlockedAnd64_nf(__int64 volatile * _Value, __int64 _Mask);
877__int64 _InterlockedAnd64_rel(__int64 volatile * _Value, __int64 _Mask);
878char _InterlockedAnd8_acq(char volatile * _Value, char _Mask);
879char _InterlockedAnd8_nf(char volatile * _Value, char _Mask);
880char _InterlockedAnd8_rel(char volatile * _Value, char _Mask);
881long _InterlockedAnd_acq(long volatile * _Value, long _Mask);
882long _InterlockedAnd_nf(long volatile * _Value, long _Mask);
883long _InterlockedAnd_rel(long volatile * _Value, long _Mask);
884short _InterlockedCompareExchange16_acq(short volatile * _Destination, short _Exchange, short _Comparand);
885short _InterlockedCompareExchange16_nf(short volatile * _Destination, short _Exchange, short _Comparand);
886short _InterlockedCompareExchange16_rel(short volatile * _Destination, short _Exchange, short _Comparand);
887__int64 _InterlockedCompareExchange64_acq(__int64 volatile * _Destination, __int64 _Exchange, __int64 _Comparand);
888__int64 _InterlockedCompareExchange64_nf(__int64 volatile * _Destination, __int64 _Exchange, __int64 _Comparand);
889__int64 _InterlockedCompareExchange64_rel(__int64 volatile * _Destination, __int64 _Exchange, __int64 _Comparand);
890char _InterlockedCompareExchange8_acq(char volatile * _Destination, char _Exchange, char _Comparand);
891char _InterlockedCompareExchange8_nf(char volatile * _Destination, char _Exchange, char _Comparand);
892char _InterlockedCompareExchange8_rel(char volatile * _Destination, char _Exchange, char _Comparand);
893void * _InterlockedCompareExchangePointer_acq(void * volatile * _Destination, void * _Exchange, void * _Comparand);
894void * _InterlockedCompareExchangePointer_nf(void * volatile * _Destination, void * _Exchange, void * _Comparand);
895void * _InterlockedCompareExchangePointer_rel(void * volatile * _Destination, void * _Exchange, void * _Comparand);
896long _InterlockedCompareExchange_acq(long volatile * _Destination, long _Exchange, long _Comparand);
897long _InterlockedCompareExchange_nf(long volatile * _Destination, long _Exchange, long _Comparand);
898long _InterlockedCompareExchange_rel(long volatile * _Destination, long _Exchange, long _Comparand);
899short _InterlockedDecrement16_acq(short volatile * _Addend);
900short _InterlockedDecrement16_nf(short volatile * _Addend);
901short _InterlockedDecrement16_rel(short volatile * _Addend);
902__int64 _InterlockedDecrement64_acq(__int64 volatile * _Addend);
903__int64 _InterlockedDecrement64_nf(__int64 volatile * _Addend);
904__int64 _InterlockedDecrement64_rel(__int64 volatile * _Addend);
905long _InterlockedDecrement_acq(long volatile * _Addend);
906long _InterlockedDecrement_nf(long volatile * _Addend);
907long _InterlockedDecrement_rel(long volatile * _Addend);
908short _InterlockedExchange16_acq(short volatile * _Target, short _Value);
909short _InterlockedExchange16_nf(short volatile * _Target, short _Value);
910__int64 _InterlockedExchange64_acq(__int64 volatile * _Target, __int64 _Value);
911__int64 _InterlockedExchange64_nf(__int64 volatile * _Target, __int64 _Value);
912char _InterlockedExchange8_acq(char volatile * _Target, char _Value);
913char _InterlockedExchange8_nf(char volatile * _Target, char _Value);
914short _InterlockedExchangeAdd16_acq(short volatile * _Addend, short _Value);
915short _InterlockedExchangeAdd16_nf(short volatile * _Addend, short _Value);
916short _InterlockedExchangeAdd16_rel(short volatile * _Addend, short _Value);
917__int64 _InterlockedExchangeAdd64_acq(__int64 volatile * _Addend, __int64 _Value);
918__int64 _InterlockedExchangeAdd64_nf(__int64 volatile * _Addend, __int64 _Value);
919__int64 _InterlockedExchangeAdd64_rel(__int64 volatile * _Addend, __int64 _Value);
920char _InterlockedExchangeAdd8_acq(char volatile * _Addend, char _Value);
921char _InterlockedExchangeAdd8_nf(char volatile * _Addend, char _Value);
922char _InterlockedExchangeAdd8_rel(char volatile * _Addend, char _Value);
923long _InterlockedExchangeAdd_acq(long volatile * _Addend, long _Value);
924long _InterlockedExchangeAdd_nf(long volatile * _Addend, long _Value);
925long _InterlockedExchangeAdd_rel(long volatile * _Addend, long _Value);
926void * _InterlockedExchangePointer_acq(void * volatile * _Target, void * _Value);
927void * _InterlockedExchangePointer_nf(void * volatile * _Target, void * _Value);
928long _InterlockedExchange_acq(long volatile * _Target, long _Value);
929long _InterlockedExchange_nf(long volatile * _Target, long _Value);
930short _InterlockedIncrement16_acq(short volatile * _Addend);
931short _InterlockedIncrement16_nf(short volatile * _Addend);
932short _InterlockedIncrement16_rel(short volatile * _Addend);
933__int64 _InterlockedIncrement64_acq(__int64 volatile * _Addend);
934__int64 _InterlockedIncrement64_nf(__int64 volatile * _Addend);
935__int64 _InterlockedIncrement64_rel(__int64 volatile * _Addend);
936long _InterlockedIncrement_acq(long volatile * _Addend);
937long _InterlockedIncrement_nf(long volatile * _Addend);
938long _InterlockedIncrement_rel(long volatile * _Addend);
939short _InterlockedOr16_acq(short volatile * _Value, short _Mask);
940short _InterlockedOr16_nf(short volatile * _Value, short _Mask);
941short _InterlockedOr16_rel(short volatile * _Value, short _Mask);
942__int64 _InterlockedOr64_acq(__int64 volatile * _Value, __int64 _Mask);
943__int64 _InterlockedOr64_nf(__int64 volatile * _Value, __int64 _Mask);
944__int64 _InterlockedOr64_rel(__int64 volatile * _Value, __int64 _Mask);
945char _InterlockedOr8_acq(char volatile * _Value, char _Mask);
946char _InterlockedOr8_nf(char volatile * _Value, char _Mask);
947char _InterlockedOr8_rel(char volatile * _Value, char _Mask);
948long _InterlockedOr_acq(long volatile * _Value, long _Mask);
949long _InterlockedOr_nf(long volatile * _Value, long _Mask);
950long _InterlockedOr_rel(long volatile * _Value, long _Mask);
951short _InterlockedXor16_acq(short volatile * _Value, short _Mask);
952short _InterlockedXor16_nf(short volatile * _Value, short _Mask);
953short _InterlockedXor16_rel(short volatile * _Value, short _Mask);
954__int64 _InterlockedXor64_acq(__int64 volatile * _Value, __int64 _Mask);
955__int64 _InterlockedXor64_nf(__int64 volatile * _Value, __int64 _Mask);
956__int64 _InterlockedXor64_rel(_Interlocked_operand_ __int64 volatile * _Value, __int64 _Mask);
957char _InterlockedXor8_acq(char volatile * _Value, char _Mask);
958char _InterlockedXor8_nf(char volatile * _Value, char _Mask);
959char _InterlockedXor8_rel(char volatile * _Value, char _Mask);
960long _InterlockedXor_acq(long volatile * _Value, long _Mask);
961long _InterlockedXor_nf(long volatile * _Value, long _Mask);
962long _InterlockedXor_rel(long volatile * _Value, long _Mask);
963#if _MSC_FULL_VER >= 170040825
964unsigned int _MoveFromCoprocessor(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
965unsigned int _MoveFromCoprocessor2(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
966#else
967int _MoveFromCoprocessor(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
968int _MoveFromCoprocessor2(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
969#endif
970unsigned __int64 _MoveFromCoprocessor64(unsigned int, unsigned int, unsigned int);
971void _MoveToCoprocessor(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
972void _MoveToCoprocessor2(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
973void _MoveToCoprocessor64(unsigned __int64, unsigned int, unsigned int, unsigned int);
974long _MulHigh(long, long);
975unsigned long _MulUnsignedHigh(unsigned long, unsigned long);
976int _ReadStatusReg(int);
977int _SubSatInt(int, int);
978void _WriteStatusReg(int, int, int);
979void __emit(unsigned __int32);
980__int64 __ldrexd(__int64 volatile *);
981void __cdecl __prefetch(const void *);
982unsigned __int64 __rdpmccntr64(void);
983void __sev(void);
984void __static_assert(int, const char *);
985unsigned int __swi(unsigned int, ...);
986unsigned int __hvc(unsigned int, ...);
987int __trap(int, ...);
988__int16 __iso_volatile_load16(const volatile __int16 *);
989__int32 __iso_volatile_load32(const volatile __int32 *);
990__int64 __iso_volatile_load64(const volatile __int64 *);
991__int8 __iso_volatile_load8(const volatile __int8 *);
992void __iso_volatile_store16(volatile __int16 *, __int16);
993void __iso_volatile_store32(volatile __int32 *, __int32);
994void __iso_volatile_store64(volatile __int64 *, __int64);
995void __iso_volatile_store8(volatile __int8 *, __int8);
996void __wfe(void);
997void __wfi(void);
998void __yield(void);
999unsigned char _interlockedbittestandreset_acq(long volatile *, long);
1000unsigned char _interlockedbittestandreset_nf(long volatile *, long);
1001unsigned char _interlockedbittestandreset_rel(long volatile *, long);
1002unsigned char _interlockedbittestandset_acq(long volatile *, long);
1003unsigned char _interlockedbittestandset_nf(long volatile *, long);
1004unsigned char _interlockedbittestandset_rel(long volatile *, long);
1005int _isunordered(double, double);
1006int _isunorderedf(float, float);
1007
1008#endif /* _M_ARM */
1009
1010#ifdef _M_ARM64
1011unsigned __int64 __getReg(int);
1012#endif
1013
1014#if defined(_M_CEE_PURE)
1015
1016long _InterlockedCompareExchange(_Interlocked_operand_ long volatile * _Destination, long _Exchange, long _Comparand);
1017long _InterlockedDecrement(_Interlocked_operand_ long volatile * _Addend);
1018long _InterlockedIncrement(_Interlocked_operand_ long volatile * _Addend);
1019
1020#endif /* _M_CEE_PURE */
1021
1022#if defined(__cplusplus)
1023}
1024#endif /* __cplusplus */
1025
1026#if (defined(__GNUC__) || defined(__clang__)) && defined(_WIN32) // We can't use __MINGW32__ here
1027# include "mingw32/intrin.h"
1028#elif defined(_MSC_VER)
1029# include "msc/intrin.h"
1030#else
1031# error Please implement intrinsics for your target compiler
1032#endif
1033
1034#endif