15#if defined(_MSC_VER) && !defined(__clang__)
23 unsigned __int8 m256i_u8[32];
33typedef long long __v4di
__attribute__ ((__vector_size__ (32)));
35typedef long long __m256i
__attribute__((__vector_size__(32), __may_alias__));
71void __cdecl _fxrstor64(
void const *);
84#if defined(_MSC_VER) && !defined(__clang__)
86#pragma intrinsic(_mm256_cmpeq_epi8)
87#pragma intrinsic(_mm256_cmpeq_epi16)
88#pragma intrinsic(_mm256_movemask_epi8)
89#pragma intrinsic(_mm256_setzero_si256)
90#pragma intrinsic(_mm256_zeroupper)
92#pragma intrinsic(_rdrand16_step)
93#pragma intrinsic(_rdrand32_step)
95#pragma intrinsic(_rdrand64_step)
97#pragma intrinsic(_rdseed16_step)
98#pragma intrinsic(_rdseed32_step)
100#pragma intrinsic(_rdseed64_step)
103#pragma intrinsic(_fxsave)
104#pragma intrinsic(_fxrstor)
105#pragma intrinsic(_xsave)
106#pragma intrinsic(_xsaveopt)
107#pragma intrinsic(_xsavec)
108#pragma intrinsic(_xsaves)
109#pragma intrinsic(_xrstor)
110#pragma intrinsic(_xrstors)
112#pragma intrinsic(_fxsave64)
113#pragma intrinsic(_fxrstor64)
114#pragma intrinsic(_xsave64)
115#pragma intrinsic(_xsaveopt64)
116#pragma intrinsic(_xsavec64)
117#pragma intrinsic(_xsaves64)
118#pragma intrinsic(_xrstor64)
119#pragma intrinsic(_xrstors64)
122#pragma intrinsic(_xgetbv)
123#pragma intrinsic(_xsetbv)
128#define __ATTRIBUTE_SSE2__ __attribute__((__target__("sse2"),__min_vector_width__(128)))
129#define __ATTRIBUTE_AVX__ __attribute__((__target__("avx"),__min_vector_width__(256)))
130#define __ATTRIBUTE_AVX2__ __attribute__((__target__("avx2"),__min_vector_width__(256)))
132#define __ATTRIBUTE_SSE2__ __attribute__((__target__("sse2")))
133#define __ATTRIBUTE_AVX__ __attribute__((__target__("avx")))
134#define __ATTRIBUTE_AVX2__ __attribute__((__target__("avx2")))
136#define __INTRIN_INLINE_SSE2 __INTRIN_INLINE __ATTRIBUTE_SSE2__
137#define __INTRIN_INLINE_AVX __INTRIN_INLINE __ATTRIBUTE_AVX__
138#define __INTRIN_INLINE_AVX2 __INTRIN_INLINE __ATTRIBUTE_AVX2__
142 return (__m256i)((__v32qi)__A == (__v32qi)__B);
147 return (__m256i)((__v16hi)__A == (__v16hi)__B);
152 return __builtin_ia32_pmovmskb256((__v32qi)__A);
157 return __extension__ (__m256i)(__v4di){ 0, 0, 0, 0 };
162 __asm__ __volatile__(
"vzeroupper");
168 __asm__ __volatile__(
"rdrand %0; setc %1" :
"=r"(*random_val),
"=qm"(
ok));
175 __asm__ __volatile__(
"rdrand %0; setc %1" :
"=r"(*random_val),
"=qm"(
ok));
179#if defined(__x86_64__)
183 __asm__ __volatile__(
"rdrand %0; setc %1" :
"=r"(*random_val),
"=qm"(
ok));
191 __asm__ __volatile__(
"rdseed %0; setc %1" :
"=r"(*random_val),
"=qm"(
ok));
198 __asm__ __volatile__(
"rdseed %0; setc %1" :
"=r"(*random_val),
"=qm"(
ok));
202#if defined(__x86_64__)
206 __asm__ __volatile__(
"rdseed %0; setc %1" :
"=r"(*random_val),
"=qm"(
ok));
214 __builtin_ia32_fxsave(
__P);
216 __asm__ __volatile__(
"fxsave (%0)" : :
"r"(
__P));
223 __builtin_ia32_fxrstor((
void*)
__P);
225 __asm__ __volatile__(
"fxrstor (%0)" : :
"r"(
__P));
229#if defined(__x86_64__)
232 __builtin_ia32_fxsave64(
__P);
237 __builtin_ia32_fxrstor64((
void*)
__P);
242#define __ATTRIBUTE_XSAVE__ __attribute__((__target__("xsave")))
244#define __ATTRIBUTE_XSAVE__
246#define __INTRIN_INLINE_XSAVE __INTRIN_INLINE __ATTRIBUTE_XSAVE__
250 __builtin_ia32_xsave(
__P, __M);
256 __builtin_ia32_xsavec(
__P, __M);
258 __asm__ __volatile__(
"xsavec %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
265 __builtin_ia32_xsaveopt(
__P, __M);
267 __asm__ __volatile__(
"xsaveopt %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
274 __builtin_ia32_xsaves(
__P, __M);
276 __asm__ __volatile__(
"xsaves %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
282 __builtin_ia32_xrstor((
void*)
__P, __M);
288 __builtin_ia32_xrstors((
void*)
__P, __M);
290 __asm__ __volatile__(
"xrstors %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
294#if defined(__x86_64__)
297 __builtin_ia32_xsave64(
__P, __M);
303 __builtin_ia32_xsavec64(
__P, __M);
305 __asm__ __volatile__(
"xsavec %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
312 __builtin_ia32_xsaveopt64(
__P, __M);
314 __asm__ __volatile__(
"xsaveopt %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
321 __builtin_ia32_xsaves64(
__P, __M);
323 __asm__ __volatile__(
"xsaves %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
329 __builtin_ia32_xrstor64((
void*)
__P, __M);
335 __builtin_ia32_xrstors64((
void*)
__P, __M);
337 __asm__ __volatile__(
"xrstors %0" :
"=m" (*(
char*)
__P) :
"a" ((
unsigned int)__M),
"d" ((
unsigned int)(__M >> 32)) :
"memory");
345 return __builtin_ia32_xgetbv(__A);
350 __builtin_ia32_xsetbv(__A, __V);
#define _DECLSPEC_INTRIN_TYPE
void __cdecl _fxrstor(void const *)
int __cdecl _rdseed32_step(unsigned int *random_val)
void __cdecl _xsaves(void *, unsigned __int64)
#define __INTRIN_INLINE_XSAVE
int __cdecl _rdrand32_step(unsigned int *random_val)
#define __INTRIN_INLINE_AVX
int __cdecl _rdseed16_step(unsigned short *random_val)
__m256i __cdecl _mm256_setzero_si256(void)
void __cdecl _xrstors(void const *, unsigned __int64)
int __cdecl _rdrand16_step(unsigned short *random_val)
unsigned __int64 __cdecl _xgetbv(unsigned int)
char __v32qi __attribute__((__vector_size__(32)))
void __cdecl _fxsave(void *)
#define __INTRIN_INLINE_AVX2
int __cdecl _mm256_movemask_epi8(__m256i)
void __cdecl _xsetbv(unsigned int, unsigned __int64)
void __cdecl _xrstor(void const *, unsigned __int64)
__m256i __cdecl _mm256_cmpeq_epi8(__m256i, __m256i)
void __cdecl _mm256_zeroupper(void)
void __cdecl _xsavec(void *, unsigned __int64)
__m256i __cdecl _mm256_cmpeq_epi16(__m256i, __m256i)
void __cdecl _xsaveopt(void *, unsigned __int64)
void __cdecl _xsave(void *, unsigned __int64)
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tsub $32, %rsp\n" "\t.seh_stackalloc 32\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $32, %rsp\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")