master
  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
 22static __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
 29static __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
 37static __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
 45static __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
 52static __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
 60static __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
 68static __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
 75static __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
 83static __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
 91static __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
 98static __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
106static __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