1 /*===------------- avx512vnniintrin.h - VNNI intrinsics ------------------=== 2 * 3 * 4 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 * See https://llvm.org/LICENSE.txt for license information. 6 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 * 8 *===-----------------------------------------------------------------------=== 9 */ 10 #ifndef __IMMINTRIN_H 11 #error "Never use <avx512vnniintrin.h> directly; include <immintrin.h> instead." 12 #endif 13 14 #ifndef __AVX512VNNIINTRIN_H 15 #define __AVX512VNNIINTRIN_H 16 17 /* Define the default attributes for the functions in this file. */ 18 #define __DEFAULT_FN_ATTRS \ 19 __attribute__((__always_inline__, __nodebug__, \ 20 __target__("avx512vnni,evex512"), __min_vector_width__(512))) 21 22 static __inline__ __m512i __DEFAULT_FN_ATTRS 23 _mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B) 24 { 25 return (__m512i)__builtin_ia32_vpdpbusd512((__v16si)__S, (__v16si)__A, 26 (__v16si)__B); 27 } 28 29 static __inline__ __m512i __DEFAULT_FN_ATTRS 30 _mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 31 { 32 return (__m512i)__builtin_ia32_selectd_512(__U, 33 (__v16si)_mm512_dpbusd_epi32(__S, __A, __B), 34 (__v16si)__S); 35 } 36 37 static __inline__ __m512i __DEFAULT_FN_ATTRS 38 _mm512_maskz_dpbusd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 39 { 40 return (__m512i)__builtin_ia32_selectd_512(__U, 41 (__v16si)_mm512_dpbusd_epi32(__S, __A, __B), 42 (__v16si)_mm512_setzero_si512()); 43 } 44 45 static __inline__ __m512i __DEFAULT_FN_ATTRS 46 _mm512_dpbusds_epi32(__m512i __S, __m512i __A, __m512i __B) 47 { 48 return (__m512i)__builtin_ia32_vpdpbusds512((__v16si)__S, (__v16si)__A, 49 (__v16si)__B); 50 } 51 52 static __inline__ __m512i __DEFAULT_FN_ATTRS 53 _mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 54 { 55 return (__m512i)__builtin_ia32_selectd_512(__U, 56 (__v16si)_mm512_dpbusds_epi32(__S, __A, __B), 57 (__v16si)__S); 58 } 59 60 static __inline__ __m512i __DEFAULT_FN_ATTRS 61 _mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 62 { 63 return (__m512i)__builtin_ia32_selectd_512(__U, 64 (__v16si)_mm512_dpbusds_epi32(__S, __A, __B), 65 (__v16si)_mm512_setzero_si512()); 66 } 67 68 static __inline__ __m512i __DEFAULT_FN_ATTRS 69 _mm512_dpwssd_epi32(__m512i __S, __m512i __A, __m512i __B) 70 { 71 return (__m512i)__builtin_ia32_vpdpwssd512((__v16si)__S, (__v16si)__A, 72 (__v16si)__B); 73 } 74 75 static __inline__ __m512i __DEFAULT_FN_ATTRS 76 _mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 77 { 78 return (__m512i)__builtin_ia32_selectd_512(__U, 79 (__v16si)_mm512_dpwssd_epi32(__S, __A, __B), 80 (__v16si)__S); 81 } 82 83 static __inline__ __m512i __DEFAULT_FN_ATTRS 84 _mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 85 { 86 return (__m512i)__builtin_ia32_selectd_512(__U, 87 (__v16si)_mm512_dpwssd_epi32(__S, __A, __B), 88 (__v16si)_mm512_setzero_si512()); 89 } 90 91 static __inline__ __m512i __DEFAULT_FN_ATTRS 92 _mm512_dpwssds_epi32(__m512i __S, __m512i __A, __m512i __B) 93 { 94 return (__m512i)__builtin_ia32_vpdpwssds512((__v16si)__S, (__v16si)__A, 95 (__v16si)__B); 96 } 97 98 static __inline__ __m512i __DEFAULT_FN_ATTRS 99 _mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 100 { 101 return (__m512i)__builtin_ia32_selectd_512(__U, 102 (__v16si)_mm512_dpwssds_epi32(__S, __A, __B), 103 (__v16si)__S); 104 } 105 106 static __inline__ __m512i __DEFAULT_FN_ATTRS 107 _mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 108 { 109 return (__m512i)__builtin_ia32_selectd_512(__U, 110 (__v16si)_mm512_dpwssds_epi32(__S, __A, __B), 111 (__v16si)_mm512_setzero_si512()); 112 } 113 114 #undef __DEFAULT_FN_ATTRS 115 116 #endif 117