master
  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 */
 24static __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
 31static __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
 39static __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 */
 64static __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
 71static __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
 77static __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
 84static __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
 91static __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
 97static __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
104static __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
111static __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
117static __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
124static __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
131static __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
137static __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
144static __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
151static __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
157static __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
164static __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
171static __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
177static __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 */
185static __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
192static __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
199static __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
206static __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
213static __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
220static __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
227static __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
234static __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
241static __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
248static __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
255static __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
262static __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
269static __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
276static __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
283static __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
290static __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
297static __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
304static __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 */