1 /*===------------- avx512vlvnniintrin.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 <avx512vlvnniintrin.h> directly; include <immintrin.h> instead." 12 #endif 13 14 #ifndef __AVX512VLVNNIINTRIN_H 15 #define __AVX512VLVNNIINTRIN_H 16 17 /* Define the default attributes for the functions in this file. */ 18 #define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vnni"), __min_vector_width__(128))) 19 #define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512vnni"), __min_vector_width__(256))) 20 21 22 static __inline__ __m256i __DEFAULT_FN_ATTRS256 23 _mm256_dpbusd_epi32(__m256i __S, __m256i __A, __m256i __B) 24 { 25 return (__m256i)__builtin_ia32_vpdpbusd256((__v8si)__S, (__v8si)__A, 26 (__v8si)__B); 27 } 28 29 static __inline__ __m256i __DEFAULT_FN_ATTRS256 30 _mm256_mask_dpbusd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) 31 { 32 return (__m256i)__builtin_ia32_selectd_256(__U, 33 (__v8si)_mm256_dpbusd_epi32(__S, __A, __B), 34 (__v8si)__S); 35 } 36 37 static __inline__ __m256i __DEFAULT_FN_ATTRS256 38 _mm256_maskz_dpbusd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) 39 { 40 return (__m256i)__builtin_ia32_selectd_256(__U, 41 (__v8si)_mm256_dpbusd_epi32(__S, __A, __B), 42 (__v8si)_mm256_setzero_si256()); 43 } 44 45 static __inline__ __m256i __DEFAULT_FN_ATTRS256 46 _mm256_dpbusds_epi32(__m256i __S, __m256i __A, __m256i __B) 47 { 48 return (__m256i)__builtin_ia32_vpdpbusds256((__v8si)__S, (__v8si)__A, 49 (__v8si)__B); 50 } 51 52 static __inline__ __m256i __DEFAULT_FN_ATTRS256 53 _mm256_mask_dpbusds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) 54 { 55 return (__m256i)__builtin_ia32_selectd_256(__U, 56 (__v8si)_mm256_dpbusds_epi32(__S, __A, __B), 57 (__v8si)__S); 58 } 59 60 static __inline__ __m256i __DEFAULT_FN_ATTRS256 61 _mm256_maskz_dpbusds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) 62 { 63 return (__m256i)__builtin_ia32_selectd_256(__U, 64 (__v8si)_mm256_dpbusds_epi32(__S, __A, __B), 65 (__v8si)_mm256_setzero_si256()); 66 } 67 68 static __inline__ __m256i __DEFAULT_FN_ATTRS256 69 _mm256_dpwssd_epi32(__m256i __S, __m256i __A, __m256i __B) 70 { 71 return (__m256i)__builtin_ia32_vpdpwssd256((__v8si)__S, (__v8si)__A, 72 (__v8si)__B); 73 } 74 75 static __inline__ __m256i __DEFAULT_FN_ATTRS256 76 _mm256_mask_dpwssd_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) 77 { 78 return (__m256i)__builtin_ia32_selectd_256(__U, 79 (__v8si)_mm256_dpwssd_epi32(__S, __A, __B), 80 (__v8si)__S); 81 } 82 83 static __inline__ __m256i __DEFAULT_FN_ATTRS256 84 _mm256_maskz_dpwssd_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) 85 { 86 return (__m256i)__builtin_ia32_selectd_256(__U, 87 (__v8si)_mm256_dpwssd_epi32(__S, __A, __B), 88 (__v8si)_mm256_setzero_si256()); 89 } 90 91 static __inline__ __m256i __DEFAULT_FN_ATTRS256 92 _mm256_dpwssds_epi32(__m256i __S, __m256i __A, __m256i __B) 93 { 94 return (__m256i)__builtin_ia32_vpdpwssds256((__v8si)__S, (__v8si)__A, 95 (__v8si)__B); 96 } 97 98 static __inline__ __m256i __DEFAULT_FN_ATTRS256 99 _mm256_mask_dpwssds_epi32(__m256i __S, __mmask8 __U, __m256i __A, __m256i __B) 100 { 101 return (__m256i)__builtin_ia32_selectd_256(__U, 102 (__v8si)_mm256_dpwssds_epi32(__S, __A, __B), 103 (__v8si)__S); 104 } 105 106 static __inline__ __m256i __DEFAULT_FN_ATTRS256 107 _mm256_maskz_dpwssds_epi32(__mmask8 __U, __m256i __S, __m256i __A, __m256i __B) 108 { 109 return (__m256i)__builtin_ia32_selectd_256(__U, 110 (__v8si)_mm256_dpwssds_epi32(__S, __A, __B), 111 (__v8si)_mm256_setzero_si256()); 112 } 113 114 static __inline__ __m128i __DEFAULT_FN_ATTRS128 115 _mm_dpbusd_epi32(__m128i __S, __m128i __A, __m128i __B) 116 { 117 return (__m128i)__builtin_ia32_vpdpbusd128((__v4si)__S, (__v4si)__A, 118 (__v4si)__B); 119 } 120 121 static __inline__ __m128i __DEFAULT_FN_ATTRS128 122 _mm_mask_dpbusd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) 123 { 124 return (__m128i)__builtin_ia32_selectd_128(__U, 125 (__v4si)_mm_dpbusd_epi32(__S, __A, __B), 126 (__v4si)__S); 127 } 128 129 static __inline__ __m128i __DEFAULT_FN_ATTRS128 130 _mm_maskz_dpbusd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) 131 { 132 return (__m128i)__builtin_ia32_selectd_128(__U, 133 (__v4si)_mm_dpbusd_epi32(__S, __A, __B), 134 (__v4si)_mm_setzero_si128()); 135 } 136 137 static __inline__ __m128i __DEFAULT_FN_ATTRS128 138 _mm_dpbusds_epi32(__m128i __S, __m128i __A, __m128i __B) 139 { 140 return (__m128i)__builtin_ia32_vpdpbusds128((__v4si)__S, (__v4si)__A, 141 (__v4si)__B); 142 } 143 144 static __inline__ __m128i __DEFAULT_FN_ATTRS128 145 _mm_mask_dpbusds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) 146 { 147 return (__m128i)__builtin_ia32_selectd_128(__U, 148 (__v4si)_mm_dpbusds_epi32(__S, __A, __B), 149 (__v4si)__S); 150 } 151 152 static __inline__ __m128i __DEFAULT_FN_ATTRS128 153 _mm_maskz_dpbusds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) 154 { 155 return (__m128i)__builtin_ia32_selectd_128(__U, 156 (__v4si)_mm_dpbusds_epi32(__S, __A, __B), 157 (__v4si)_mm_setzero_si128()); 158 } 159 160 static __inline__ __m128i __DEFAULT_FN_ATTRS128 161 _mm_dpwssd_epi32(__m128i __S, __m128i __A, __m128i __B) 162 { 163 return (__m128i)__builtin_ia32_vpdpwssd128((__v4si)__S, (__v4si)__A, 164 (__v4si)__B); 165 } 166 167 static __inline__ __m128i __DEFAULT_FN_ATTRS128 168 _mm_mask_dpwssd_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) 169 { 170 return (__m128i)__builtin_ia32_selectd_128(__U, 171 (__v4si)_mm_dpwssd_epi32(__S, __A, __B), 172 (__v4si)__S); 173 } 174 175 static __inline__ __m128i __DEFAULT_FN_ATTRS128 176 _mm_maskz_dpwssd_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) 177 { 178 return (__m128i)__builtin_ia32_selectd_128(__U, 179 (__v4si)_mm_dpwssd_epi32(__S, __A, __B), 180 (__v4si)_mm_setzero_si128()); 181 } 182 183 static __inline__ __m128i __DEFAULT_FN_ATTRS128 184 _mm_dpwssds_epi32(__m128i __S, __m128i __A, __m128i __B) 185 { 186 return (__m128i)__builtin_ia32_vpdpwssds128((__v4si)__S, (__v4si)__A, 187 (__v4si)__B); 188 } 189 190 static __inline__ __m128i __DEFAULT_FN_ATTRS128 191 _mm_mask_dpwssds_epi32(__m128i __S, __mmask8 __U, __m128i __A, __m128i __B) 192 { 193 return (__m128i)__builtin_ia32_selectd_128(__U, 194 (__v4si)_mm_dpwssds_epi32(__S, __A, __B), 195 (__v4si)__S); 196 } 197 198 static __inline__ __m128i __DEFAULT_FN_ATTRS128 199 _mm_maskz_dpwssds_epi32(__mmask8 __U, __m128i __S, __m128i __A, __m128i __B) 200 { 201 return (__m128i)__builtin_ia32_selectd_128(__U, 202 (__v4si)_mm_dpwssds_epi32(__S, __A, __B), 203 (__v4si)_mm_setzero_si128()); 204 } 205 206 #undef __DEFAULT_FN_ATTRS128 207 #undef __DEFAULT_FN_ATTRS256 208 209 #endif 210