blob: d16957880ea6dd98b8d767c779431fe563c6da37 [file] [log] [blame]
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +00001/*===---- immintrin.h - Intel intrinsics -----------------------------------===
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 * THE SOFTWARE.
20 *
21 *===-----------------------------------------------------------------------===
22 */
23
24#ifndef __IMMINTRIN_H
25#define __IMMINTRIN_H
26
Nico Weber379a1952016-05-16 18:14:07 +000027#if !defined(_MSC_VER) || __has_feature(modules) || defined(__MMX__)
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000028#include <mmintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000029#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000030
Nico Weber379a1952016-05-16 18:14:07 +000031#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSE__)
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000032#include <xmmintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000033#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000034
Nico Weber379a1952016-05-16 18:14:07 +000035#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSE2__)
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000036#include <emmintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000037#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000038
Nico Weber379a1952016-05-16 18:14:07 +000039#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSE3__)
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000040#include <pmmintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000041#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000042
Nico Weber379a1952016-05-16 18:14:07 +000043#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSSE3__)
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000044#include <tmmintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000045#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000046
Nico Weber379a1952016-05-16 18:14:07 +000047#if !defined(_MSC_VER) || __has_feature(modules) || \
48 (defined(__SSE4_2__) || defined(__SSE4_1__))
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000049#include <smmintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000050#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000051
Nico Weber379a1952016-05-16 18:14:07 +000052#if !defined(_MSC_VER) || __has_feature(modules) || \
53 (defined(__AES__) || defined(__PCLMUL__))
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000054#include <wmmintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000055#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000056
Michael Zuckermanb9206652016-07-05 15:56:03 +000057#if !defined(_MSC_VER) || __has_feature(modules) || defined(__CLFLUSHOPT__)
58#include <clflushoptintrin.h>
59#endif
60
Craig Topper89cd7532017-10-12 18:57:15 +000061#if !defined(_MSC_VER) || __has_feature(modules) || defined(__CLWB__)
62#include <clwbintrin.h>
63#endif
64
Nico Weber379a1952016-05-16 18:14:07 +000065#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX__)
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000066#include <avxintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000067#endif
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +000068
Nico Weber379a1952016-05-16 18:14:07 +000069#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX2__)
Craig Topperdec792e2011-12-19 05:04:33 +000070#include <avx2intrin.h>
Craig Topperdec792e2011-12-19 05:04:33 +000071
Paul Robinson941bc912015-12-02 18:41:52 +000072/* The 256-bit versions of functions in f16cintrin.h.
73 Intel documents these as being in immintrin.h, and
74 they depend on typedefs from avxintrin.h. */
75
Ekaterina Romanovabf667b22016-11-20 08:35:05 +000076/// \brief Converts a 256-bit vector of [8 x float] into a 128-bit vector
77/// containing 16-bit half-precision float values.
78///
79/// \headerfile <x86intrin.h>
80///
81/// \code
82/// __m128i _mm256_cvtps_ph(__m256 a, const int imm);
83/// \endcode
84///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +000085/// This intrinsic corresponds to the <c> VCVTPS2PH </c> instruction.
Ekaterina Romanovabf667b22016-11-20 08:35:05 +000086///
87/// \param a
88/// A 256-bit vector containing 32-bit single-precision float values to be
89/// converted to 16-bit half-precision float values.
90/// \param imm
Ekaterina Romanovadffe45b2016-12-27 00:49:38 +000091/// An immediate value controlling rounding using bits [2:0]: \n
92/// 000: Nearest \n
93/// 001: Down \n
94/// 010: Up \n
95/// 011: Truncate \n
Ekaterina Romanovabf667b22016-11-20 08:35:05 +000096/// 1XX: Use MXCSR.RC for rounding
97/// \returns A 128-bit vector containing the converted 16-bit half-precision
98/// float values.
Paul Robinson941bc912015-12-02 18:41:52 +000099#define _mm256_cvtps_ph(a, imm) __extension__ ({ \
100 (__m128i)__builtin_ia32_vcvtps2ph256((__v8sf)(__m256)(a), (imm)); })
101
Ekaterina Romanovabf667b22016-11-20 08:35:05 +0000102/// \brief Converts a 128-bit vector containing 16-bit half-precision float
103/// values into a 256-bit vector of [8 x float].
104///
105/// \headerfile <x86intrin.h>
106///
Ekaterina Romanova0c1c3bb2016-12-09 18:35:50 +0000107/// This intrinsic corresponds to the <c> VCVTPH2PS </c> instruction.
Ekaterina Romanovabf667b22016-11-20 08:35:05 +0000108///
109/// \param __a
110/// A 128-bit vector containing 16-bit half-precision float values to be
111/// converted to 32-bit single-precision float values.
112/// \returns A vector of [8 x float] containing the converted 32-bit
113/// single-precision float values.
Paul Robinson941bc912015-12-02 18:41:52 +0000114static __inline __m256 __attribute__((__always_inline__, __nodebug__, __target__("f16c")))
115_mm256_cvtph_ps(__m128i __a)
116{
117 return (__m256)__builtin_ia32_vcvtph2ps256((__v8hi)__a);
118}
Nico Weber379a1952016-05-16 18:14:07 +0000119#endif /* __AVX2__ */
Paul Robinson941bc912015-12-02 18:41:52 +0000120
Nico Weber379a1952016-05-16 18:14:07 +0000121#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI__)
Craig Topperf2855ad2011-12-25 06:25:37 +0000122#include <bmiintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000123#endif
Craig Topperf2855ad2011-12-25 06:25:37 +0000124
Nico Weber379a1952016-05-16 18:14:07 +0000125#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI2__)
Craig Topperc334dd62011-12-26 02:31:10 +0000126#include <bmi2intrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000127#endif
Craig Topperc334dd62011-12-26 02:31:10 +0000128
Nico Weber379a1952016-05-16 18:14:07 +0000129#if !defined(_MSC_VER) || __has_feature(modules) || defined(__LZCNT__)
Craig Topperf2855ad2011-12-25 06:25:37 +0000130#include <lzcntintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000131#endif
Craig Topperf2855ad2011-12-25 06:25:37 +0000132
Nico Weber379a1952016-05-16 18:14:07 +0000133#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FMA__)
Craig Topper2b1eda32012-06-04 03:42:47 +0000134#include <fmaintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000135#endif
Craig Topper2b1eda32012-06-04 03:42:47 +0000136
Nico Weber379a1952016-05-16 18:14:07 +0000137#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512F__)
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +0000138#include <avx512fintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000139#endif
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +0000140
Nico Weber379a1952016-05-16 18:14:07 +0000141#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VL__)
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000142#include <avx512vlintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000143#endif
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000144
Nico Weber379a1952016-05-16 18:14:07 +0000145#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512BW__)
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000146#include <avx512bwintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000147#endif
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000148
Nico Weber379a1952016-05-16 18:14:07 +0000149#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512CD__)
Asaf Badouha45b7ca2015-06-29 12:51:53 +0000150#include <avx512cdintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000151#endif
Asaf Badouha45b7ca2015-06-29 12:51:53 +0000152
Oren Ben Simhon140c1fb2017-05-25 13:44:11 +0000153#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VPOPCNTDQ__)
154#include <avx512vpopcntdqintrin.h>
155#endif
156
Nico Weber379a1952016-05-16 18:14:07 +0000157#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512DQ__)
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000158#include <avx512dqintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000159#endif
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000160
Nico Weber379a1952016-05-16 18:14:07 +0000161#if !defined(_MSC_VER) || __has_feature(modules) || \
162 (defined(__AVX512VL__) && defined(__AVX512BW__))
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000163#include <avx512vlbwintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000164#endif
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000165
Nico Weber379a1952016-05-16 18:14:07 +0000166#if !defined(_MSC_VER) || __has_feature(modules) || \
167 (defined(__AVX512VL__) && defined(__AVX512CD__))
Michael Zuckerman8c2900f2016-04-27 11:43:14 +0000168#include <avx512vlcdintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000169#endif
Michael Zuckerman8c2900f2016-04-27 11:43:14 +0000170
Nico Weber379a1952016-05-16 18:14:07 +0000171#if !defined(_MSC_VER) || __has_feature(modules) || \
172 (defined(__AVX512VL__) && defined(__AVX512DQ__))
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000173#include <avx512vldqintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000174#endif
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000175
Nico Weber379a1952016-05-16 18:14:07 +0000176#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512ER__)
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +0000177#include <avx512erintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000178#endif
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +0000179
Nico Weber379a1952016-05-16 18:14:07 +0000180#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512IFMA__)
Michael Zuckerman0190c652016-03-07 09:55:55 +0000181#include <avx512ifmaintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000182#endif
Michael Zuckerman0190c652016-03-07 09:55:55 +0000183
Nico Weber379a1952016-05-16 18:14:07 +0000184#if !defined(_MSC_VER) || __has_feature(modules) || \
185 (defined(__AVX512IFMA__) && defined(__AVX512VL__))
Michael Zuckerman0190c652016-03-07 09:55:55 +0000186#include <avx512ifmavlintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000187#endif
Michael Zuckerman0190c652016-03-07 09:55:55 +0000188
Nico Weber379a1952016-05-16 18:14:07 +0000189#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VBMI__)
Michael Zuckerman9f338482016-03-07 17:04:11 +0000190#include <avx512vbmiintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000191#endif
Michael Zuckerman9f338482016-03-07 17:04:11 +0000192
Nico Weber379a1952016-05-16 18:14:07 +0000193#if !defined(_MSC_VER) || __has_feature(modules) || \
194 (defined(__AVX512VBMI__) && defined(__AVX512VL__))
Michael Zuckerman9f338482016-03-07 17:04:11 +0000195#include <avx512vbmivlintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000196#endif
Michael Zuckerman9f338482016-03-07 17:04:11 +0000197
Nico Weber379a1952016-05-16 18:14:07 +0000198#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512PF__)
Michael Zuckerman4fa96af2016-04-21 12:47:27 +0000199#include <avx512pfintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000200#endif
Michael Zuckerman4fa96af2016-04-21 12:47:27 +0000201
Nico Weber379a1952016-05-16 18:14:07 +0000202#if !defined(_MSC_VER) || __has_feature(modules) || defined(__PKU__)
Asaf Badouha9d1e182015-12-31 14:14:07 +0000203#include <pkuintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000204#endif
Asaf Badouha9d1e182015-12-31 14:14:07 +0000205
Nico Weber379a1952016-05-16 18:14:07 +0000206#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDRND__)
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000207static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
Benjamin Kramera43b6992012-07-12 09:33:03 +0000208_rdrand16_step(unsigned short *__p)
209{
210 return __builtin_ia32_rdrand16_step(__p);
211}
212
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000213static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
Benjamin Kramera43b6992012-07-12 09:33:03 +0000214_rdrand32_step(unsigned int *__p)
215{
216 return __builtin_ia32_rdrand32_step(__p);
217}
218
Zvi Rackover064f0002017-07-10 07:13:56 +0000219#ifdef __x86_64__
220static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
221_rdrand64_step(unsigned long long *__p)
222{
223 return __builtin_ia32_rdrand64_step(__p);
224}
225#endif
226#endif /* __RDRND__ */
227
Michael Zuckermane54093f2016-06-01 12:21:00 +0000228/* __bit_scan_forward */
229static __inline__ int __attribute__((__always_inline__, __nodebug__))
230_bit_scan_forward(int __A) {
David Majnemerd4235742016-06-13 17:26:16 +0000231 return __builtin_ctz(__A);
Michael Zuckermane54093f2016-06-01 12:21:00 +0000232}
233
234/* __bit_scan_reverse */
235static __inline__ int __attribute__((__always_inline__, __nodebug__))
236_bit_scan_reverse(int __A) {
David Majnemerd4235742016-06-13 17:26:16 +0000237 return 31 - __builtin_clz(__A);
Michael Zuckermane54093f2016-06-01 12:21:00 +0000238}
239
Nico Weber379a1952016-05-16 18:14:07 +0000240#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FSGSBASE__)
Craig Topper8c7f2512014-11-03 06:51:41 +0000241#ifdef __x86_64__
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000242static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000243_readfsbase_u32(void)
244{
245 return __builtin_ia32_rdfsbase32();
246}
247
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000248static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000249_readfsbase_u64(void)
250{
251 return __builtin_ia32_rdfsbase64();
252}
253
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000254static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000255_readgsbase_u32(void)
256{
257 return __builtin_ia32_rdgsbase32();
258}
259
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000260static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000261_readgsbase_u64(void)
262{
263 return __builtin_ia32_rdgsbase64();
264}
265
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000266static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000267_writefsbase_u32(unsigned int __V)
268{
269 return __builtin_ia32_wrfsbase32(__V);
270}
271
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000272static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000273_writefsbase_u64(unsigned long long __V)
274{
275 return __builtin_ia32_wrfsbase64(__V);
276}
277
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000278static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000279_writegsbase_u32(unsigned int __V)
280{
281 return __builtin_ia32_wrgsbase32(__V);
282}
283
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000284static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000285_writegsbase_u64(unsigned long long __V)
286{
287 return __builtin_ia32_wrgsbase64(__V);
288}
Michael Zuckermane54093f2016-06-01 12:21:00 +0000289
Craig Topper8c7f2512014-11-03 06:51:41 +0000290#endif
Nico Weber379a1952016-05-16 18:14:07 +0000291#endif /* __FSGSBASE__ */
Craig Topper8c7f2512014-11-03 06:51:41 +0000292
Nico Weber379a1952016-05-16 18:14:07 +0000293#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RTM__)
Michael Liao625a8752012-11-10 05:17:46 +0000294#include <rtmintrin.h>
Eric Christopher3d920ee2015-06-17 18:42:07 +0000295#include <xtestintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000296#endif
Michael Liao4442f792013-03-29 05:14:06 +0000297
Nico Weber379a1952016-05-16 18:14:07 +0000298#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SHA__)
Ben Langmuir6efe3a82013-09-19 14:00:22 +0000299#include <shaintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000300#endif
Ben Langmuir6efe3a82013-09-19 14:00:22 +0000301
Nico Weber379a1952016-05-16 18:14:07 +0000302#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FXSR__)
Michael Kupersteina3c7b742015-06-30 09:45:38 +0000303#include <fxsrintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000304#endif
Michael Kupersteina3c7b742015-06-30 09:45:38 +0000305
Nico Weber379a1952016-05-16 18:14:07 +0000306#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVE__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000307#include <xsaveintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000308#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000309
Nico Weber379a1952016-05-16 18:14:07 +0000310#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVEOPT__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000311#include <xsaveoptintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000312#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000313
Nico Weber379a1952016-05-16 18:14:07 +0000314#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVEC__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000315#include <xsavecintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000316#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000317
Nico Weber379a1952016-05-16 18:14:07 +0000318#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVES__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000319#include <xsavesintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000320#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000321
Oren Ben Simhonfec21ec2017-11-26 12:34:54 +0000322#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SHSTK__)
323#include <cetintrin.h>
324#endif
325
Eric Christopher29b78092015-06-17 18:42:03 +0000326/* Some intrinsics inside adxintrin.h are available only on processors with ADX,
327 * whereas others are also available at all times. */
Robert Khasanov83c419b2014-09-19 10:17:06 +0000328#include <adxintrin.h>
329
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +0000330#endif /* __IMMINTRIN_H */