• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
_mm512_dpph_ps(__m512 __W,__m512h __A,__m512h __B)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 
_mm512_mask_dpph_ps(__m512 __W,__mmask16 __U,__m512h __A,__m512h __B)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 
_mm512_maskz_dpph_ps(__mmask16 __U,__m512 __W,__m512h __A,__m512h __B)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 */
_mm512_dpbssd_epi32(__m512i __W,__m512i __A,__m512i __B)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
_mm512_mask_dpbssd_epi32(__m512i __W,__mmask16 __U,__m512i __A,__m512i __B)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 
_mm512_maskz_dpbssd_epi32(__mmask16 __U,__m512i __W,__m512i __A,__m512i __B)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 
_mm512_dpbssds_epi32(__m512i __W,__m512i __A,__m512i __B)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 
_mm512_mask_dpbssds_epi32(__m512i __W,__mmask16 __U,__m512i __A,__m512i __B)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 
_mm512_maskz_dpbssds_epi32(__mmask16 __U,__m512i __W,__m512i __A,__m512i __B)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 
_mm512_dpbsud_epi32(__m512i __W,__m512i __A,__m512i __B)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
_mm512_mask_dpbsud_epi32(__m512i __W,__mmask16 __U,__m512i __A,__m512i __B)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 
_mm512_maskz_dpbsud_epi32(__mmask16 __U,__m512i __W,__m512i __A,__m512i __B)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 
_mm512_dpbsuds_epi32(__m512i __W,__m512i __A,__m512i __B)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 
_mm512_mask_dpbsuds_epi32(__m512i __W,__mmask16 __U,__m512i __A,__m512i __B)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 
_mm512_maskz_dpbsuds_epi32(__mmask16 __U,__m512i __W,__m512i __A,__m512i __B)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 
_mm512_dpbuud_epi32(__m512i __W,__m512i __A,__m512i __B)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
_mm512_mask_dpbuud_epi32(__m512i __W,__mmask16 __U,__m512i __A,__m512i __B)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 
_mm512_maskz_dpbuud_epi32(__mmask16 __U,__m512i __W,__m512i __A,__m512i __B)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 
_mm512_dpbuuds_epi32(__m512i __W,__m512i __A,__m512i __B)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 
_mm512_mask_dpbuuds_epi32(__m512i __W,__mmask16 __U,__m512i __A,__m512i __B)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 
_mm512_maskz_dpbuuds_epi32(__mmask16 __U,__m512i __W,__m512i __A,__m512i __B)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 */
_mm512_dpwsud_epi32(__m512i __A,__m512i __B,__m512i __C)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
_mm512_mask_dpwsud_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_maskz_dpwsud_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_dpwsuds_epi32(__m512i __A,__m512i __B,__m512i __C)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 
_mm512_mask_dpwsuds_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_maskz_dpwsuds_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_dpwusd_epi32(__m512i __A,__m512i __B,__m512i __C)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
_mm512_mask_dpwusd_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_maskz_dpwusd_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_dpwusds_epi32(__m512i __A,__m512i __B,__m512i __C)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 
_mm512_mask_dpwusds_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_maskz_dpwusds_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_dpwuud_epi32(__m512i __A,__m512i __B,__m512i __C)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
_mm512_mask_dpwuud_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_maskz_dpwuud_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_dpwuuds_epi32(__m512i __A,__m512i __B,__m512i __C)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 
_mm512_mask_dpwuuds_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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 
_mm512_maskz_dpwuuds_epi32(__m512i __A,__mmask16 __U,__m512i __B,__m512i __C)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