avx512vnniintrin.h revision 341825
1/*===------------- avx512vnniintrin.h - VNNI intrinsics ------------------=== 2 * 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 * THE SOFTWARE. 21 * 22 *===-----------------------------------------------------------------------=== 23 */ 24#ifndef __IMMINTRIN_H 25#error "Never use <avx512vnniintrin.h> directly; include <immintrin.h> instead." 26#endif 27 28#ifndef __AVX512VNNIINTRIN_H 29#define __AVX512VNNIINTRIN_H 30 31/* Define the default attributes for the functions in this file. */ 32#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vnni"), __min_vector_width__(512))) 33 34 35static __inline__ __m512i __DEFAULT_FN_ATTRS 36_mm512_dpbusd_epi32(__m512i __S, __m512i __A, __m512i __B) 37{ 38 return (__m512i)__builtin_ia32_vpdpbusd512((__v16si)__S, (__v16si)__A, 39 (__v16si)__B); 40} 41 42static __inline__ __m512i __DEFAULT_FN_ATTRS 43_mm512_mask_dpbusd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 44{ 45 return (__m512i)__builtin_ia32_selectd_512(__U, 46 (__v16si)_mm512_dpbusd_epi32(__S, __A, __B), 47 (__v16si)__S); 48} 49 50static __inline__ __m512i __DEFAULT_FN_ATTRS 51_mm512_maskz_dpbusd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 52{ 53 return (__m512i)__builtin_ia32_selectd_512(__U, 54 (__v16si)_mm512_dpbusd_epi32(__S, __A, __B), 55 (__v16si)_mm512_setzero_si512()); 56} 57 58static __inline__ __m512i __DEFAULT_FN_ATTRS 59_mm512_dpbusds_epi32(__m512i __S, __m512i __A, __m512i __B) 60{ 61 return (__m512i)__builtin_ia32_vpdpbusds512((__v16si)__S, (__v16si)__A, 62 (__v16si)__B); 63} 64 65static __inline__ __m512i __DEFAULT_FN_ATTRS 66_mm512_mask_dpbusds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 67{ 68 return (__m512i)__builtin_ia32_selectd_512(__U, 69 (__v16si)_mm512_dpbusds_epi32(__S, __A, __B), 70 (__v16si)__S); 71} 72 73static __inline__ __m512i __DEFAULT_FN_ATTRS 74_mm512_maskz_dpbusds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 75{ 76 return (__m512i)__builtin_ia32_selectd_512(__U, 77 (__v16si)_mm512_dpbusds_epi32(__S, __A, __B), 78 (__v16si)_mm512_setzero_si512()); 79} 80 81static __inline__ __m512i __DEFAULT_FN_ATTRS 82_mm512_dpwssd_epi32(__m512i __S, __m512i __A, __m512i __B) 83{ 84 return (__m512i)__builtin_ia32_vpdpwssd512((__v16si)__S, (__v16si)__A, 85 (__v16si)__B); 86} 87 88static __inline__ __m512i __DEFAULT_FN_ATTRS 89_mm512_mask_dpwssd_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 90{ 91 return (__m512i)__builtin_ia32_selectd_512(__U, 92 (__v16si)_mm512_dpwssd_epi32(__S, __A, __B), 93 (__v16si)__S); 94} 95 96static __inline__ __m512i __DEFAULT_FN_ATTRS 97_mm512_maskz_dpwssd_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 98{ 99 return (__m512i)__builtin_ia32_selectd_512(__U, 100 (__v16si)_mm512_dpwssd_epi32(__S, __A, __B), 101 (__v16si)_mm512_setzero_si512()); 102} 103 104static __inline__ __m512i __DEFAULT_FN_ATTRS 105_mm512_dpwssds_epi32(__m512i __S, __m512i __A, __m512i __B) 106{ 107 return (__m512i)__builtin_ia32_vpdpwssds512((__v16si)__S, (__v16si)__A, 108 (__v16si)__B); 109} 110 111static __inline__ __m512i __DEFAULT_FN_ATTRS 112_mm512_mask_dpwssds_epi32(__m512i __S, __mmask16 __U, __m512i __A, __m512i __B) 113{ 114 return (__m512i)__builtin_ia32_selectd_512(__U, 115 (__v16si)_mm512_dpwssds_epi32(__S, __A, __B), 116 (__v16si)__S); 117} 118 119static __inline__ __m512i __DEFAULT_FN_ATTRS 120_mm512_maskz_dpwssds_epi32(__mmask16 __U, __m512i __S, __m512i __A, __m512i __B) 121{ 122 return (__m512i)__builtin_ia32_selectd_512(__U, 123 (__v16si)_mm512_dpwssds_epi32(__S, __A, __B), 124 (__v16si)_mm512_setzero_si512()); 125} 126 127#undef __DEFAULT_FN_ATTRS 128 129#endif 130