315 lines · c
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-exception6 *7 *===-----------------------------------------------------------------------===8 */9#ifndef __IMMINTRIN_H10#error \11 "Never use <avx10_2_512niintrin.h> directly; include <immintrin.h> instead."12#endif13 14#ifdef __SSE2__15 16#ifndef __AVX10_2_512NIINTRIN_H17#define __AVX10_2_512NIINTRIN_H18 19#define __DEFAULT_FN_ATTRS \20 __attribute__((__always_inline__, __nodebug__, __target__("avx10.2"), \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, (__v64qi)__A,68 (__v64qi)__B);69}70 71static __inline__ __m512i __DEFAULT_FN_ATTRS72_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, (__v64qi)__A,88 (__v64qi)__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, (__v64qi)__A,108 (__v64qu)__B);109}110 111static __inline__ __m512i __DEFAULT_FN_ATTRS112_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, (__v64qi)__A,128 (__v64qu)__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, (__v64qu)__A,148 (__v64qu)__B);149}150 151static __inline__ __m512i __DEFAULT_FN_ATTRS152_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, (__v64qu)__A,168 (__v64qu)__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_ATTRS193_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 __mmask16 __U, __m512i __A, __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 __mmask16 __U, __m512i __A, __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_ATTRS235_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 __mmask16 __U, __m512i __A, __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 __mmask16 __U, __m512i __A, __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_ATTRS277_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 __mmask16 __U, __m512i __A, __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 __mmask16 __U, __m512i __A, __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_ATTRS312 313#endif /* __SSE2__ */314#endif /* __AVX10_2_512NIINTRIN_H */315