master
  1/*===----- avx10_2_512satcvtdsintrin.h - AVX10_2_512SATCVTDS 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                                                                         \
 11    "Never use <avx10_2_512satcvtdsintrin.h> directly; include <immintrin.h> instead."
 12#endif
 13
 14#ifndef __AVX10_2_512SATCVTDSINTRIN_H
 15#define __AVX10_2_512SATCVTDSINTRIN_H
 16
 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)))
 21
 22// 512 bit : Double -> Int
 23static __inline__ __m256i __DEFAULT_FN_ATTRS
 24_mm512_cvtts_pd_epi32(__m512d __A) {
 25  return ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask(
 26      (__v8df)__A, (__v8si)_mm256_undefined_si256(), (__mmask8)-1,
 27      _MM_FROUND_CUR_DIRECTION));
 28}
 29
 30static __inline__ __m256i __DEFAULT_FN_ATTRS
 31_mm512_mask_cvtts_pd_epi32(__m256i __W, __mmask8 __U, __m512d __A) {
 32  return ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask(
 33      (__v8df)__A, (__v8si)__W, __U, _MM_FROUND_CUR_DIRECTION));
 34}
 35
 36static __inline__ __m256i __DEFAULT_FN_ATTRS
 37_mm512_maskz_cvtts_pd_epi32(__mmask8 __U, __m512d __A) {
 38  return ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask(
 39      (__v8df)__A, (__v8si)_mm256_setzero_si256(), __U,
 40      _MM_FROUND_CUR_DIRECTION));
 41}
 42
 43#define _mm512_cvtts_roundpd_epi32(__A, __R)                                   \
 44  ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask(                          \
 45      (__v8df)(__m512d)(__A), (__v8si)_mm256_undefined_si256(),                \
 46      (__mmask8) - 1, (const int)(__R)))
 47
 48#define _mm512_mask_cvtts_roundpd_epi32(__W, __U, __A, __R)                    \
 49  ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask(                          \
 50      (__v8df)(__m512d)(__A), (__v8si)(__m256i)(__W), (__mmask8)(__U),         \
 51      (const int)(__R)))
 52
 53#define _mm512_maskz_cvtts_roundpd_epi32(__U, __A, __R)                        \
 54  ((__m256i)__builtin_ia32_vcvttpd2dqs512_round_mask(                          \
 55      (__v8df)(__m512d)(__A), (__v8si)_mm256_setzero_si256(), (__mmask8)(__U), \
 56      (const int)(__R)))
 57
 58// 512 bit : Double -> uInt
 59static __inline__ __m256i __DEFAULT_FN_ATTRS
 60_mm512_cvtts_pd_epu32(__m512d __A) {
 61  return ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask(
 62      (__v8df)__A, (__v8si)_mm256_undefined_si256(), (__mmask8)-1,
 63      _MM_FROUND_CUR_DIRECTION));
 64}
 65
 66static __inline__ __m256i __DEFAULT_FN_ATTRS
 67_mm512_mask_cvtts_pd_epu32(__m256i __W, __mmask8 __U, __m512d __A) {
 68  return ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask(
 69      (__v8df)__A, (__v8si)__W, __U, _MM_FROUND_CUR_DIRECTION));
 70}
 71
 72static __inline__ __m256i __DEFAULT_FN_ATTRS
 73_mm512_maskz_cvtts_pd_epu32(__mmask8 __U, __m512d __A) {
 74  return ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask(
 75      (__v8df)__A, (__v8si)_mm256_setzero_si256(), __U,
 76      _MM_FROUND_CUR_DIRECTION));
 77}
 78
 79#define _mm512_cvtts_roundpd_epu32(__A, __R)                                   \
 80  ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask(                         \
 81      (__v8df)(__m512d)(__A), (__v8si)_mm256_undefined_si256(),                \
 82      (__mmask8) - 1, (const int)(__R)))
 83
 84#define _mm512_mask_cvtts_roundpd_epu32(__W, __U, __A, __R)                    \
 85  ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask(                         \
 86      (__v8df)(__m512d)(__A), (__v8si)(__m256i)(__W), (__mmask8)(__U),         \
 87      (const int)(__R)))
 88
 89#define _mm512_maskz_cvtts_roundpd_epu32(__U, __A, __R)                        \
 90  ((__m256i)__builtin_ia32_vcvttpd2udqs512_round_mask(                         \
 91      (__v8df)(__m512d)(__A), (__v8si)_mm256_setzero_si256(), (__mmask8)(__U), \
 92      (const int)(__R)))
 93
 94//  512 bit : Double -> Long
 95
 96static __inline__ __m512i __DEFAULT_FN_ATTRS
 97_mm512_cvtts_pd_epi64(__m512d __A) {
 98  return ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask(
 99      (__v8df)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1,
100      _MM_FROUND_CUR_DIRECTION));
101}
102static __inline__ __m512i __DEFAULT_FN_ATTRS
103_mm512_mask_cvtts_pd_epi64(__m512i __W, __mmask8 __U, __m512d __A) {
104  return ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask(
105      (__v8df)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION));
106}
107static __inline__ __m512i __DEFAULT_FN_ATTRS
108_mm512_maskz_cvtts_pd_epi64(__mmask8 __U, __m512d __A) {
109  return ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask(
110      (__v8df)__A, (__v8di)_mm512_setzero_si512(), __U,
111      _MM_FROUND_CUR_DIRECTION));
112}
113
114#define _mm512_cvtts_roundpd_epi64(__A, __R)                                   \
115  ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask(                          \
116      (__v8df)(__m512d)(__A), (__v8di)_mm512_undefined_epi32(),                \
117      (__mmask8) - 1, (const int)(__R)))
118
119#define _mm512_mask_cvtts_roundpd_epi64(__W, __U, __A, __R)                    \
120  ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask(                          \
121      (__v8df)(__m512d)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U),         \
122      (const int)(__R)))
123
124#define _mm512_maskz_cvtts_roundpd_epi64(__U, __A, __R)                        \
125  ((__m512i)__builtin_ia32_vcvttpd2qqs512_round_mask(                          \
126      (__v8df)(__m512d)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \
127      (const int)(__R)))
128
129// 512 bit : Double -> ULong
130
131static __inline__ __m512i __DEFAULT_FN_ATTRS
132_mm512_cvtts_pd_epu64(__m512d __A) {
133  return ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask(
134      (__v8df)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1,
135      _MM_FROUND_CUR_DIRECTION));
136}
137
138static __inline__ __m512i __DEFAULT_FN_ATTRS
139_mm512_mask_cvtts_pd_epu64(__m512i __W, __mmask8 __U, __m512d __A) {
140  return ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask(
141      (__v8df)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION));
142}
143
144static __inline__ __m512i __DEFAULT_FN_ATTRS
145_mm512_maskz_cvtts_pd_epu64(__mmask8 __U, __m512d __A) {
146  return ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask(
147      (__v8df)__A, (__v8di)_mm512_setzero_si512(), __U,
148      _MM_FROUND_CUR_DIRECTION));
149}
150
151#define _mm512_cvtts_roundpd_epu64(__A, __R)                                   \
152  ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask(                         \
153      (__v8df)(__m512d)(__A), (__v8di)_mm512_undefined_epi32(),                \
154      (__mmask8) - 1, (const int)(__R)))
155
156#define _mm512_mask_cvtts_roundpd_epu64(__W, __U, __A, __R)                    \
157  ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask(                         \
158      (__v8df)(__m512d)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U),         \
159      (const int)(__R)))
160
161#define _mm512_maskz_cvtts_roundpd_epu64(__U, __A, __R)                        \
162  ((__m512i)__builtin_ia32_vcvttpd2uqqs512_round_mask(                         \
163      (__v8df)(__m512d)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U), \
164      (const int)(__R)))
165
166// 512 bit: Float -> int
167static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvtts_ps_epi32(__m512 __A) {
168  return ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask(
169      (__v16sf)(__A), (__v16si)_mm512_undefined_epi32(), (__mmask16)-1,
170      _MM_FROUND_CUR_DIRECTION));
171}
172
173static __inline__ __m512i __DEFAULT_FN_ATTRS
174_mm512_mask_cvtts_ps_epi32(__m512i __W, __mmask16 __U, __m512 __A) {
175  return ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask(
176      (__v16sf)(__A), (__v16si)(__W), __U, _MM_FROUND_CUR_DIRECTION));
177}
178
179static __inline__ __m512i __DEFAULT_FN_ATTRS
180_mm512_maskz_cvtts_ps_epi32(__mmask16 __U, __m512 __A) {
181  return ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask(
182      (__v16sf)(__A), (__v16si)_mm512_setzero_si512(), __U,
183      _MM_FROUND_CUR_DIRECTION));
184}
185
186#define _mm512_cvtts_roundps_epi32(__A, __R)                                   \
187  ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask(                          \
188      (__v16sf)(__m512)(__A), (__v16si)_mm512_undefined_epi32(),               \
189      (__mmask16) - 1, (const int)(__R)))
190
191#define _mm512_mask_cvtts_roundps_epi32(__W, __U, __A, __R)                    \
192  ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask(                          \
193      (__v16sf)(__m512)(__A), (__v16si)(__m512i)(__W), (__mmask16)(__U),       \
194      (const int)(__R)))
195
196#define _mm512_maskz_cvtts_roundps_epi32(__U, __A, __R)                        \
197  ((__m512i)__builtin_ia32_vcvttps2dqs512_round_mask(                          \
198      (__v16sf)(__m512)(__A), (__v16si)_mm512_setzero_si512(),                 \
199      (__mmask16)(__U), (const int)(__R)))
200
201// 512 bit: Float -> uint
202static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvtts_ps_epu32(__m512 __A) {
203  return ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask(
204      (__v16sf)(__A), (__v16si)_mm512_undefined_epi32(), (__mmask16)-1,
205      _MM_FROUND_CUR_DIRECTION));
206}
207
208static __inline__ __m512i __DEFAULT_FN_ATTRS
209_mm512_mask_cvtts_ps_epu32(__m512i __W, __mmask16 __U, __m512 __A) {
210  return ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask(
211      (__v16sf)(__A), (__v16si)(__W), __U, _MM_FROUND_CUR_DIRECTION));
212}
213
214static __inline__ __m512i __DEFAULT_FN_ATTRS
215_mm512_maskz_cvtts_ps_epu32(__mmask16 __U, __m512 __A) {
216  return ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask(
217      (__v16sf)(__A), (__v16si)_mm512_setzero_si512(), __U,
218      _MM_FROUND_CUR_DIRECTION));
219}
220
221#define _mm512_cvtts_roundps_epu32(__A, __R)                                   \
222  ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask(                         \
223      (__v16sf)(__m512)(__A), (__v16si)_mm512_undefined_epi32(),               \
224      (__mmask16) - 1, (const int)(__R)))
225
226#define _mm512_mask_cvtts_roundps_epu32(__W, __U, __A, __R)                    \
227  ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask(                         \
228      (__v16sf)(__m512)(__A), (__v16si)(__m512i)(__W), (__mmask16)(__U),       \
229      (const int)(__R)))
230
231#define _mm512_maskz_cvtts_roundps_epu32(__U, __A, __R)                        \
232  ((__m512i)__builtin_ia32_vcvttps2udqs512_round_mask(                         \
233      (__v16sf)(__m512)(__A), (__v16si)_mm512_setzero_si512(),                 \
234      (__mmask16)(__U), (const int)(__R)))
235
236// 512 bit : float -> long
237static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvtts_ps_epi64(__m256 __A) {
238  return ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask(
239      (__v8sf)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1,
240      _MM_FROUND_CUR_DIRECTION));
241}
242
243static __inline__ __m512i __DEFAULT_FN_ATTRS
244_mm512_mask_cvtts_ps_epi64(__m512i __W, __mmask8 __U, __m256 __A) {
245  return ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask(
246      (__v8sf)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION));
247}
248
249static __inline__ __m512i __DEFAULT_FN_ATTRS
250_mm512_maskz_cvtts_ps_epi64(__mmask8 __U, __m256 __A) {
251  return ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask(
252      (__v8sf)__A, (__v8di)_mm512_setzero_si512(), __U,
253      _MM_FROUND_CUR_DIRECTION));
254}
255
256#define _mm512_cvtts_roundps_epi64(__A, __R)                                   \
257  ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask(                          \
258      (__v8sf)(__m256)(__A), (__v8di)_mm512_undefined_epi32(), (__mmask8) - 1, \
259      (const int)(__R)))
260
261#define _mm512_mask_cvtts_roundps_epi64(__W, __U, __A, __R)                    \
262  ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask(                          \
263      (__v8sf)(__m256)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U),          \
264      (const int)(__R)))
265
266#define _mm512_maskz_cvtts_roundps_epi64(__U, __A, __R)                        \
267  ((__m512i)__builtin_ia32_vcvttps2qqs512_round_mask(                          \
268      (__v8sf)(__m256)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U),  \
269      (const int)(__R)))
270
271// 512 bit : float -> ulong
272static __inline__ __m512i __DEFAULT_FN_ATTRS _mm512_cvtts_ps_epu64(__m256 __A) {
273  return ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask(
274      (__v8sf)__A, (__v8di)_mm512_undefined_epi32(), (__mmask8)-1,
275      _MM_FROUND_CUR_DIRECTION));
276}
277
278static __inline__ __m512i __DEFAULT_FN_ATTRS
279_mm512_mask_cvtts_ps_epu64(__m512i __W, __mmask8 __U, __m256 __A) {
280  return ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask(
281      (__v8sf)__A, (__v8di)__W, __U, _MM_FROUND_CUR_DIRECTION));
282}
283
284static __inline__ __m512i __DEFAULT_FN_ATTRS
285_mm512_maskz_cvtts_ps_epu64(__mmask8 __U, __m256 __A) {
286  return ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask(
287      (__v8sf)__A, (__v8di)_mm512_setzero_si512(), __U,
288      _MM_FROUND_CUR_DIRECTION));
289}
290
291#define _mm512_cvtts_roundps_epu64(__A, __R)                                   \
292  ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask(                         \
293      (__v8sf)(__m256)(__A), (__v8di)_mm512_undefined_epi32(), (__mmask8) - 1, \
294      (const int)(__R)))
295
296#define _mm512_mask_cvtts_roundps_epu64(__W, __U, __A, __R)                    \
297  ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask(                         \
298      (__v8sf)(__m256)(__A), (__v8di)(__m512i)(__W), (__mmask8)(__U),          \
299      (const int)(__R)))
300
301#define _mm512_maskz_cvtts_roundps_epu64(__U, __A, __R)                        \
302  ((__m512i)__builtin_ia32_vcvttps2uqqs512_round_mask(                         \
303      (__v8sf)(__m256)(__A), (__v8di)_mm512_setzero_si512(), (__mmask8)(__U),  \
304      (const int)(__R)))
305
306#undef __DEFAULT_FN_ATTRS
307#endif // __AVX10_2_512SATCVTDSINTRIN_H