1285165Sdim/*===------------- avx512cdintrin.h - AVX512CD intrinsics ------------------===
2285165Sdim *
3285165Sdim *
4353358Sdim * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5353358Sdim * See https://llvm.org/LICENSE.txt for license information.
6353358Sdim * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7285165Sdim *
8285165Sdim *===-----------------------------------------------------------------------===
9285165Sdim */
10285165Sdim#ifndef __IMMINTRIN_H
11285165Sdim#error "Never use <avx512cdintrin.h> directly; include <immintrin.h> instead."
12285165Sdim#endif
13285165Sdim
14285165Sdim#ifndef __AVX512CDINTRIN_H
15285165Sdim#define __AVX512CDINTRIN_H
16285165Sdim
17285165Sdim/* Define the default attributes for the functions in this file. */
18341825Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd"), __min_vector_width__(512)))
19285165Sdim
20285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
21285165Sdim_mm512_conflict_epi64 (__m512i __A)
22285165Sdim{
23353358Sdim  return (__m512i) __builtin_ia32_vpconflictdi_512 ((__v8di) __A);
24285165Sdim}
25285165Sdim
26285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
27285165Sdim_mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
28285165Sdim{
29353358Sdim  return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
30353358Sdim                                             (__v8di)_mm512_conflict_epi64(__A),
31353358Sdim                                             (__v8di)__W);
32285165Sdim}
33285165Sdim
34285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
35285165Sdim_mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A)
36285165Sdim{
37353358Sdim  return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
38353358Sdim                                             (__v8di)_mm512_conflict_epi64(__A),
39353358Sdim                                             (__v8di)_mm512_setzero_si512 ());
40285165Sdim}
41285165Sdim
42285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
43285165Sdim_mm512_conflict_epi32 (__m512i __A)
44285165Sdim{
45353358Sdim  return (__m512i) __builtin_ia32_vpconflictsi_512 ((__v16si) __A);
46285165Sdim}
47285165Sdim
48285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
49285165Sdim_mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
50285165Sdim{
51353358Sdim  return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
52353358Sdim                                            (__v16si)_mm512_conflict_epi32(__A),
53353358Sdim                                            (__v16si)__W);
54285165Sdim}
55285165Sdim
56285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
57285165Sdim_mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
58285165Sdim{
59353358Sdim  return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
60353358Sdim                                            (__v16si)_mm512_conflict_epi32(__A),
61353358Sdim                                            (__v16si)_mm512_setzero_si512());
62285165Sdim}
63285165Sdim
64285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
65285165Sdim_mm512_lzcnt_epi32 (__m512i __A)
66285165Sdim{
67341825Sdim  return (__m512i) __builtin_ia32_vplzcntd_512 ((__v16si) __A);
68285165Sdim}
69285165Sdim
70285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
71285165Sdim_mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
72285165Sdim{
73341825Sdim  return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
74341825Sdim                                             (__v16si)_mm512_lzcnt_epi32(__A),
75341825Sdim                                             (__v16si)__W);
76285165Sdim}
77285165Sdim
78285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
79285165Sdim_mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A)
80285165Sdim{
81341825Sdim  return (__m512i)__builtin_ia32_selectd_512((__mmask16)__U,
82341825Sdim                                             (__v16si)_mm512_lzcnt_epi32(__A),
83341825Sdim                                             (__v16si)_mm512_setzero_si512());
84285165Sdim}
85285165Sdim
86285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
87285165Sdim_mm512_lzcnt_epi64 (__m512i __A)
88285165Sdim{
89341825Sdim  return (__m512i) __builtin_ia32_vplzcntq_512 ((__v8di) __A);
90285165Sdim}
91285165Sdim
92285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
93285165Sdim_mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
94285165Sdim{
95341825Sdim  return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
96341825Sdim                                             (__v8di)_mm512_lzcnt_epi64(__A),
97341825Sdim                                             (__v8di)__W);
98285165Sdim}
99285165Sdim
100285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
101285165Sdim_mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A)
102285165Sdim{
103341825Sdim  return (__m512i)__builtin_ia32_selectq_512((__mmask8)__U,
104341825Sdim                                             (__v8di)_mm512_lzcnt_epi64(__A),
105341825Sdim                                             (__v8di)_mm512_setzero_si512());
106285165Sdim}
107309124Sdim
108309124Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
109309124Sdim_mm512_broadcastmb_epi64 (__mmask8 __A)
110309124Sdim{
111327952Sdim  return (__m512i) _mm512_set1_epi64((long long) __A);
112309124Sdim}
113309124Sdim
114309124Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
115309124Sdim_mm512_broadcastmw_epi32 (__mmask16 __A)
116309124Sdim{
117327952Sdim  return (__m512i) _mm512_set1_epi32((int) __A);
118327952Sdim
119309124Sdim}
120309124Sdim
121285165Sdim#undef __DEFAULT_FN_ATTRS
122285165Sdim
123285165Sdim#endif
124