15#if (defined _M_IX86 || defined _M_X64) && !defined(_M_HYBRID_X86_ARM64) && !defined(_M_ARM64EC)
16 #define _CRT_SIMD_SUPPORT_AVAILABLE
19#if defined _CRT_SIMD_SUPPORT_AVAILABLE
22#define _UCRT_ENABLE_EXTENDED_ISA \
23 _Pragma("clang attribute push(__attribute__((target(\"sse2,avx,avx2\"))), apply_to=function)")
24#define _UCRT_RESTORE_DEFAULT_ISA \
25 _Pragma("clang attribute pop")
26#elif defined(__GNUC__)
27#define _UCRT_ENABLE_EXTENDED_ISA \
28 _Pragma("GCC push_options") \
29 _Pragma("GCC target(\"avx2\")")
30#define _UCRT_RESTORE_DEFAULT_ISA \
31 _Pragma("GCC pop_options")
33#define _UCRT_ENABLE_EXTENDED_ISA
34#define _UCRT_RESTORE_DEFAULT_ISA
37_UCRT_ENABLE_EXTENDED_ISA
41 enum class __crt_simd_isa
47 template <__crt_simd_isa Isa>
48 struct __crt_simd_cleanup_guard;
50 template <__crt_simd_isa Isa>
51 struct __crt_simd_pack_traits;
53 template <__crt_simd_isa Isa,
typename Element>
54 struct __crt_simd_traits;
58 template <__crt_simd_isa Isa,
typename Element>
59 struct __crt_simd_element_traits
60 : __crt_simd_pack_traits<Isa>
62 using element_type = Element;
63 using __crt_simd_pack_traits<
Isa>::pack_size;
75 struct __crt_simd_cleanup_guard<__crt_simd_isa::sse2>
80 ~__crt_simd_cleanup_guard()
throw()
86 struct __crt_simd_pack_traits<__crt_simd_isa::sse2>
88 using pack_type = __m128i;
90 enum :
size_t { pack_size =
sizeof(pack_type) };
92 static __forceinline pack_type get_zero_pack()
throw()
97 static __forceinline
int compute_byte_mask(pack_type
const x)
throw()
104 struct __crt_simd_traits<__crt_simd_isa::sse2,
uint8_t>
105 : __crt_simd_element_traits<__crt_simd_isa::sse2, uint8_t>
107 static __forceinline pack_type compare_equals(pack_type
const x, pack_type
const y)
throw()
114 struct __crt_simd_traits<__crt_simd_isa::sse2,
uint16_t>
115 : __crt_simd_element_traits<__crt_simd_isa::sse2, uint16_t>
117 static __forceinline pack_type compare_equals(pack_type
const x, pack_type
const y)
throw()
126 struct __crt_simd_cleanup_guard<__crt_simd_isa::avx2>
128 ~__crt_simd_cleanup_guard()
139 struct __crt_simd_pack_traits<__crt_simd_isa::avx2>
141 using pack_type = __m256i;
143 enum :
size_t { pack_size =
sizeof(pack_type) };
145 static __forceinline pack_type get_zero_pack()
throw()
150 static __forceinline
int compute_byte_mask(pack_type
const x)
throw()
157 struct __crt_simd_traits<__crt_simd_isa::avx2,
uint8_t>
158 : __crt_simd_element_traits<__crt_simd_isa::avx2, uint8_t>
160 static __forceinline pack_type compare_equals(pack_type
const x, pack_type
const y)
throw()
167 struct __crt_simd_traits<__crt_simd_isa::avx2,
uint16_t>
168 : __crt_simd_element_traits<__crt_simd_isa::avx2, uint16_t>
170 static __forceinline pack_type compare_equals(pack_type
const x, pack_type
const y)
throw()
176_UCRT_RESTORE_DEFAULT_ISA
unsigned short int uint16_t
result_buffer_count char *const _In_ int const _In_ bool const _In_ unsigned const _In_ STRFLT const _In_ bool const _Inout_ __crt_cached_ptd_host &ptd throw()
size_t const element_size
__m128i _mm_setzero_si128(void)
__m128i _mm_cmpeq_epi8(__m128i a, __m128i b)
__m128i _mm_cmpeq_epi16(__m128i a, __m128i b)
int _mm_movemask_epi8(__m128i a)
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
__m256i __cdecl _mm256_setzero_si256(void)
int __cdecl _mm256_movemask_epi8(__m256i)
__m256i __cdecl _mm256_cmpeq_epi8(__m256i, __m256i)
void __cdecl _mm256_zeroupper(void)
__m256i __cdecl _mm256_cmpeq_epi16(__m256i, __m256i)