avx512cdintrin.h revision 309124
1285165Sdim/*===------------- avx512cdintrin.h - AVX512CD intrinsics ------------------===
2285165Sdim *
3285165Sdim *
4285165Sdim * Permission is hereby granted, free of charge, to any person obtaining a copy
5285165Sdim * of this software and associated documentation files (the "Software"), to deal
6285165Sdim * in the Software without restriction, including without limitation the rights
7285165Sdim * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8285165Sdim * copies of the Software, and to permit persons to whom the Software is
9285165Sdim * furnished to do so, subject to the following conditions:
10285165Sdim *
11285165Sdim * The above copyright notice and this permission notice shall be included in
12285165Sdim * all copies or substantial portions of the Software.
13285165Sdim *
14285165Sdim * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15285165Sdim * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16285165Sdim * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17285165Sdim * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18285165Sdim * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19285165Sdim * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20285165Sdim * THE SOFTWARE.
21285165Sdim *
22285165Sdim *===-----------------------------------------------------------------------===
23285165Sdim */
24285165Sdim#ifndef __IMMINTRIN_H
25285165Sdim#error "Never use <avx512cdintrin.h> directly; include <immintrin.h> instead."
26285165Sdim#endif
27285165Sdim
28285165Sdim#ifndef __AVX512CDINTRIN_H
29285165Sdim#define __AVX512CDINTRIN_H
30285165Sdim
31285165Sdim/* Define the default attributes for the functions in this file. */
32285165Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512cd")))
33285165Sdim
34285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
35285165Sdim_mm512_conflict_epi64 (__m512i __A)
36285165Sdim{
37285165Sdim  return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
38285165Sdim                 (__v8di) _mm512_setzero_si512 (),
39285165Sdim                 (__mmask8) -1);
40285165Sdim}
41285165Sdim
42285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
43285165Sdim_mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
44285165Sdim{
45285165Sdim  return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
46285165Sdim               (__v8di) __W,
47285165Sdim               (__mmask8) __U);
48285165Sdim}
49285165Sdim
50285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
51285165Sdim_mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A)
52285165Sdim{
53285165Sdim  return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
54285165Sdim                 (__v8di) _mm512_setzero_si512 (),
55285165Sdim                 (__mmask8) __U);
56285165Sdim}
57285165Sdim
58285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
59285165Sdim_mm512_conflict_epi32 (__m512i __A)
60285165Sdim{
61285165Sdim  return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
62285165Sdim                 (__v16si) _mm512_setzero_si512 (),
63285165Sdim                 (__mmask16) -1);
64285165Sdim}
65285165Sdim
66285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
67285165Sdim_mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
68285165Sdim{
69285165Sdim  return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
70285165Sdim               (__v16si) __W,
71285165Sdim               (__mmask16) __U);
72285165Sdim}
73285165Sdim
74285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
75285165Sdim_mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
76285165Sdim{
77285165Sdim  return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
78285165Sdim                 (__v16si) _mm512_setzero_si512 (),
79285165Sdim                 (__mmask16) __U);
80285165Sdim}
81285165Sdim
82285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
83285165Sdim_mm512_lzcnt_epi32 (__m512i __A)
84285165Sdim{
85285165Sdim  return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
86285165Sdim             (__v16si) _mm512_setzero_si512 (),
87285165Sdim             (__mmask16) -1);
88285165Sdim}
89285165Sdim
90285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
91285165Sdim_mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
92285165Sdim{
93285165Sdim  return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
94285165Sdim                 (__v16si) __W,
95285165Sdim                 (__mmask16) __U);
96285165Sdim}
97285165Sdim
98285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
99285165Sdim_mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A)
100285165Sdim{
101285165Sdim  return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
102285165Sdim             (__v16si) _mm512_setzero_si512 (),
103285165Sdim             (__mmask16) __U);
104285165Sdim}
105285165Sdim
106285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
107285165Sdim_mm512_lzcnt_epi64 (__m512i __A)
108285165Sdim{
109285165Sdim  return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
110285165Sdim             (__v8di) _mm512_setzero_si512 (),
111285165Sdim             (__mmask8) -1);
112285165Sdim}
113285165Sdim
114285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
115285165Sdim_mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
116285165Sdim{
117285165Sdim  return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
118285165Sdim                 (__v8di) __W,
119285165Sdim                 (__mmask8) __U);
120285165Sdim}
121285165Sdim
122285165Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
123285165Sdim_mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A)
124285165Sdim{
125285165Sdim  return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
126285165Sdim             (__v8di) _mm512_setzero_si512 (),
127285165Sdim             (__mmask8) __U);
128285165Sdim}
129309124Sdim
130309124Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
131309124Sdim_mm512_broadcastmb_epi64 (__mmask8 __A)
132309124Sdim{
133309124Sdim  return (__m512i) __builtin_ia32_broadcastmb512 (__A);
134309124Sdim}
135309124Sdim
136309124Sdimstatic __inline__ __m512i __DEFAULT_FN_ATTRS
137309124Sdim_mm512_broadcastmw_epi32 (__mmask16 __A)
138309124Sdim{
139309124Sdim  return (__m512i) __builtin_ia32_broadcastmw512 (__A);
140309124Sdim}
141309124Sdim
142285165Sdim#undef __DEFAULT_FN_ATTRS
143285165Sdim
144285165Sdim#endif
145