xref: /llvm-project/clang/lib/Headers/avx10_2_512niintrin.h (revision b0329206db8e66fe180c504115103b27ca50f64e)
1 /*===---- avx10_2_512niintrin.h - AVX10.2-512 new instruction 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                                                                         \
11     "Never use <avx10_2_512niintrin.h> directly; include <immintrin.h> instead."
12 #endif
13 
14 #ifdef __SSE2__
15 
16 #ifndef __AVX10_2_512NIINTRIN_H
17 #define __AVX10_2_512NIINTRIN_H
18 
19 #define __DEFAULT_FN_ATTRS                                                     \
20   __attribute__((__always_inline__, __nodebug__, __target__("avx10.2-512"),    \
21                  __min_vector_width__(512)))
22 
23 /* VNNI FP16 */
24 static __inline__ __m512 __DEFAULT_FN_ATTRS _mm512_dpph_ps(__m512 __W,
25                                                            __m512h __A,
26                                                            __m512h __B) {
27   return (__m512)__builtin_ia32_vdpphps512((__v16sf)__W, (__v32hf)__A,
28                                            (__v32hf)__B);
29 }
30 
31 static __inline__ __m512 __DEFAULT_FN_ATTRS _mm512_mask_dpph_ps(__m512 __W,
32                                                                 __mmask16 __U,
33                                                                 __m512h __A,
34                                                                 __m512h __B) {
35   return (__m512)__builtin_ia32_selectps_512(
36       (__mmask16)__U, (__v16sf)_mm512_dpph_ps(__W, __A, __B), (__v16sf)__W);
37 }
38 
39 static __inline__ __m512 __DEFAULT_FN_ATTRS _mm512_maskz_dpph_ps(__mmask16 __U,
40                                                                  __m512 __W,
41                                                                  __m512h __A,
42                                                                  __m512h __B) {
43   return (__m512)__builtin_ia32_selectps_512(
44       (__mmask16)__U, (__v16sf)_mm512_dpph_ps(__W, __A, __B),
45       (__v16sf)_mm512_setzero_ps());
46 }
47 
48 /* VMPSADBW */
49 #define _mm512_mpsadbw_epu8(A, B, imm)                                         \
50   ((__m512i)__builtin_ia32_mpsadbw512((__v64qi)(__m512i)(A),                   \
51                                       (__v64qi)(__m512i)(B), (int)(imm)))
52 
53 #define _mm512_mask_mpsadbw_epu8(W, U, A, B, imm)                              \
54   ((__m512i)__builtin_ia32_selectw_512(                                        \
55       (__mmask32)(U), (__v32hi)_mm512_mpsadbw_epu8((A), (B), (imm)),           \
56       (__v32hi)(__m512i)(W)))
57 
58 #define _mm512_maskz_mpsadbw_epu8(U, A, B, imm)                                \
59   ((__m512i)__builtin_ia32_selectw_512(                                        \
60       (__mmask32)(U), (__v32hi)_mm512_mpsadbw_epu8((A), (B), (imm)),           \
61       (__v32hi)_mm512_setzero_si512()))
62 
63 /* VNNI INT8 */
64 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbssd_epi32(__m512i __W,
65                                                                  __m512i __A,
66                                                                  __m512i __B) {
67   return (__m512i)__builtin_ia32_vpdpbssd512((__v16si)__W, (__v16si)__A,
68                                              (__v16si)__B);
69 }
70 
71 static __inline__ __m512i __DEFAULT_FN_ATTRS
72 _mm512_mask_dpbssd_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
73   return (__m512i)__builtin_ia32_selectd_512(
74       __U, (__v16si)_mm512_dpbssd_epi32(__W, __A, __B), (__v16si)__W);
75 }
76 
77 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbssd_epi32(
78     __mmask16 __U, __m512i __W, __m512i __A, __m512i __B) {
79   return (__m512i)__builtin_ia32_selectd_512(
80       __U, (__v16si)_mm512_dpbssd_epi32(__W, __A, __B),
81       (__v16si)_mm512_setzero_si512());
82 }
83 
84 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbssds_epi32(__m512i __W,
85                                                                   __m512i __A,
86                                                                   __m512i __B) {
87   return (__m512i)__builtin_ia32_vpdpbssds512((__v16si)__W, (__v16si)__A,
88                                               (__v16si)__B);
89 }
90 
91 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpbssds_epi32(
92     __m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
93   return (__m512i)__builtin_ia32_selectd_512(
94       __U, (__v16si)_mm512_dpbssds_epi32(__W, __A, __B), (__v16si)__W);
95 }
96 
97 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbssds_epi32(
98     __mmask16 __U, __m512i __W, __m512i __A, __m512i __B) {
99   return (__m512i)__builtin_ia32_selectd_512(
100       __U, (__v16si)_mm512_dpbssds_epi32(__W, __A, __B),
101       (__v16si)_mm512_setzero_si512());
102 }
103 
104 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbsud_epi32(__m512i __W,
105                                                                  __m512i __A,
106                                                                  __m512i __B) {
107   return (__m512i)__builtin_ia32_vpdpbsud512((__v16si)__W, (__v16si)__A,
108                                              (__v16si)__B);
109 }
110 
111 static __inline__ __m512i __DEFAULT_FN_ATTRS
112 _mm512_mask_dpbsud_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
113   return (__m512i)__builtin_ia32_selectd_512(
114       __U, (__v16si)_mm512_dpbsud_epi32(__W, __A, __B), (__v16si)__W);
115 }
116 
117 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbsud_epi32(
118     __mmask16 __U, __m512i __W, __m512i __A, __m512i __B) {
119   return (__m512i)__builtin_ia32_selectd_512(
120       __U, (__v16si)_mm512_dpbsud_epi32(__W, __A, __B),
121       (__v16si)_mm512_setzero_si512());
122 }
123 
124 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbsuds_epi32(__m512i __W,
125                                                                   __m512i __A,
126                                                                   __m512i __B) {
127   return (__m512i)__builtin_ia32_vpdpbsuds512((__v16si)__W, (__v16si)__A,
128                                               (__v16si)__B);
129 }
130 
131 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpbsuds_epi32(
132     __m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
133   return (__m512i)__builtin_ia32_selectd_512(
134       __U, (__v16si)_mm512_dpbsuds_epi32(__W, __A, __B), (__v16si)__W);
135 }
136 
137 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbsuds_epi32(
138     __mmask16 __U, __m512i __W, __m512i __A, __m512i __B) {
139   return (__m512i)__builtin_ia32_selectd_512(
140       __U, (__v16si)_mm512_dpbsuds_epi32(__W, __A, __B),
141       (__v16si)_mm512_setzero_si512());
142 }
143 
144 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbuud_epi32(__m512i __W,
145                                                                  __m512i __A,
146                                                                  __m512i __B) {
147   return (__m512i)__builtin_ia32_vpdpbuud512((__v16si)__W, (__v16si)__A,
148                                              (__v16si)__B);
149 }
150 
151 static __inline__ __m512i __DEFAULT_FN_ATTRS
152 _mm512_mask_dpbuud_epi32(__m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
153   return (__m512i)__builtin_ia32_selectd_512(
154       __U, (__v16si)_mm512_dpbuud_epi32(__W, __A, __B), (__v16si)__W);
155 }
156 
157 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbuud_epi32(
158     __mmask16 __U, __m512i __W, __m512i __A, __m512i __B) {
159   return (__m512i)__builtin_ia32_selectd_512(
160       __U, (__v16si)_mm512_dpbuud_epi32(__W, __A, __B),
161       (__v16si)_mm512_setzero_si512());
162 }
163 
164 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpbuuds_epi32(__m512i __W,
165                                                                   __m512i __A,
166                                                                   __m512i __B) {
167   return (__m512i)__builtin_ia32_vpdpbuuds512((__v16si)__W, (__v16si)__A,
168                                               (__v16si)__B);
169 }
170 
171 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpbuuds_epi32(
172     __m512i __W, __mmask16 __U, __m512i __A, __m512i __B) {
173   return (__m512i)__builtin_ia32_selectd_512(
174       __U, (__v16si)_mm512_dpbuuds_epi32(__W, __A, __B), (__v16si)__W);
175 }
176 
177 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpbuuds_epi32(
178     __mmask16 __U, __m512i __W, __m512i __A, __m512i __B) {
179   return (__m512i)__builtin_ia32_selectd_512(
180       __U, (__v16si)_mm512_dpbuuds_epi32(__W, __A, __B),
181       (__v16si)_mm512_setzero_si512());
182 }
183 
184 /* VNNI INT16 */
185 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwsud_epi32(__m512i __A,
186                                                                  __m512i __B,
187                                                                  __m512i __C) {
188   return (__m512i)__builtin_ia32_vpdpwsud512((__v16si)__A, (__v16si)__B,
189                                              (__v16si)__C);
190 }
191 
192 static __inline__ __m512i __DEFAULT_FN_ATTRS
193 _mm512_mask_dpwsud_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
194   return (__m512i)__builtin_ia32_selectd_512(
195       (__mmask16)__U, (__v16si)_mm512_dpwsud_epi32(__A, __B, __C),
196       (__v16si)__A);
197 }
198 
199 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwsud_epi32(
200     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
201   return (__m512i)__builtin_ia32_selectd_512(
202       (__mmask16)__U, (__v16si)_mm512_dpwsud_epi32(__A, __B, __C),
203       (__v16si)_mm512_setzero_si512());
204 }
205 
206 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwsuds_epi32(__m512i __A,
207                                                                   __m512i __B,
208                                                                   __m512i __C) {
209   return (__m512i)__builtin_ia32_vpdpwsuds512((__v16si)__A, (__v16si)__B,
210                                               (__v16si)__C);
211 }
212 
213 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpwsuds_epi32(
214     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
215   return (__m512i)__builtin_ia32_selectd_512(
216       (__mmask16)__U, (__v16si)_mm512_dpwsuds_epi32(__A, __B, __C),
217       (__v16si)__A);
218 }
219 
220 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwsuds_epi32(
221     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
222   return (__m512i)__builtin_ia32_selectd_512(
223       (__mmask16)__U, (__v16si)_mm512_dpwsuds_epi32(__A, __B, __C),
224       (__v16si)_mm512_setzero_si512());
225 }
226 
227 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwusd_epi32(__m512i __A,
228                                                                  __m512i __B,
229                                                                  __m512i __C) {
230   return (__m512i)__builtin_ia32_vpdpwusd512((__v16si)__A, (__v16si)__B,
231                                              (__v16si)__C);
232 }
233 
234 static __inline__ __m512i __DEFAULT_FN_ATTRS
235 _mm512_mask_dpwusd_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
236   return (__m512i)__builtin_ia32_selectd_512(
237       (__mmask16)__U, (__v16si)_mm512_dpwusd_epi32(__A, __B, __C),
238       (__v16si)__A);
239 }
240 
241 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwusd_epi32(
242     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
243   return (__m512i)__builtin_ia32_selectd_512(
244       (__mmask16)__U, (__v16si)_mm512_dpwusd_epi32(__A, __B, __C),
245       (__v16si)_mm512_setzero_si512());
246 }
247 
248 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwusds_epi32(__m512i __A,
249                                                                   __m512i __B,
250                                                                   __m512i __C) {
251   return (__m512i)__builtin_ia32_vpdpwusds512((__v16si)__A, (__v16si)__B,
252                                               (__v16si)__C);
253 }
254 
255 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpwusds_epi32(
256     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
257   return (__m512i)__builtin_ia32_selectd_512(
258       (__mmask16)__U, (__v16si)_mm512_dpwusds_epi32(__A, __B, __C),
259       (__v16si)__A);
260 }
261 
262 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwusds_epi32(
263     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
264   return (__m512i)__builtin_ia32_selectd_512(
265       (__mmask16)__U, (__v16si)_mm512_dpwusds_epi32(__A, __B, __C),
266       (__v16si)_mm512_setzero_si512());
267 }
268 
269 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwuud_epi32(__m512i __A,
270                                                                  __m512i __B,
271                                                                  __m512i __C) {
272   return (__m512i)__builtin_ia32_vpdpwuud512((__v16si)__A, (__v16si)__B,
273                                              (__v16si)__C);
274 }
275 
276 static __inline__ __m512i __DEFAULT_FN_ATTRS
277 _mm512_mask_dpwuud_epi32(__m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
278   return (__m512i)__builtin_ia32_selectd_512(
279       (__mmask16)__U, (__v16si)_mm512_dpwuud_epi32(__A, __B, __C),
280       (__v16si)__A);
281 }
282 
283 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwuud_epi32(
284     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
285   return (__m512i)__builtin_ia32_selectd_512(
286       (__mmask16)__U, (__v16si)_mm512_dpwuud_epi32(__A, __B, __C),
287       (__v16si)_mm512_setzero_si512());
288 }
289 
290 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_dpwuuds_epi32(__m512i __A,
291                                                                   __m512i __B,
292                                                                   __m512i __C) {
293   return (__m512i)__builtin_ia32_vpdpwuuds512((__v16si)__A, (__v16si)__B,
294                                               (__v16si)__C);
295 }
296 
297 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_mask_dpwuuds_epi32(
298     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
299   return (__m512i)__builtin_ia32_selectd_512(
300       (__mmask16)__U, (__v16si)_mm512_dpwuuds_epi32(__A, __B, __C),
301       (__v16si)__A);
302 }
303 
304 static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_maskz_dpwuuds_epi32(
305     __m512i __A, __mmask16 __U, __m512i __B, __m512i __C) {
306   return (__m512i)__builtin_ia32_selectd_512(
307       (__mmask16)__U, (__v16si)_mm512_dpwuuds_epi32(__A, __B, __C),
308       (__v16si)_mm512_setzero_si512());
309 }
310 
311 #undef __DEFAULT_FN_ATTRS
312 
313 #endif /* __SSE2__ */
314 #endif /* __AVX10_2_512NIINTRIN_H */
315