[Flang] remove whole-archive option for AIX linker (#76039)
[llvm-project.git] / clang / lib / Headers / avx512vlcdintrin.h
blob923e2c551a97a8695d3309ae1db14f442c9985f3
1 /*===---- avx512vlcdintrin.h - AVX512VL and AVX512CD intrinsics ------------===
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
7 *===-----------------------------------------------------------------------===
8 */
9 #ifndef __IMMINTRIN_H
10 #error "Never use <avx512vlcdintrin.h> directly; include <immintrin.h> instead."
11 #endif
13 #ifndef __AVX512VLCDINTRIN_H
14 #define __AVX512VLCDINTRIN_H
16 /* Define the default attributes for the functions in this file. */
17 #define __DEFAULT_FN_ATTRS128 \
18 __attribute__((__always_inline__, __nodebug__, \
19 __target__("avx512vl,avx512cd,no-evex512"), \
20 __min_vector_width__(128)))
21 #define __DEFAULT_FN_ATTRS256 \
22 __attribute__((__always_inline__, __nodebug__, \
23 __target__("avx512vl,avx512cd,no-evex512"), \
24 __min_vector_width__(256)))
26 static __inline__ __m128i __DEFAULT_FN_ATTRS128
27 _mm_broadcastmb_epi64 (__mmask8 __A)
29 return (__m128i) _mm_set1_epi64x((long long) __A);
32 static __inline__ __m256i __DEFAULT_FN_ATTRS256
33 _mm256_broadcastmb_epi64 (__mmask8 __A)
35 return (__m256i) _mm256_set1_epi64x((long long)__A);
38 static __inline__ __m128i __DEFAULT_FN_ATTRS128
39 _mm_broadcastmw_epi32 (__mmask16 __A)
41 return (__m128i) _mm_set1_epi32((int)__A);
44 static __inline__ __m256i __DEFAULT_FN_ATTRS256
45 _mm256_broadcastmw_epi32 (__mmask16 __A)
47 return (__m256i) _mm256_set1_epi32((int)__A);
51 static __inline__ __m128i __DEFAULT_FN_ATTRS128
52 _mm_conflict_epi64 (__m128i __A)
54 return (__m128i) __builtin_ia32_vpconflictdi_128 ((__v2di) __A);
57 static __inline__ __m128i __DEFAULT_FN_ATTRS128
58 _mm_mask_conflict_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
60 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
61 (__v2di)_mm_conflict_epi64(__A),
62 (__v2di)__W);
65 static __inline__ __m128i __DEFAULT_FN_ATTRS128
66 _mm_maskz_conflict_epi64 (__mmask8 __U, __m128i __A)
68 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
69 (__v2di)_mm_conflict_epi64(__A),
70 (__v2di)_mm_setzero_si128());
73 static __inline__ __m256i __DEFAULT_FN_ATTRS256
74 _mm256_conflict_epi64 (__m256i __A)
76 return (__m256i) __builtin_ia32_vpconflictdi_256 ((__v4di) __A);
79 static __inline__ __m256i __DEFAULT_FN_ATTRS256
80 _mm256_mask_conflict_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
82 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
83 (__v4di)_mm256_conflict_epi64(__A),
84 (__v4di)__W);
87 static __inline__ __m256i __DEFAULT_FN_ATTRS256
88 _mm256_maskz_conflict_epi64 (__mmask8 __U, __m256i __A)
90 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
91 (__v4di)_mm256_conflict_epi64(__A),
92 (__v4di)_mm256_setzero_si256());
95 static __inline__ __m128i __DEFAULT_FN_ATTRS128
96 _mm_conflict_epi32 (__m128i __A)
98 return (__m128i) __builtin_ia32_vpconflictsi_128 ((__v4si) __A);
101 static __inline__ __m128i __DEFAULT_FN_ATTRS128
102 _mm_mask_conflict_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
104 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
105 (__v4si)_mm_conflict_epi32(__A),
106 (__v4si)__W);
109 static __inline__ __m128i __DEFAULT_FN_ATTRS128
110 _mm_maskz_conflict_epi32 (__mmask8 __U, __m128i __A)
112 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
113 (__v4si)_mm_conflict_epi32(__A),
114 (__v4si)_mm_setzero_si128());
117 static __inline__ __m256i __DEFAULT_FN_ATTRS256
118 _mm256_conflict_epi32 (__m256i __A)
120 return (__m256i) __builtin_ia32_vpconflictsi_256 ((__v8si) __A);
123 static __inline__ __m256i __DEFAULT_FN_ATTRS256
124 _mm256_mask_conflict_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
126 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
127 (__v8si)_mm256_conflict_epi32(__A),
128 (__v8si)__W);
131 static __inline__ __m256i __DEFAULT_FN_ATTRS256
132 _mm256_maskz_conflict_epi32 (__mmask8 __U, __m256i __A)
134 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
135 (__v8si)_mm256_conflict_epi32(__A),
136 (__v8si)_mm256_setzero_si256());
139 static __inline__ __m128i __DEFAULT_FN_ATTRS128
140 _mm_lzcnt_epi32 (__m128i __A)
142 return (__m128i) __builtin_ia32_vplzcntd_128 ((__v4si) __A);
145 static __inline__ __m128i __DEFAULT_FN_ATTRS128
146 _mm_mask_lzcnt_epi32 (__m128i __W, __mmask8 __U, __m128i __A)
148 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
149 (__v4si)_mm_lzcnt_epi32(__A),
150 (__v4si)__W);
153 static __inline__ __m128i __DEFAULT_FN_ATTRS128
154 _mm_maskz_lzcnt_epi32 (__mmask8 __U, __m128i __A)
156 return (__m128i)__builtin_ia32_selectd_128((__mmask8)__U,
157 (__v4si)_mm_lzcnt_epi32(__A),
158 (__v4si)_mm_setzero_si128());
161 static __inline__ __m256i __DEFAULT_FN_ATTRS256
162 _mm256_lzcnt_epi32 (__m256i __A)
164 return (__m256i) __builtin_ia32_vplzcntd_256 ((__v8si) __A);
167 static __inline__ __m256i __DEFAULT_FN_ATTRS256
168 _mm256_mask_lzcnt_epi32 (__m256i __W, __mmask8 __U, __m256i __A)
170 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
171 (__v8si)_mm256_lzcnt_epi32(__A),
172 (__v8si)__W);
175 static __inline__ __m256i __DEFAULT_FN_ATTRS256
176 _mm256_maskz_lzcnt_epi32 (__mmask8 __U, __m256i __A)
178 return (__m256i)__builtin_ia32_selectd_256((__mmask8)__U,
179 (__v8si)_mm256_lzcnt_epi32(__A),
180 (__v8si)_mm256_setzero_si256());
183 static __inline__ __m128i __DEFAULT_FN_ATTRS128
184 _mm_lzcnt_epi64 (__m128i __A)
186 return (__m128i) __builtin_ia32_vplzcntq_128 ((__v2di) __A);
189 static __inline__ __m128i __DEFAULT_FN_ATTRS128
190 _mm_mask_lzcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
192 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
193 (__v2di)_mm_lzcnt_epi64(__A),
194 (__v2di)__W);
197 static __inline__ __m128i __DEFAULT_FN_ATTRS128
198 _mm_maskz_lzcnt_epi64 (__mmask8 __U, __m128i __A)
200 return (__m128i)__builtin_ia32_selectq_128((__mmask8)__U,
201 (__v2di)_mm_lzcnt_epi64(__A),
202 (__v2di)_mm_setzero_si128());
205 static __inline__ __m256i __DEFAULT_FN_ATTRS256
206 _mm256_lzcnt_epi64 (__m256i __A)
208 return (__m256i) __builtin_ia32_vplzcntq_256 ((__v4di) __A);
211 static __inline__ __m256i __DEFAULT_FN_ATTRS256
212 _mm256_mask_lzcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
214 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
215 (__v4di)_mm256_lzcnt_epi64(__A),
216 (__v4di)__W);
219 static __inline__ __m256i __DEFAULT_FN_ATTRS256
220 _mm256_maskz_lzcnt_epi64 (__mmask8 __U, __m256i __A)
222 return (__m256i)__builtin_ia32_selectq_256((__mmask8)__U,
223 (__v4di)_mm256_lzcnt_epi64(__A),
224 (__v4di)_mm256_setzero_si256());
227 #undef __DEFAULT_FN_ATTRS128
228 #undef __DEFAULT_FN_ATTRS256
230 #endif /* __AVX512VLCDINTRIN_H */