1/*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9#ifndef __IMMINTRIN_H
10#error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
11#endif
12
13#ifndef __AVX512VLCDINTRIN_H
14#define __AVX512VLCDINTRIN_H
15
16/* Define the default attributes for the functions in this file. */
17#define __DEFAULT_FN_ATTRS128 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(128)))
18#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("avx512vl,avx512cd"), __min_vector_width__(256)))
19
20
21static __inline__ __m128i __DEFAULT_FN_ATTRS128
22_mm_broadcastmb_epi64 (__mmask8 __A)
23{
24  return (__m128i) _mm_set1_epi64x((long long) __A);
25}
26
27static __inline__ __m256i __DEFAULT_FN_ATTRS256
28_mm256_broadcastmb_epi64 (__mmask8 __A)
29{
30  return (__m256i) _mm256_set1_epi64x((long long)__A);
31}
32
33static __inline__ __m128i __DEFAULT_FN_ATTRS128
34_mm_broadcastmw_epi32 (__mmask16 __A)
35{
36  return (__m128i) _mm_set1_epi32((int)__A);
37}
38
39static __inline__ __m256i __DEFAULT_FN_ATTRS256
40_mm256_broadcastmw_epi32 (__mmask16 __A)
41{
42  return (__m256i) _mm256_set1_epi32((int)__A);
43}
44
45
46static __inline__ __m128i __DEFAULT_FN_ATTRS128
47_mm_conflict_epi64 (__m128i __A)
48{
49  return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A);
50}
51
52static __inline__ __m128i __DEFAULT_FN_ATTRS128
53_mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
54{
55  return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
56                                             (__v2di)_mm_conflict_epi64(__A),
57                                             (__v2di)__W);
58}
59
60static __inline__ __m128i __DEFAULT_FN_ATTRS128
61_mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
62{
63  return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
64                                             (__v2di)_mm_conflict_epi64(__A),
65                                             (__v2di)_mm_setzero_si128());
66}
67
68static __inline__ __m256i __DEFAULT_FN_ATTRS256
69_mm256_conflict_epi64 (__m256i __A)
70{
71  return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A);
72}
73
74static __inline__ __m256i __DEFAULT_FN_ATTRS256
75_mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
76{
77  return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
78                                             (__v4di)_mm256_conflict_epi64(__A),
79                                             (__v4di)__W);
80}
81
82static __inline__ __m256i __DEFAULT_FN_ATTRS256
83_mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
84{
85  return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
86                                             (__v4di)_mm256_conflict_epi64(__A),
87                                             (__v4di)_mm256_setzero_si256());
88}
89
90static __inline__ __m128i __DEFAULT_FN_ATTRS128
91_mm_conflict_epi32 (__m128i __A)
92{
93  return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A);
94}
95
96static __inline__ __m128i __DEFAULT_FN_ATTRS128
97_mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
98{
99  return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
100                                             (__v4si)_mm_conflict_epi32(__A),
101                                             (__v4si)__W);
102}
103
104static __inline__ __m128i __DEFAULT_FN_ATTRS128
105_mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
106{
107  return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
108                                             (__v4si)_mm_conflict_epi32(__A),
109                                             (__v4si)_mm_setzero_si128());
110}
111
112static __inline__ __m256i __DEFAULT_FN_ATTRS256
113_mm256_conflict_epi32 (__m256i __A)
114{
115  return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A);
116}
117
118static __inline__ __m256i __DEFAULT_FN_ATTRS256
119_mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
120{
121  return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
122                                             (__v8si)_mm256_conflict_epi32(__A),
123                                             (__v8si)__W);
124}
125
126static __inline__ __m256i __DEFAULT_FN_ATTRS256
127_mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
128{
129  return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
130                                             (__v8si)_mm256_conflict_epi32(__A),
131                                             (__v8si)_mm256_setzero_si256());
132}
133
134static __inline__ __m128i __DEFAULT_FN_ATTRS128
135_mm_lzcnt_epi32 (__m128i __A)
136{
137  return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
138}
139
140static __inline__ __m128i __DEFAULT_FN_ATTRS128
141_mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
142{
143  return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
144                                             (__v4si)_mm_lzcnt_epi32(__A),
145                                             (__v4si)__W);
146}
147
148static __inline__ __m128i __DEFAULT_FN_ATTRS128
149_mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
150{
151  return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
152                                             (__v4si)_mm_lzcnt_epi32(__A),
153                                             (__v4si)_mm_setzero_si128());
154}
155
156static __inline__ __m256i __DEFAULT_FN_ATTRS256
157_mm256_lzcnt_epi32 (__m256i __A)
158{
159  return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
160}
161
162static __inline__ __m256i __DEFAULT_FN_ATTRS256
163_mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
164{
165  return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
166                                             (__v8si)_mm256_lzcnt_epi32(__A),
167                                             (__v8si)__W);
168}
169
170static __inline__ __m256i __DEFAULT_FN_ATTRS256
171_mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
172{
173  return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
174                                             (__v8si)_mm256_lzcnt_epi32(__A),
175                                             (__v8si)_mm256_setzero_si256());
176}
177
178static __inline__ __m128i __DEFAULT_FN_ATTRS128
179_mm_lzcnt_epi64 (__m128i __A)
180{
181  return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
182}
183
184static __inline__ __m128i __DEFAULT_FN_ATTRS128
185_mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
186{
187  return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
188                                             (__v2di)_mm_lzcnt_epi64(__A),
189                                             (__v2di)__W);
190}
191
192static __inline__ __m128i __DEFAULT_FN_ATTRS128
193_mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
194{
195  return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
196                                             (__v2di)_mm_lzcnt_epi64(__A),
197                                             (__v2di)_mm_setzero_si128());
198}
199
200static __inline__ __m256i __DEFAULT_FN_ATTRS256
201_mm256_lzcnt_epi64 (__m256i __A)
202{
203  return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
204}
205
206static __inline__ __m256i __DEFAULT_FN_ATTRS256
207_mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
208{
209  return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
210                                             (__v4di)_mm256_lzcnt_epi64(__A),
211                                             (__v4di)__W);
212}
213
214static __inline__ __m256i __DEFAULT_FN_ATTRS256
215_mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
216{
217  return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
218                                             (__v4di)_mm256_lzcnt_epi64(__A),
219                                             (__v4di)_mm256_setzero_si256());
220}
221
222#undef __DEFAULT_FN_ATTRS128
223#undef __DEFAULT_FN_ATTRS256
224
225#endif /* __AVX512VLCDINTRIN_H */
226