1 /*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 *===-----------------------------------------------------------------------===
24 #error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
27 #ifndef __AVX512VLCDINTRIN_H
28 #define __AVX512VLCDINTRIN_H
30 /* Define the default attributes for the functions in this file. */
31 #define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(128)))
32 #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(256)))
35 static __inline__ __m128i __DEFAULT_FN_ATTRS128
36 _mm_broadcastmb_epi64 (__mmask8 __A)
38 return (__m128i) _mm_set1_epi64x((long long) __A);
41 static __inline__ __m256i __DEFAULT_FN_ATTRS256
42 _mm256_broadcastmb_epi64 (__mmask8 __A)
44 return (__m256i) _mm256_set1_epi64x((long long)__A);
47 static __inline__ __m128i __DEFAULT_FN_ATTRS128
48 _mm_broadcastmw_epi32 (__mmask16 __A)
50 return (__m128i) _mm_set1_epi32((int)__A);
53 static __inline__ __m256i __DEFAULT_FN_ATTRS256
54 _mm256_broadcastmw_epi32 (__mmask16 __A)
56 return (__m256i) _mm256_set1_epi32((int)__A);
60 static __inline__ __m128i __DEFAULT_FN_ATTRS128
61 _mm_conflict_epi64 (__m128i __A)
63 return (__m128i) __builtin_ia32_vpconflictdi_128_mask ((__v2di) __A,
64 (__v2di) _mm_undefined_si128 (),
68 static __inline__ __m128i __DEFAULT_FN_ATTRS128
69 _mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
71 return (__m128i) __builtin_ia32_vpconflictdi_128_mask ((__v2di) __A,
76 static __inline__ __m128i __DEFAULT_FN_ATTRS128
77 _mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
79 return (__m128i) __builtin_ia32_vpconflictdi_128_mask ((__v2di) __A,
85 static __inline__ __m256i __DEFAULT_FN_ATTRS256
86 _mm256_conflict_epi64 (__m256i __A)
88 return (__m256i) __builtin_ia32_vpconflictdi_256_mask ((__v4di) __A,
89 (__v4di) _mm256_undefined_si256 (),
93 static __inline__ __m256i __DEFAULT_FN_ATTRS256
94 _mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
96 return (__m256i) __builtin_ia32_vpconflictdi_256_mask ((__v4di) __A,
101 static __inline__ __m256i __DEFAULT_FN_ATTRS256
102 _mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
104 return (__m256i) __builtin_ia32_vpconflictdi_256_mask ((__v4di) __A,
105 (__v4di) _mm256_setzero_si256 (),
109 static __inline__ __m128i __DEFAULT_FN_ATTRS128
110 _mm_conflict_epi32 (__m128i __A)
112 return (__m128i) __builtin_ia32_vpconflictsi_128_mask ((__v4si) __A,
113 (__v4si) _mm_undefined_si128 (),
117 static __inline__ __m128i __DEFAULT_FN_ATTRS128
118 _mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
120 return (__m128i) __builtin_ia32_vpconflictsi_128_mask ((__v4si) __A,
125 static __inline__ __m128i __DEFAULT_FN_ATTRS128
126 _mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
128 return (__m128i) __builtin_ia32_vpconflictsi_128_mask ((__v4si) __A,
129 (__v4si) _mm_setzero_si128 (),
133 static __inline__ __m256i __DEFAULT_FN_ATTRS256
134 _mm256_conflict_epi32 (__m256i __A)
136 return (__m256i) __builtin_ia32_vpconflictsi_256_mask ((__v8si) __A,
137 (__v8si) _mm256_undefined_si256 (),
141 static __inline__ __m256i __DEFAULT_FN_ATTRS256
142 _mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
144 return (__m256i) __builtin_ia32_vpconflictsi_256_mask ((__v8si) __A,
149 static __inline__ __m256i __DEFAULT_FN_ATTRS256
150 _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
152 return (__m256i) __builtin_ia32_vpconflictsi_256_mask ((__v8si) __A,
154 _mm256_setzero_si256 (),
158 static __inline__ __m128i __DEFAULT_FN_ATTRS128
159 _mm_lzcnt_epi32 (__m128i __A)
161 return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
164 static __inline__ __m128i __DEFAULT_FN_ATTRS128
165 _mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
167 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
168 (__v4si)_mm_lzcnt_epi32(__A),
172 static __inline__ __m128i __DEFAULT_FN_ATTRS128
173 _mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
175 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
176 (__v4si)_mm_lzcnt_epi32(__A),
177 (__v4si)_mm_setzero_si128());
180 static __inline__ __m256i __DEFAULT_FN_ATTRS256
181 _mm256_lzcnt_epi32 (__m256i __A)
183 return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
186 static __inline__ __m256i __DEFAULT_FN_ATTRS256
187 _mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
189 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
190 (__v8si)_mm256_lzcnt_epi32(__A),
194 static __inline__ __m256i __DEFAULT_FN_ATTRS256
195 _mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
197 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
198 (__v8si)_mm256_lzcnt_epi32(__A),
199 (__v8si)_mm256_setzero_si256());
202 static __inline__ __m128i __DEFAULT_FN_ATTRS128
203 _mm_lzcnt_epi64 (__m128i __A)
205 return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
208 static __inline__ __m128i __DEFAULT_FN_ATTRS128
209 _mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
211 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
212 (__v2di)_mm_lzcnt_epi64(__A),
216 static __inline__ __m128i __DEFAULT_FN_ATTRS128
217 _mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
219 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
220 (__v2di)_mm_lzcnt_epi64(__A),
221 (__v2di)_mm_setzero_si128());
224 static __inline__ __m256i __DEFAULT_FN_ATTRS256
225 _mm256_lzcnt_epi64 (__m256i __A)
227 return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
230 static __inline__ __m256i __DEFAULT_FN_ATTRS256
231 _mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
233 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
234 (__v4di)_mm256_lzcnt_epi64(__A),
238 static __inline__ __m256i __DEFAULT_FN_ATTRS256
239 _mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
241 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
242 (__v4di)_mm256_lzcnt_epi64(__A),
243 (__v4di)_mm256_setzero_si256());
246 #undef __DEFAULT_FN_ATTRS128
247 #undef __DEFAULT_FN_ATTRS256
249 #endif /* __AVX512VLCDINTRIN_H */