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_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd")))
34 static __inline__ __m128i __DEFAULT_FN_ATTRS
35 _mm_broadcastmb_epi64 (__mmask8 __A
)
37 return (__m128i
) __builtin_ia32_broadcastmb128 (__A
);
40 static __inline__ __m256i __DEFAULT_FN_ATTRS
41 _mm256_broadcastmb_epi64 (__mmask8 __A
)
43 return (__m256i
) __builtin_ia32_broadcastmb256 (__A
);
46 static __inline__ __m128i __DEFAULT_FN_ATTRS
47 _mm_broadcastmw_epi32 (__mmask16 __A
)
49 return (__m128i
) __builtin_ia32_broadcastmw128 (__A
);
52 static __inline__ __m256i __DEFAULT_FN_ATTRS
53 _mm256_broadcastmw_epi32 (__mmask16 __A
)
55 return (__m256i
) __builtin_ia32_broadcastmw256 (__A
);
59 static __inline__ __m128i __DEFAULT_FN_ATTRS
60 _mm_conflict_epi64 (__m128i __A
)
62 return (__m128i
) __builtin_ia32_vpconflictdi_128_mask ((__v2di
) __A
,
63 (__v2di
) _mm_undefined_si128 (),
67 static __inline__ __m128i __DEFAULT_FN_ATTRS
68 _mm_mask_conflict_epi64 (__m128i __W
, __mmask8 __U
, __m128i __A
)
70 return (__m128i
) __builtin_ia32_vpconflictdi_128_mask ((__v2di
) __A
,
75 static __inline__ __m128i __DEFAULT_FN_ATTRS
76 _mm_maskz_conflict_epi64 (__mmask8 __U
, __m128i __A
)
78 return (__m128i
) __builtin_ia32_vpconflictdi_128_mask ((__v2di
) __A
,
84 static __inline__ __m256i __DEFAULT_FN_ATTRS
85 _mm256_conflict_epi64 (__m256i __A
)
87 return (__m256i
) __builtin_ia32_vpconflictdi_256_mask ((__v4di
) __A
,
88 (__v4di
) _mm256_undefined_si256 (),
92 static __inline__ __m256i __DEFAULT_FN_ATTRS
93 _mm256_mask_conflict_epi64 (__m256i __W
, __mmask8 __U
, __m256i __A
)
95 return (__m256i
) __builtin_ia32_vpconflictdi_256_mask ((__v4di
) __A
,
100 static __inline__ __m256i __DEFAULT_FN_ATTRS
101 _mm256_maskz_conflict_epi64 (__mmask8 __U
, __m256i __A
)
103 return (__m256i
) __builtin_ia32_vpconflictdi_256_mask ((__v4di
) __A
,
104 (__v4di
) _mm256_setzero_si256 (),
108 static __inline__ __m128i __DEFAULT_FN_ATTRS
109 _mm_conflict_epi32 (__m128i __A
)
111 return (__m128i
) __builtin_ia32_vpconflictsi_128_mask ((__v4si
) __A
,
112 (__v4si
) _mm_undefined_si128 (),
116 static __inline__ __m128i __DEFAULT_FN_ATTRS
117 _mm_mask_conflict_epi32 (__m128i __W
, __mmask8 __U
, __m128i __A
)
119 return (__m128i
) __builtin_ia32_vpconflictsi_128_mask ((__v4si
) __A
,
124 static __inline__ __m128i __DEFAULT_FN_ATTRS
125 _mm_maskz_conflict_epi32 (__mmask8 __U
, __m128i __A
)
127 return (__m128i
) __builtin_ia32_vpconflictsi_128_mask ((__v4si
) __A
,
128 (__v4si
) _mm_setzero_si128 (),
132 static __inline__ __m256i __DEFAULT_FN_ATTRS
133 _mm256_conflict_epi32 (__m256i __A
)
135 return (__m256i
) __builtin_ia32_vpconflictsi_256_mask ((__v8si
) __A
,
136 (__v8si
) _mm256_undefined_si256 (),
140 static __inline__ __m256i __DEFAULT_FN_ATTRS
141 _mm256_mask_conflict_epi32 (__m256i __W
, __mmask8 __U
, __m256i __A
)
143 return (__m256i
) __builtin_ia32_vpconflictsi_256_mask ((__v8si
) __A
,
148 static __inline__ __m256i __DEFAULT_FN_ATTRS
149 _mm256_maskz_conflict_epi32 (__mmask8 __U
, __m256i __A
)
151 return (__m256i
) __builtin_ia32_vpconflictsi_256_mask ((__v8si
) __A
,
153 _mm256_setzero_si256 (),
157 static __inline__ __m128i __DEFAULT_FN_ATTRS
158 _mm_lzcnt_epi32 (__m128i __A
)
160 return (__m128i
) __builtin_ia32_vplzcntd_128_mask ((__v4si
) __A
,
162 _mm_setzero_si128 (),
166 static __inline__ __m128i __DEFAULT_FN_ATTRS
167 _mm_mask_lzcnt_epi32 (__m128i __W
, __mmask8 __U
, __m128i __A
)
169 return (__m128i
) __builtin_ia32_vplzcntd_128_mask ((__v4si
) __A
,
174 static __inline__ __m128i __DEFAULT_FN_ATTRS
175 _mm_maskz_lzcnt_epi32 (__mmask8 __U
, __m128i __A
)
177 return (__m128i
) __builtin_ia32_vplzcntd_128_mask ((__v4si
) __A
,
179 _mm_setzero_si128 (),
183 static __inline__ __m256i __DEFAULT_FN_ATTRS
184 _mm256_lzcnt_epi32 (__m256i __A
)
186 return (__m256i
) __builtin_ia32_vplzcntd_256_mask ((__v8si
) __A
,
188 _mm256_setzero_si256 (),
192 static __inline__ __m256i __DEFAULT_FN_ATTRS
193 _mm256_mask_lzcnt_epi32 (__m256i __W
, __mmask8 __U
, __m256i __A
)
195 return (__m256i
) __builtin_ia32_vplzcntd_256_mask ((__v8si
) __A
,
200 static __inline__ __m256i __DEFAULT_FN_ATTRS
201 _mm256_maskz_lzcnt_epi32 (__mmask8 __U
, __m256i __A
)
203 return (__m256i
) __builtin_ia32_vplzcntd_256_mask ((__v8si
) __A
,
205 _mm256_setzero_si256 (),
209 static __inline__ __m128i __DEFAULT_FN_ATTRS
210 _mm_lzcnt_epi64 (__m128i __A
)
212 return (__m128i
) __builtin_ia32_vplzcntq_128_mask ((__v2di
) __A
,
218 static __inline__ __m128i __DEFAULT_FN_ATTRS
219 _mm_mask_lzcnt_epi64 (__m128i __W
, __mmask8 __U
, __m128i __A
)
221 return (__m128i
) __builtin_ia32_vplzcntq_128_mask ((__v2di
) __A
,
226 static __inline__ __m128i __DEFAULT_FN_ATTRS
227 _mm_maskz_lzcnt_epi64 (__mmask8 __U
, __m128i __A
)
229 return (__m128i
) __builtin_ia32_vplzcntq_128_mask ((__v2di
) __A
,
235 static __inline__ __m256i __DEFAULT_FN_ATTRS
236 _mm256_lzcnt_epi64 (__m256i __A
)
238 return (__m256i
) __builtin_ia32_vplzcntq_256_mask ((__v4di
) __A
,
240 _mm256_setzero_si256 (),
244 static __inline__ __m256i __DEFAULT_FN_ATTRS
245 _mm256_mask_lzcnt_epi64 (__m256i __W
, __mmask8 __U
, __m256i __A
)
247 return (__m256i
) __builtin_ia32_vplzcntq_256_mask ((__v4di
) __A
,
252 static __inline__ __m256i __DEFAULT_FN_ATTRS
253 _mm256_maskz_lzcnt_epi64 (__mmask8 __U
, __m256i __A
)
255 return (__m256i
) __builtin_ia32_vplzcntq_256_mask ((__v4di
) __A
,
257 _mm256_setzero_si256 (),
261 #undef __DEFAULT_FN_ATTRS
263 #endif /* __AVX512VLCDINTRIN_H */