xref: /freebsd/contrib/llvm-project/clang/lib/Headers/avx512vlcdintrin.h (revision 357378bbdedf24ce2b90e9bd831af4a9db3ec70a)
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
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
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
39 _mm_broadcastmw_epi32 (__mmask16 __A)
40 {
41   return (__m128i) _mm_set1_epi32((int)__A);
42 }
43 
44 static __inline__ __m256i __DEFAULT_FN_ATTRS256
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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