1 /*===----- avx10_2_512satcvtdsintrin.h - AVX10_2_512SATCVTDS 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 *===-----------------------------------------------------------------------===
11 "Never use <avx10_2_512satcvtdsintrin.h> directly; include <immintrin.h> instead."
14 #ifndef __AVX10_2_512SATCVTDSINTRIN_H
15 #define __AVX10_2_512SATCVTDSINTRIN_H
17 /* Define the default attributes for the functions in this file. */
18 #define __DEFAULT_FN_ATTRS \
19 __attribute__((__always_inline__, __nodebug__, __target__("avx10.2-512"), \
20 __min_vector_width__(512)))
22 // 512 bit : Double -> Int
23 static __inline__ __m256i __DEFAULT_FN_ATTRS
_mm512_cvttspd_epi32(__m512d __A
) {
24 return ((__m256i
)__builtin_ia32_vcvttpd2dqs512_round_mask(
25 (__v8df
)__A
, (__v8si
)_mm256_undefined_si256(), (__mmask8
)-1,
26 _MM_FROUND_CUR_DIRECTION
));
29 static __inline__ __m256i __DEFAULT_FN_ATTRS
30 _mm512_mask_cvttspd_epi32(__m256i __W
, __mmask8 __U
, __m512d __A
) {
31 return ((__m256i
)__builtin_ia32_vcvttpd2dqs512_round_mask(
32 (__v8df
)__A
, (__v8si
)__W
, __U
, _MM_FROUND_CUR_DIRECTION
));
35 static __inline__ __m256i __DEFAULT_FN_ATTRS
36 _mm512_maskz_cvttspd_epi32(__mmask8 __U
, __m512d __A
) {
37 return ((__m256i
)__builtin_ia32_vcvttpd2dqs512_round_mask(
38 (__v8df
)__A
, (__v8si
)_mm256_setzero_si256(), __U
,
39 _MM_FROUND_CUR_DIRECTION
));
42 #define _mm512_cvtts_roundpd_epi32(__A, __R) \
43 ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( \
44 (__v8df)(__m512d)(__A), (__v8si)_mm256_undefined_si256(), \
45 (__mmask8) - 1, (const int)(__R)))
47 #define _mm512_mask_cvtts_roundpd_epi32(__W, __U, __A, __R) \
48 ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( \
49 (__v8df)(__m512d)(__A), (__v8si)(__m256i)(__W), (__mmask8)(__U), \
52 #define _mm512_maskz_cvtts_roundpd_epi32(__U, __A, __R) \
53 ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask( \
54 (__v8df)(__m512d)(__A), (__v8si)_mm256_setzero_si256(), (__mmask8)(__U), \
57 // 512 bit : Double -> uInt
58 static __inline__ __m256i __DEFAULT_FN_ATTRS
_mm512_cvttspd_epu32(__m512d __A
) {
59 return ((__m256i
)__builtin_ia32_vcvttpd2udqs512_round_mask(
60 (__v8df
)__A
, (__v8si
)_mm256_undefined_si256(), (__mmask8
)-1,
61 _MM_FROUND_CUR_DIRECTION
));
64 static __inline__ __m256i __DEFAULT_FN_ATTRS
65 _mm512_mask_cvttspd_epu32(__m256i __W
, __mmask8 __U
, __m512d __A
) {
66 return ((__m256i
)__builtin_ia32_vcvttpd2udqs512_round_mask(
67 (__v8df
)__A
, (__v8si
)__W
, __U
, _MM_FROUND_CUR_DIRECTION
));
70 static __inline__ __m256i __DEFAULT_FN_ATTRS
71 _mm512_maskz_cvttspd_epu32(__mmask8 __U
, __m512d __A
) {
72 return ((__m256i
)__builtin_ia32_vcvttpd2udqs512_round_mask(
73 (__v8df
)__A
, (__v8si
)_mm256_setzero_si256(), __U
,
74 _MM_FROUND_CUR_DIRECTION
));
77 #define _mm512_cvtts_roundpd_epu32(__A, __R) \
78 ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( \
79 (__v8df)(__m512d)(__A), (__v8si)_mm256_undefined_si256(), \
80 (__mmask8) - 1, (const int)(__R)))
82 #define _mm512_mask_cvtts_roundpd_epu32(__W, __U, __A, __R) \
83 ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( \
84 (__v8df)(__m512d)(__A), (__v8si)(__m256i)(__W), (__mmask8)(__U), \
87 #define _mm512_maskz_cvtts_roundpd_epu32(__U, __A, __R) \
88 ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask( \
89 (__v8df)(__m512d)(__A), (__v8si)_mm256_setzero_si256(), (__mmask8)(__U), \
92 // 512 bit : Double -> Long
94 static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_cvttspd_epi64(__m512d __A
) {
95 return ((__m512i
)__builtin_ia32_vcvttpd2qqs512_round_mask(
96 (__v8df
)__A
, (__v8di
)_mm512_undefined_epi32(), (__mmask8
)-1,
97 _MM_FROUND_CUR_DIRECTION
));
99 static __inline__ __m512i __DEFAULT_FN_ATTRS
100 _mm512_mask_cvttspd_epi64(__m512i __W
, __mmask8 __U
, __m512d __A
) {
101 return ((__m512i
)__builtin_ia32_vcvttpd2qqs512_round_mask(
102 (__v8df
)__A
, (__v8di
)__W
, __U
, _MM_FROUND_CUR_DIRECTION
));
104 static __inline__ __m512i __DEFAULT_FN_ATTRS
105 _mm512_maskz_cvttspd_epi64(__mmask8 __U
, __m512d __A
) {
106 return ((__m512i
)__builtin_ia32_vcvttpd2qqs512_round_mask(
107 (__v8df
)__A
, (__v8di
)_mm512_setzero_si512(), __U
,
108 _MM_FROUND_CUR_DIRECTION
));
111 #define _mm512_cvtts_roundpd_epi64(__A, __R) \
112 ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( \
113 (__v8df)(__m512d)(__A), (__v8di)_mm512_undefined_epi32(), \
114 (__mmask8) - 1, (const int)(__R)))
116 #define _mm512_mask_cvtts_roundpd_epi64(__W, __U, __A, __R) \
117 ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( \
118 (__v8df)(__m512d)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \
121 #define _mm512_maskz_cvtts_roundpd_epi64(__U, __A, __R) \
122 ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask( \
123 (__v8df)(__m512d)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \
126 // 512 bit : Double -> ULong
128 static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_cvttspd_epu64(__m512d __A
) {
129 return ((__m512i
)__builtin_ia32_vcvttpd2uqqs512_round_mask(
130 (__v8df
)__A
, (__v8di
)_mm512_undefined_epi32(), (__mmask8
)-1,
131 _MM_FROUND_CUR_DIRECTION
));
134 static __inline__ __m512i __DEFAULT_FN_ATTRS
135 _mm512_mask_cvttspd_epu64(__m512i __W
, __mmask8 __U
, __m512d __A
) {
136 return ((__m512i
)__builtin_ia32_vcvttpd2uqqs512_round_mask(
137 (__v8df
)__A
, (__v8di
)__W
, __U
, _MM_FROUND_CUR_DIRECTION
));
140 static __inline__ __m512i __DEFAULT_FN_ATTRS
141 _mm512_maskz_cvttspd_epu64(__mmask8 __U
, __m512d __A
) {
142 return ((__m512i
)__builtin_ia32_vcvttpd2uqqs512_round_mask(
143 (__v8df
)__A
, (__v8di
)_mm512_setzero_si512(), __U
,
144 _MM_FROUND_CUR_DIRECTION
));
147 #define _mm512_cvtts_roundpd_epu64(__A, __R) \
148 ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( \
149 (__v8df)(__m512d)(__A), (__v8di)_mm512_undefined_epi32(), \
150 (__mmask8) - 1, (const int)(__R)))
152 #define _mm512_mask_cvtts_roundpd_epu64(__W, __U, __A, __R) \
153 ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( \
154 (__v8df)(__m512d)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \
157 #define _mm512_maskz_cvtts_roundpd_epu64(__U, __A, __R) \
158 ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask( \
159 (__v8df)(__m512d)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \
162 // 512 bit: Float -> int
163 static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_cvttsps_epi32(__m512 __A
) {
164 return ((__m512i
)__builtin_ia32_vcvttps2dqs512_round_mask(
165 (__v16sf
)(__A
), (__v16si
)_mm512_undefined_epi32(), (__mmask16
)-1,
166 _MM_FROUND_CUR_DIRECTION
));
169 static __inline__ __m512i __DEFAULT_FN_ATTRS
170 _mm512_mask_cvttsps_epi32(__m512i __W
, __mmask16 __U
, __m512 __A
) {
171 return ((__m512i
)__builtin_ia32_vcvttps2dqs512_round_mask(
172 (__v16sf
)(__A
), (__v16si
)(__W
), __U
, _MM_FROUND_CUR_DIRECTION
));
175 static __inline__ __m512i __DEFAULT_FN_ATTRS
176 _mm512_maskz_cvttsps_epi32(__mmask16 __U
, __m512 __A
) {
177 return ((__m512i
)__builtin_ia32_vcvttps2dqs512_round_mask(
178 (__v16sf
)(__A
), (__v16si
)_mm512_setzero_si512(), __U
,
179 _MM_FROUND_CUR_DIRECTION
));
182 #define _mm512_cvtts_roundps_epi32(__A, __R) \
183 ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( \
184 (__v16sf)(__m512)(__A), (__v16si)_mm512_undefined_epi32(), \
185 (__mmask16) - 1, (const int)(__R)))
187 #define _mm512_mask_cvtts_roundps_epi32(__W, __U, __A, __R) \
188 ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( \
189 (__v16sf)(__m512)(__A), (__v16si)(__m512i)(__W), (__mmask16)(__U), \
192 #define _mm512_maskz_cvtts_roundps_epi32(__U, __A, __R) \
193 ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask( \
194 (__v16sf)(__m512)(__A), (__v16si)_mm512_setzero_si512(), \
195 (__mmask16)(__U), (const int)(__R)))
197 // 512 bit: Float -> uint
198 static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_cvttsps_epu32(__m512 __A
) {
199 return ((__m512i
)__builtin_ia32_vcvttps2udqs512_round_mask(
200 (__v16sf
)(__A
), (__v16si
)_mm512_undefined_epi32(), (__mmask16
)-1,
201 _MM_FROUND_CUR_DIRECTION
));
204 static __inline__ __m512i __DEFAULT_FN_ATTRS
205 _mm512_mask_cvttsps_epu32(__m512i __W
, __mmask16 __U
, __m512 __A
) {
206 return ((__m512i
)__builtin_ia32_vcvttps2udqs512_round_mask(
207 (__v16sf
)(__A
), (__v16si
)(__W
), __U
, _MM_FROUND_CUR_DIRECTION
));
210 static __inline__ __m512i __DEFAULT_FN_ATTRS
211 _mm512_maskz_cvttsps_epu32(__mmask16 __U
, __m512 __A
) {
212 return ((__m512i
)__builtin_ia32_vcvttps2udqs512_round_mask(
213 (__v16sf
)(__A
), (__v16si
)_mm512_setzero_si512(), __U
,
214 _MM_FROUND_CUR_DIRECTION
));
217 #define _mm512_cvtts_roundps_epu32(__A, __R) \
218 ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( \
219 (__v16sf)(__m512)(__A), (__v16si)_mm512_undefined_epi32(), \
220 (__mmask16) - 1, (const int)(__R)))
222 #define _mm512_mask_cvtts_roundps_epu32(__W, __U, __A, __R) \
223 ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( \
224 (__v16sf)(__m512)(__A), (__v16si)(__m512i)(__W), (__mmask16)(__U), \
227 #define _mm512_maskz_cvtts_roundps_epu32(__U, __A, __R) \
228 ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask( \
229 (__v16sf)(__m512)(__A), (__v16si)_mm512_setzero_si512(), \
230 (__mmask16)(__U), (const int)(__R)))
232 // 512 bit : float -> long
233 static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_cvttsps_epi64(__m256 __A
) {
234 return ((__m512i
)__builtin_ia32_vcvttps2qqs512_round_mask(
235 (__v8sf
)__A
, (__v8di
)_mm512_undefined_epi32(), (__mmask8
)-1,
236 _MM_FROUND_CUR_DIRECTION
));
239 static __inline__ __m512i __DEFAULT_FN_ATTRS
240 _mm512_mask_cvttsps_epi64(__m512i __W
, __mmask8 __U
, __m256 __A
) {
241 return ((__m512i
)__builtin_ia32_vcvttps2qqs512_round_mask(
242 (__v8sf
)__A
, (__v8di
)__W
, __U
, _MM_FROUND_CUR_DIRECTION
));
245 static __inline__ __m512i __DEFAULT_FN_ATTRS
246 _mm512_maskz_cvttsps_epi64(__mmask8 __U
, __m256 __A
) {
247 return ((__m512i
)__builtin_ia32_vcvttps2qqs512_round_mask(
248 (__v8sf
)__A
, (__v8di
)_mm512_setzero_si512(), __U
,
249 _MM_FROUND_CUR_DIRECTION
));
252 #define _mm512_cvtts_roundps_epi64(__A, __R) \
253 ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( \
254 (__v8sf)(__m256)(__A), (__v8di)_mm512_undefined_epi32(), (__mmask8) - 1, \
257 #define _mm512_mask_cvtts_roundps_epi64(__W, __U, __A, __R) \
258 ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( \
259 (__v8sf)(__m256)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \
262 #define _mm512_maskz_cvtts_roundps_epi64(__U, __A, __R) \
263 ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask( \
264 (__v8sf)(__m256)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \
267 // 512 bit : float -> ulong
268 static __inline__ __m512i __DEFAULT_FN_ATTRS
_mm512_cvttsps_epu64(__m256 __A
) {
269 return ((__m512i
)__builtin_ia32_vcvttps2uqqs512_round_mask(
270 (__v8sf
)__A
, (__v8di
)_mm512_undefined_epi32(), (__mmask8
)-1,
271 _MM_FROUND_CUR_DIRECTION
));
274 static __inline__ __m512i __DEFAULT_FN_ATTRS
275 _mm512_mask_cvttsps_epu64(__m512i __W
, __mmask8 __U
, __m256 __A
) {
276 return ((__m512i
)__builtin_ia32_vcvttps2uqqs512_round_mask(
277 (__v8sf
)__A
, (__v8di
)__W
, __U
, _MM_FROUND_CUR_DIRECTION
));
280 static __inline__ __m512i __DEFAULT_FN_ATTRS
281 _mm512_maskz_cvttsps_epu64(__mmask8 __U
, __m256 __A
) {
282 return ((__m512i
)__builtin_ia32_vcvttps2uqqs512_round_mask(
283 (__v8sf
)__A
, (__v8di
)_mm512_setzero_si512(), __U
,
284 _MM_FROUND_CUR_DIRECTION
));
287 #define _mm512_cvtts_roundps_epu64(__A, __R) \
288 ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( \
289 (__v8sf)(__m256)(__A), (__v8di)_mm512_undefined_epi32(), (__mmask8) - 1, \
292 #define _mm512_mask_cvtts_roundps_epu64(__W, __U, __A, __R) \
293 ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( \
294 (__v8sf)(__m256)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U), \
297 #define _mm512_maskz_cvtts_roundps_epu64(__U, __A, __R) \
298 ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask( \
299 (__v8sf)(__m256)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \
302 #undef __DEFAULT_FN_ATTRS
303 #endif // __AVX10_2_512SATCVTDSINTRIN_H