1 /*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 *===-----------------------------------------------------------------------===
10 #error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
13 #ifndef __AVX512VLCDINTRIN_H
14 #define __AVX512VLCDINTRIN_H
16 /* Define the default attributes for the functions in this file. */
17 #define __DEFAULT_FN_ATTRS128 \
18 __attribute__((__always_inline__, __nodebug__, \
19 __target__("avx512vl,avx512cd,no-evex512"), \
20 __min_vector_width__(128)))
21 #define __DEFAULT_FN_ATTRS256 \
22 __attribute__((__always_inline__, __nodebug__, \
23 __target__("avx512vl,avx512cd,no-evex512"), \
24 __min_vector_width__(256)))
26 static __inline__ __m128i __DEFAULT_FN_ATTRS128
27 _mm_broadcastmb_epi64 (__mmask8 __A
)
29 return (__m128i
) _mm_set1_epi64x((long long) __A
);
32 static __inline__ __m256i __DEFAULT_FN_ATTRS256
33 _mm256_broadcastmb_epi64 (__mmask8 __A
)
35 return (__m256i
) _mm256_set1_epi64x((long long)__A
);
38 static __inline__ __m128i __DEFAULT_FN_ATTRS128
39 _mm_broadcastmw_epi32 (__mmask16 __A
)
41 return (__m128i
) _mm_set1_epi32((int)__A
);
44 static __inline__ __m256i __DEFAULT_FN_ATTRS256
45 _mm256_broadcastmw_epi32 (__mmask16 __A
)
47 return (__m256i
) _mm256_set1_epi32((int)__A
);
51 static __inline__ __m128i __DEFAULT_FN_ATTRS128
52 _mm_conflict_epi64 (__m128i __A
)
54 return (__m128i
) __builtin_ia32_vpconflictdi_128 ((__v2di
) __A
);
57 static __inline__ __m128i __DEFAULT_FN_ATTRS128
58 _mm_mask_conflict_epi64 (__m128i __W
, __mmask8 __U
, __m128i __A
)
60 return (__m128i
)__builtin_ia32_selectq_128((__mmask8
)__U
,
61 (__v2di
)_mm_conflict_epi64(__A
),
65 static __inline__ __m128i __DEFAULT_FN_ATTRS128
66 _mm_maskz_conflict_epi64 (__mmask8 __U
, __m128i __A
)
68 return (__m128i
)__builtin_ia32_selectq_128((__mmask8
)__U
,
69 (__v2di
)_mm_conflict_epi64(__A
),
70 (__v2di
)_mm_setzero_si128());
73 static __inline__ __m256i __DEFAULT_FN_ATTRS256
74 _mm256_conflict_epi64 (__m256i __A
)
76 return (__m256i
) __builtin_ia32_vpconflictdi_256 ((__v4di
) __A
);
79 static __inline__ __m256i __DEFAULT_FN_ATTRS256
80 _mm256_mask_conflict_epi64 (__m256i __W
, __mmask8 __U
, __m256i __A
)
82 return (__m256i
)__builtin_ia32_selectq_256((__mmask8
)__U
,
83 (__v4di
)_mm256_conflict_epi64(__A
),
87 static __inline__ __m256i __DEFAULT_FN_ATTRS256
88 _mm256_maskz_conflict_epi64 (__mmask8 __U
, __m256i __A
)
90 return (__m256i
)__builtin_ia32_selectq_256((__mmask8
)__U
,
91 (__v4di
)_mm256_conflict_epi64(__A
),
92 (__v4di
)_mm256_setzero_si256());
95 static __inline__ __m128i __DEFAULT_FN_ATTRS128
96 _mm_conflict_epi32 (__m128i __A
)
98 return (__m128i
) __builtin_ia32_vpconflictsi_128 ((__v4si
) __A
);
101 static __inline__ __m128i __DEFAULT_FN_ATTRS128
102 _mm_mask_conflict_epi32 (__m128i __W
, __mmask8 __U
, __m128i __A
)
104 return (__m128i
)__builtin_ia32_selectd_128((__mmask8
)__U
,
105 (__v4si
)_mm_conflict_epi32(__A
),
109 static __inline__ __m128i __DEFAULT_FN_ATTRS128
110 _mm_maskz_conflict_epi32 (__mmask8 __U
, __m128i __A
)
112 return (__m128i
)__builtin_ia32_selectd_128((__mmask8
)__U
,
113 (__v4si
)_mm_conflict_epi32(__A
),
114 (__v4si
)_mm_setzero_si128());
117 static __inline__ __m256i __DEFAULT_FN_ATTRS256
118 _mm256_conflict_epi32 (__m256i __A
)
120 return (__m256i
) __builtin_ia32_vpconflictsi_256 ((__v8si
) __A
);
123 static __inline__ __m256i __DEFAULT_FN_ATTRS256
124 _mm256_mask_conflict_epi32 (__m256i __W
, __mmask8 __U
, __m256i __A
)
126 return (__m256i
)__builtin_ia32_selectd_256((__mmask8
)__U
,
127 (__v8si
)_mm256_conflict_epi32(__A
),
131 static __inline__ __m256i __DEFAULT_FN_ATTRS256
132 _mm256_maskz_conflict_epi32 (__mmask8 __U
, __m256i __A
)
134 return (__m256i
)__builtin_ia32_selectd_256((__mmask8
)__U
,
135 (__v8si
)_mm256_conflict_epi32(__A
),
136 (__v8si
)_mm256_setzero_si256());
139 static __inline__ __m128i __DEFAULT_FN_ATTRS128
140 _mm_lzcnt_epi32 (__m128i __A
)
142 return (__m128i
) __builtin_ia32_vplzcntd_128 ((__v4si
) __A
);
145 static __inline__ __m128i __DEFAULT_FN_ATTRS128
146 _mm_mask_lzcnt_epi32 (__m128i __W
, __mmask8 __U
, __m128i __A
)
148 return (__m128i
)__builtin_ia32_selectd_128((__mmask8
)__U
,
149 (__v4si
)_mm_lzcnt_epi32(__A
),
153 static __inline__ __m128i __DEFAULT_FN_ATTRS128
154 _mm_maskz_lzcnt_epi32 (__mmask8 __U
, __m128i __A
)
156 return (__m128i
)__builtin_ia32_selectd_128((__mmask8
)__U
,
157 (__v4si
)_mm_lzcnt_epi32(__A
),
158 (__v4si
)_mm_setzero_si128());
161 static __inline__ __m256i __DEFAULT_FN_ATTRS256
162 _mm256_lzcnt_epi32 (__m256i __A
)
164 return (__m256i
) __builtin_ia32_vplzcntd_256 ((__v8si
) __A
);
167 static __inline__ __m256i __DEFAULT_FN_ATTRS256
168 _mm256_mask_lzcnt_epi32 (__m256i __W
, __mmask8 __U
, __m256i __A
)
170 return (__m256i
)__builtin_ia32_selectd_256((__mmask8
)__U
,
171 (__v8si
)_mm256_lzcnt_epi32(__A
),
175 static __inline__ __m256i __DEFAULT_FN_ATTRS256
176 _mm256_maskz_lzcnt_epi32 (__mmask8 __U
, __m256i __A
)
178 return (__m256i
)__builtin_ia32_selectd_256((__mmask8
)__U
,
179 (__v8si
)_mm256_lzcnt_epi32(__A
),
180 (__v8si
)_mm256_setzero_si256());
183 static __inline__ __m128i __DEFAULT_FN_ATTRS128
184 _mm_lzcnt_epi64 (__m128i __A
)
186 return (__m128i
) __builtin_ia32_vplzcntq_128 ((__v2di
) __A
);
189 static __inline__ __m128i __DEFAULT_FN_ATTRS128
190 _mm_mask_lzcnt_epi64 (__m128i __W
, __mmask8 __U
, __m128i __A
)
192 return (__m128i
)__builtin_ia32_selectq_128((__mmask8
)__U
,
193 (__v2di
)_mm_lzcnt_epi64(__A
),
197 static __inline__ __m128i __DEFAULT_FN_ATTRS128
198 _mm_maskz_lzcnt_epi64 (__mmask8 __U
, __m128i __A
)
200 return (__m128i
)__builtin_ia32_selectq_128((__mmask8
)__U
,
201 (__v2di
)_mm_lzcnt_epi64(__A
),
202 (__v2di
)_mm_setzero_si128());
205 static __inline__ __m256i __DEFAULT_FN_ATTRS256
206 _mm256_lzcnt_epi64 (__m256i __A
)
208 return (__m256i
) __builtin_ia32_vplzcntq_256 ((__v4di
) __A
);
211 static __inline__ __m256i __DEFAULT_FN_ATTRS256
212 _mm256_mask_lzcnt_epi64 (__m256i __W
, __mmask8 __U
, __m256i __A
)
214 return (__m256i
)__builtin_ia32_selectq_256((__mmask8
)__U
,
215 (__v4di
)_mm256_lzcnt_epi64(__A
),
219 static __inline__ __m256i __DEFAULT_FN_ATTRS256
220 _mm256_maskz_lzcnt_epi64 (__mmask8 __U
, __m256i __A
)
222 return (__m256i
)__builtin_ia32_selectq_256((__mmask8
)__U
,
223 (__v4di
)_mm256_lzcnt_epi64(__A
),
224 (__v4di
)_mm256_setzero_si256());
227 #undef __DEFAULT_FN_ATTRS128
228 #undef __DEFAULT_FN_ATTRS256
230 #endif /* __AVX512VLCDINTRIN_H */