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