1 /*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
2 *
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
6 *
7 *===-----------------------------------------------------------------------===
8 */
9 #ifndef __IMMINTRIN_H
10 #error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
11 #endif
12
13 #ifndef __AVX512VLCDINTRIN_H
14 #define __AVX512VLCDINTRIN_H
15
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)))
25
26 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_broadcastmb_epi64(__mmask8 __A)27 _mm_broadcastmb_epi64 (__mmask8 __A)
28 {
29 return (__m128i) _mm_set1_epi64x((long long) __A);
30 }
31
32 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_broadcastmb_epi64(__mmask8 __A)33 _mm256_broadcastmb_epi64 (__mmask8 __A)
34 {
35 return (__m256i) _mm256_set1_epi64x((long long)__A);
36 }
37
38 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_broadcastmw_epi32(__mmask16 __A)39 _mm_broadcastmw_epi32 (__mmask16 __A)
40 {
41 return (__m128i) _mm_set1_epi32((int)__A);
42 }
43
44 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_broadcastmw_epi32(__mmask16 __A)45 _mm256_broadcastmw_epi32 (__mmask16 __A)
46 {
47 return (__m256i) _mm256_set1_epi32((int)__A);
48 }
49
50
51 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_conflict_epi64(__m128i __A)52 _mm_conflict_epi64 (__m128i __A)
53 {
54 return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A);
55 }
56
57 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_conflict_epi64(__m128i __W,__mmask8 __U,__m128i __A)58 _mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
59 {
60 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
61 (__v2di)_mm_conflict_epi64(__A),
62 (__v2di)__W);
63 }
64
65 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_conflict_epi64(__mmask8 __U,__m128i __A)66 _mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
67 {
68 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
69 (__v2di)_mm_conflict_epi64(__A),
70 (__v2di)_mm_setzero_si128());
71 }
72
73 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_conflict_epi64(__m256i __A)74 _mm256_conflict_epi64 (__m256i __A)
75 {
76 return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A);
77 }
78
79 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_conflict_epi64(__m256i __W,__mmask8 __U,__m256i __A)80 _mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
81 {
82 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
83 (__v4di)_mm256_conflict_epi64(__A),
84 (__v4di)__W);
85 }
86
87 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_conflict_epi64(__mmask8 __U,__m256i __A)88 _mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
89 {
90 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
91 (__v4di)_mm256_conflict_epi64(__A),
92 (__v4di)_mm256_setzero_si256());
93 }
94
95 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_conflict_epi32(__m128i __A)96 _mm_conflict_epi32 (__m128i __A)
97 {
98 return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A);
99 }
100
101 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_conflict_epi32(__m128i __W,__mmask8 __U,__m128i __A)102 _mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
103 {
104 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
105 (__v4si)_mm_conflict_epi32(__A),
106 (__v4si)__W);
107 }
108
109 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_conflict_epi32(__mmask8 __U,__m128i __A)110 _mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
111 {
112 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
113 (__v4si)_mm_conflict_epi32(__A),
114 (__v4si)_mm_setzero_si128());
115 }
116
117 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_conflict_epi32(__m256i __A)118 _mm256_conflict_epi32 (__m256i __A)
119 {
120 return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A);
121 }
122
123 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_conflict_epi32(__m256i __W,__mmask8 __U,__m256i __A)124 _mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
125 {
126 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
127 (__v8si)_mm256_conflict_epi32(__A),
128 (__v8si)__W);
129 }
130
131 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_conflict_epi32(__mmask8 __U,__m256i __A)132 _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
133 {
134 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
135 (__v8si)_mm256_conflict_epi32(__A),
136 (__v8si)_mm256_setzero_si256());
137 }
138
139 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_lzcnt_epi32(__m128i __A)140 _mm_lzcnt_epi32 (__m128i __A)
141 {
142 return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
143 }
144
145 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_lzcnt_epi32(__m128i __W,__mmask8 __U,__m128i __A)146 _mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
147 {
148 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
149 (__v4si)_mm_lzcnt_epi32(__A),
150 (__v4si)__W);
151 }
152
153 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_lzcnt_epi32(__mmask8 __U,__m128i __A)154 _mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
155 {
156 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
157 (__v4si)_mm_lzcnt_epi32(__A),
158 (__v4si)_mm_setzero_si128());
159 }
160
161 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_lzcnt_epi32(__m256i __A)162 _mm256_lzcnt_epi32 (__m256i __A)
163 {
164 return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
165 }
166
167 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_lzcnt_epi32(__m256i __W,__mmask8 __U,__m256i __A)168 _mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
169 {
170 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
171 (__v8si)_mm256_lzcnt_epi32(__A),
172 (__v8si)__W);
173 }
174
175 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_lzcnt_epi32(__mmask8 __U,__m256i __A)176 _mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
177 {
178 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
179 (__v8si)_mm256_lzcnt_epi32(__A),
180 (__v8si)_mm256_setzero_si256());
181 }
182
183 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_lzcnt_epi64(__m128i __A)184 _mm_lzcnt_epi64 (__m128i __A)
185 {
186 return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
187 }
188
189 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_mask_lzcnt_epi64(__m128i __W,__mmask8 __U,__m128i __A)190 _mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
191 {
192 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
193 (__v2di)_mm_lzcnt_epi64(__A),
194 (__v2di)__W);
195 }
196
197 static __inline__ __m128i __DEFAULT_FN_ATTRS128
_mm_maskz_lzcnt_epi64(__mmask8 __U,__m128i __A)198 _mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
199 {
200 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
201 (__v2di)_mm_lzcnt_epi64(__A),
202 (__v2di)_mm_setzero_si128());
203 }
204
205 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_lzcnt_epi64(__m256i __A)206 _mm256_lzcnt_epi64 (__m256i __A)
207 {
208 return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
209 }
210
211 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_mask_lzcnt_epi64(__m256i __W,__mmask8 __U,__m256i __A)212 _mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
213 {
214 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
215 (__v4di)_mm256_lzcnt_epi64(__A),
216 (__v4di)__W);
217 }
218
219 static __inline__ __m256i __DEFAULT_FN_ATTRS256
_mm256_maskz_lzcnt_epi64(__mmask8 __U,__m256i __A)220 _mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
221 {
222 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
223 (__v4di)_mm256_lzcnt_epi64(__A),
224 (__v4di)_mm256_setzero_si256());
225 }
226
227 #undef __DEFAULT_FN_ATTRS128
228 #undef __DEFAULT_FN_ATTRS256
229
230 #endif /* __AVX512VLCDINTRIN_H */
231