master
1/*===----------- avx10_2satcvtdsintrin.h - AVX512SATCVTDS 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
10#ifndef __IMMINTRIN_H
11#error \
12 "Never use <avx10_2satcvtdsintrin.h> directly; include <immintrin.h> instead."
13#endif // __IMMINTRIN_H
14
15#ifndef __AVX10_2SATCVTDSINTRIN_H
16#define __AVX10_2SATCVTDSINTRIN_H
17
18/* Define the default attributes for the functions in this file. */
19#define __DEFAULT_FN_ATTRS256 \
20 __attribute__((__always_inline__, __nodebug__, __target__("avx10.2-256"), \
21 __min_vector_width__(256)))
22
23#define __DEFAULT_FN_ATTRS128 \
24 __attribute__((__always_inline__, __nodebug__, __target__("avx10.2-256"), \
25 __min_vector_width__(128)))
26
27#define _mm_cvtts_roundsd_i32(__A, __R) \
28 ((int)__builtin_ia32_vcvttsd2sis32((__v2df)(__m128)(__A), (const int)(__R)))
29
30#define _mm_cvtts_roundsd_si32(__A, __R) \
31 ((int)__builtin_ia32_vcvttsd2sis32((__v2df)(__m128d)(__A), (const int)(__R)))
32
33#define _mm_cvtts_roundsd_u32(__A, __R) \
34 ((unsigned int)__builtin_ia32_vcvttsd2usis32((__v2df)(__m128d)(__A), \
35 (const int)(__R)))
36
37#define _mm_cvtts_roundss_i32(__A, __R) \
38 ((int)__builtin_ia32_vcvttss2sis32((__v4sf)(__m128)(__A), (const int)(__R)))
39
40#define _mm_cvtts_roundss_si32(__A, __R) \
41 ((int)__builtin_ia32_vcvttss2sis32((__v4sf)(__m128)(__A), (const int)(__R)))
42
43#define _mm_cvtts_roundss_u32(__A, __R) \
44 ((unsigned int)__builtin_ia32_vcvttss2usis32((__v4sf)(__m128)(__A), \
45 (const int)(__R)))
46
47#ifdef __x86_64__
48#define _mm_cvtts_roundss_u64(__A, __R) \
49 ((unsigned long long)__builtin_ia32_vcvttss2usis64((__v4sf)(__m128)(__A), \
50 (const int)(__R)))
51
52#define _mm_cvtts_roundsd_u64(__A, __R) \
53 ((unsigned long long)__builtin_ia32_vcvttsd2usis64((__v2df)(__m128d)(__A), \
54 (const int)(__R)))
55
56#define _mm_cvtts_roundss_i64(__A, __R) \
57 ((long long)__builtin_ia32_vcvttss2sis64((__v4sf)(__m128)(__A), \
58 (const int)(__R)))
59
60#define _mm_cvtts_roundss_si64(__A, __R) \
61 ((long long)__builtin_ia32_vcvttss2sis64((__v4sf)(__m128)(__A), \
62 (const int)(__R)))
63
64#define _mm_cvtts_roundsd_si64(__A, __R) \
65 ((long long)__builtin_ia32_vcvttsd2sis64((__v2df)(__m128d)(__A), \
66 (const int)(__R)))
67
68#define _mm_cvtts_roundsd_i64(__A, __R) \
69 ((long long)__builtin_ia32_vcvttsd2sis64((__v2df)(__m128d)(__A), \
70 (const int)(__R)))
71#endif /* __x86_64__ */
72
73// 128 Bit : Double -> int
74static __inline__ __m128i __DEFAULT_FN_ATTRS128
75_mm_cvtts_pd_epi32(__m128d __A) {
76 return ((__m128i)__builtin_ia32_vcvttpd2dqs128_mask(
77 (__v2df)__A, (__v4si)(__m128i)_mm_undefined_si128(), (__mmask8)(-1)));
78}
79
80static __inline__ __m128i __DEFAULT_FN_ATTRS128
81_mm_mask_cvtts_pd_epi32(__m128i __W, __mmask8 __U, __m128d __A) {
82 return ((__m128i)__builtin_ia32_vcvttpd2dqs128_mask((__v2df)__A, (__v4si)__W,
83 __U));
84}
85
86static __inline__ __m128i __DEFAULT_FN_ATTRS128
87_mm_maskz_cvtts_pd_epi32(__mmask16 __U, __m128d __A) {
88 return ((__m128i)__builtin_ia32_vcvttpd2dqs128_mask(
89 (__v2df)__A, (__v4si)(__m128i)_mm_setzero_si128(), __U));
90}
91
92// 256 Bit : Double -> int
93static __inline__ __m128i __DEFAULT_FN_ATTRS256
94_mm256_cvtts_pd_epi32(__m256d __A) {
95 return ((__m128i)__builtin_ia32_vcvttpd2dqs256_mask(
96 (__v4df)__A, (__v4si)_mm_undefined_si128(), (__mmask8)-1));
97}
98
99static __inline__ __m128i __DEFAULT_FN_ATTRS256
100_mm256_mask_cvtts_pd_epi32(__m128i __W, __mmask8 __U, __m256d __A) {
101 return ((__m128i)__builtin_ia32_vcvttpd2dqs256_mask((__v4df)__A, (__v4si)__W,
102 __U));
103}
104
105static __inline__ __m128i __DEFAULT_FN_ATTRS256
106_mm256_maskz_cvtts_pd_epi32(__mmask8 __U, __m256d __A) {
107 return ((__m128i)__builtin_ia32_vcvttpd2dqs256_mask(
108 (__v4df)__A, (__v4si)_mm_setzero_si128(), __U));
109}
110
111// 128 Bit : Double -> uint
112static __inline__ __m128i __DEFAULT_FN_ATTRS128
113_mm_cvtts_pd_epu32(__m128d __A) {
114 return ((__m128i)__builtin_ia32_vcvttpd2udqs128_mask(
115 (__v2df)__A, (__v4si)(__m128i)_mm_undefined_si128(), (__mmask8)(-1)));
116}
117
118static __inline__ __m128i __DEFAULT_FN_ATTRS128
119_mm_mask_cvtts_pd_epu32(__m128i __W, __mmask8 __U, __m128d __A) {
120 return ((__m128i)__builtin_ia32_vcvttpd2udqs128_mask(
121 (__v2df)__A, (__v4si)(__m128i)__W, (__mmask8)__U));
122}
123
124static __inline__ __m128i __DEFAULT_FN_ATTRS128
125_mm_maskz_cvtts_pd_epu32(__mmask8 __U, __m128d __A) {
126 return ((__m128i)__builtin_ia32_vcvttpd2udqs128_mask(
127 (__v2df)__A, (__v4si)(__m128i)_mm_setzero_si128(), __U));
128}
129
130// 256 Bit : Double -> uint
131static __inline__ __m128i __DEFAULT_FN_ATTRS256
132_mm256_cvtts_pd_epu32(__m256d __A) {
133 return ((__m128i)__builtin_ia32_vcvttpd2udqs256_mask(
134 (__v4df)__A, (__v4si)_mm_undefined_si128(), (__mmask8)-1));
135}
136
137static __inline__ __m128i __DEFAULT_FN_ATTRS256
138_mm256_mask_cvtts_pd_epu32(__m128i __W, __mmask8 __U, __m256d __A) {
139 return ((__m128i)__builtin_ia32_vcvttpd2udqs256_mask((__v4df)__A, (__v4si)__W,
140 __U));
141}
142
143static __inline__ __m128i __DEFAULT_FN_ATTRS256
144_mm256_maskz_cvtts_pd_epu32(__mmask8 __U, __m256d __A) {
145 return ((__m128i)__builtin_ia32_vcvttpd2udqs256_mask(
146 (__v4df)__A, (__v4si)_mm_setzero_si128(), __U));
147}
148
149// 128 Bit : Double -> long
150static __inline__ __m128i __DEFAULT_FN_ATTRS128
151_mm_cvtts_pd_epi64(__m128d __A) {
152 return ((__m128i)__builtin_ia32_vcvttpd2qqs128_mask(
153 (__v2df)__A, (__v2di)_mm_undefined_si128(), (__mmask8)-1));
154}
155
156static __inline__ __m128i __DEFAULT_FN_ATTRS128
157_mm_mask_cvtts_pd_epi64(__m128i __W, __mmask8 __U, __m128d __A) {
158 return ((__m128i)__builtin_ia32_vcvttpd2qqs128_mask((__v2df)__A, (__v2di)__W,
159 (__mmask8)__U));
160}
161
162static __inline__ __m128i __DEFAULT_FN_ATTRS128
163_mm_maskz_cvtts_pd_epi64(__mmask8 __U, __m128d __A) {
164 return ((__m128i)__builtin_ia32_vcvttpd2qqs128_mask(
165 (__v2df)__A, (__v2di)_mm_setzero_si128(), (__mmask8)__U));
166}
167
168// 256 Bit : Double -> long
169static __inline__ __m256i __DEFAULT_FN_ATTRS256
170_mm256_cvtts_pd_epi64(__m256d __A) {
171 return ((__m256i)__builtin_ia32_vcvttpd2qqs256_mask(
172 (__v4df)__A, (__v4di)_mm256_undefined_si256(), (__mmask8)-1));
173}
174
175static __inline__ __m256i __DEFAULT_FN_ATTRS256
176_mm256_mask_cvtts_pd_epi64(__m256i __W, __mmask8 __U, __m256d __A) {
177 return ((__m256i)__builtin_ia32_vcvttpd2qqs256_mask((__v4df)__A, (__v4di)__W,
178 __U));
179}
180
181static __inline__ __m256i __DEFAULT_FN_ATTRS256
182_mm256_maskz_cvtts_pd_epi64(__mmask8 __U, __m256d __A) {
183 return ((__m256i)__builtin_ia32_vcvttpd2qqs256_mask(
184 (__v4df)__A, (__v4di)_mm256_setzero_si256(), __U));
185}
186
187// 128 Bit : Double -> ulong
188static __inline__ __m128i __DEFAULT_FN_ATTRS128
189_mm_cvtts_pd_epu64(__m128d __A) {
190 return ((__m128i)__builtin_ia32_vcvttpd2uqqs128_mask(
191 (__v2df)__A, (__v2di)_mm_undefined_si128(), (__mmask8)-1));
192}
193
194static __inline__ __m128i __DEFAULT_FN_ATTRS128
195_mm_mask_cvtts_pd_epu64(__m128i __W, __mmask8 __U, __m128d __A) {
196 return ((__m128i)__builtin_ia32_vcvttpd2uqqs128_mask((__v2df)__A, (__v2di)__W,
197 (__mmask8)__U));
198}
199
200static __inline__ __m128i __DEFAULT_FN_ATTRS128
201_mm_maskz_cvtts_pd_epu64(__mmask8 __U, __m128d __A) {
202 return ((__m128i)__builtin_ia32_vcvttpd2uqqs128_mask(
203 (__v2df)__A, (__v2di)_mm_setzero_si128(), (__mmask8)__U));
204}
205
206// 256 Bit : Double -> ulong
207
208static __inline__ __m256i __DEFAULT_FN_ATTRS256
209_mm256_cvtts_pd_epu64(__m256d __A) {
210 return ((__m256i)__builtin_ia32_vcvttpd2uqqs256_mask(
211 (__v4df)__A, (__v4di)_mm256_undefined_si256(), (__mmask8)-1));
212}
213
214static __inline__ __m256i __DEFAULT_FN_ATTRS256
215_mm256_mask_cvtts_pd_epu64(__m256i __W, __mmask8 __U, __m256d __A) {
216 return ((__m256i)__builtin_ia32_vcvttpd2uqqs256_mask((__v4df)__A, (__v4di)__W,
217 __U));
218}
219
220static __inline__ __m256i __DEFAULT_FN_ATTRS256
221_mm256_maskz_cvtts_pd_epu64(__mmask8 __U, __m256d __A) {
222 return ((__m256i)__builtin_ia32_vcvttpd2uqqs256_mask(
223 (__v4df)__A, (__v4di)_mm256_setzero_si256(), __U));
224}
225
226// 128 Bit : float -> int
227static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_cvtts_ps_epi32(__m128 __A) {
228 return ((__m128i)__builtin_ia32_vcvttps2dqs128_mask(
229 (__v4sf)__A, (__v4si)(__m128i)_mm_undefined_si128(), (__mmask8)(-1)));
230}
231
232static __inline__ __m128i __DEFAULT_FN_ATTRS128
233_mm_mask_cvtts_ps_epi32(__m128i __W, __mmask8 __U, __m128 __A) {
234 return ((__m128i)__builtin_ia32_vcvttps2dqs128_mask((__v4sf)__A, (__v4si)__W,
235 (__mmask8)__U));
236}
237
238static __inline__ __m128i __DEFAULT_FN_ATTRS128
239_mm_maskz_cvtts_ps_epi32(__mmask8 __U, __m128 __A) {
240 return ((__m128i)__builtin_ia32_vcvttps2dqs128_mask(
241 (__v4sf)__A, (__v4si)(__m128i)_mm_setzero_si128(), (__mmask8)__U));
242}
243
244// 256 Bit : float -> int
245static __inline__ __m256i __DEFAULT_FN_ATTRS256
246_mm256_cvtts_ps_epi32(__m256 __A) {
247 return ((__m256i)__builtin_ia32_vcvttps2dqs256_mask(
248 (__v8sf)__A, (__v8si)_mm256_undefined_si256(), (__mmask8)-1));
249}
250
251static __inline__ __m256i __DEFAULT_FN_ATTRS256
252_mm256_mask_cvtts_ps_epi32(__m256i __W, __mmask8 __U, __m256 __A) {
253 return ((__m256i)__builtin_ia32_vcvttps2dqs256_mask((__v8sf)__A, (__v8si)__W,
254 __U));
255}
256
257static __inline__ __m256i __DEFAULT_FN_ATTRS256
258_mm256_maskz_cvtts_ps_epi32(__mmask8 __U, __m256 __A) {
259 return ((__m256i)__builtin_ia32_vcvttps2dqs256_mask(
260 (__v8sf)__A, (__v8si)_mm256_setzero_si256(), __U));
261}
262
263// 128 Bit : float -> uint
264static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_cvtts_ps_epu32(__m128 __A) {
265 return ((__m128i)__builtin_ia32_vcvttps2udqs128_mask(
266 (__v4sf)__A, (__v4si)(__m128i)_mm_undefined_si128(), (__mmask8)(-1)));
267}
268
269static __inline__ __m128i __DEFAULT_FN_ATTRS128
270_mm_mask_cvtts_ps_epu32(__m128i __W, __mmask8 __U, __m128 __A) {
271 return ((__m128i)__builtin_ia32_vcvttps2udqs128_mask((__v4sf)__A, (__v4si)__W,
272 (__mmask8)__U));
273}
274
275static __inline__ __m128i __DEFAULT_FN_ATTRS128
276_mm_maskz_cvtts_ps_epu32(__mmask8 __U, __m128 __A) {
277 return ((__m128i)__builtin_ia32_vcvttps2udqs128_mask(
278 (__v4sf)__A, (__v4si)_mm_setzero_si128(), (__mmask8)__U));
279}
280
281// 256 Bit : float -> uint
282
283static __inline__ __m256i __DEFAULT_FN_ATTRS256
284_mm256_cvtts_ps_epu32(__m256 __A) {
285 return ((__m256i)__builtin_ia32_vcvttps2udqs256_mask(
286 (__v8sf)__A, (__v8si)_mm256_undefined_si256(), (__mmask8)-1));
287}
288
289static __inline__ __m256i __DEFAULT_FN_ATTRS256
290_mm256_mask_cvtts_ps_epu32(__m256i __W, __mmask8 __U, __m256 __A) {
291 return ((__m256i)__builtin_ia32_vcvttps2udqs256_mask((__v8sf)__A, (__v8si)__W,
292 __U));
293}
294
295static __inline__ __m256i __DEFAULT_FN_ATTRS256
296_mm256_maskz_cvtts_ps_epu32(__mmask8 __U, __m256 __A) {
297 return ((__m256i)__builtin_ia32_vcvttps2udqs256_mask(
298 (__v8sf)__A, (__v8si)_mm256_setzero_si256(), __U));
299}
300
301// 128 bit : float -> long
302static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_cvtts_ps_epi64(__m128 __A) {
303 return ((__m128i)__builtin_ia32_vcvttps2qqs128_mask(
304 (__v4sf)__A, (__v2di)_mm_undefined_si128(), (__mmask8)-1));
305}
306
307static __inline__ __m128i __DEFAULT_FN_ATTRS128
308_mm_mask_cvtts_ps_epi64(__m128i __W, __mmask8 __U, __m128 __A) {
309 return ((__m128i)__builtin_ia32_vcvttps2qqs128_mask(
310 (__v4sf)__A, (__v2di)(__m128i)__W, (__mmask8)__U));
311}
312
313static __inline__ __m128i __DEFAULT_FN_ATTRS128
314_mm_maskz_cvtts_ps_epi64(__mmask8 __U, __m128 __A) {
315 return ((__m128i)__builtin_ia32_vcvttps2qqs128_mask(
316 (__v4sf)__A, (__v2di)_mm_setzero_si128(), (__mmask8)__U));
317}
318// 256 bit : float -> long
319
320static __inline__ __m256i __DEFAULT_FN_ATTRS256
321_mm256_cvtts_ps_epi64(__m128 __A) {
322 return ((__m256i)__builtin_ia32_vcvttps2qqs256_mask(
323 (__v4sf)__A, (__v4di)_mm256_undefined_si256(), (__mmask8)-1));
324}
325static __inline__ __m256i __DEFAULT_FN_ATTRS256
326_mm256_mask_cvtts_ps_epi64(__m256i __W, __mmask8 __U, __m128 __A) {
327 return ((__m256i)__builtin_ia32_vcvttps2qqs256_mask((__v4sf)__A, (__v4di)__W,
328 __U));
329}
330
331static __inline__ __m256i __DEFAULT_FN_ATTRS256
332_mm256_maskz_cvtts_ps_epi64(__mmask8 __U, __m128 __A) {
333 return ((__m256i)__builtin_ia32_vcvttps2qqs256_mask(
334 (__v4sf)__A, (__v4di)_mm256_setzero_si256(), __U));
335}
336
337// 128 bit : float -> ulong
338static __inline__ __m128i __DEFAULT_FN_ATTRS128 _mm_cvtts_ps_epu64(__m128 __A) {
339 return ((__m128i)__builtin_ia32_vcvttps2uqqs128_mask(
340 (__v4sf)__A, (__v2di)_mm_undefined_si128(), (__mmask8)-1));
341}
342
343static __inline__ __m128i __DEFAULT_FN_ATTRS128
344_mm_mask_cvtts_ps_epu64(__m128i __W, __mmask8 __U, __m128 __A) {
345 return ((__m128i)__builtin_ia32_vcvttps2uqqs128_mask(
346 (__v4sf)__A, (__v2di)(__m128i)__W, (__mmask8)__U));
347}
348
349static __inline__ __m128i __DEFAULT_FN_ATTRS128
350_mm_maskz_cvtts_ps_epu64(__mmask8 __U, __m128 __A) {
351 return ((__m128i)__builtin_ia32_vcvttps2uqqs128_mask(
352 (__v4sf)__A, (__v2di)_mm_setzero_si128(), (__mmask8)__U));
353}
354// 256 bit : float -> ulong
355
356static __inline__ __m256i __DEFAULT_FN_ATTRS256
357_mm256_cvtts_ps_epu64(__m128 __A) {
358 return ((__m256i)__builtin_ia32_vcvttps2uqqs256_mask(
359 (__v4sf)__A, (__v4di)_mm256_undefined_si256(), (__mmask8)-1));
360}
361
362static __inline__ __m256i __DEFAULT_FN_ATTRS256
363_mm256_mask_cvtts_ps_epu64(__m256i __W, __mmask8 __U, __m128 __A) {
364 return ((__m256i)__builtin_ia32_vcvttps2uqqs256_mask((__v4sf)__A, (__v4di)__W,
365 __U));
366}
367
368static __inline__ __m256i __DEFAULT_FN_ATTRS256
369_mm256_maskz_cvtts_ps_epu64(__mmask8 __U, __m128 __A) {
370 return ((__m256i)__builtin_ia32_vcvttps2uqqs256_mask(
371 (__v4sf)__A, (__v4di)_mm256_setzero_si256(), __U));
372}
373
374#undef __DEFAULT_FN_ATTRS128
375#undef __DEFAULT_FN_ATTRS256
376#endif // __AVX10_2SATCVTDSINTRIN_H