blob: 80b99965e009d8c12e785e5e4cfe41529c22f82f [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
Craig Topper34c8c0d2018-05-22 18:54:19 +000072#if !defined(_MSC_VER) || __has_feature(modules) || defined(__F16C__)
73#include <f16cintrin.h>
Paul Robinson941bc912015-12-02 18:41:52 +000074
Coby Tayreecf96c872017-12-27 09:00:31 +000075#if !defined(_MSC_VER) || __has_feature(modules) || defined(__VPCLMULQDQ__)
76#include <vpclmulqdqintrin.h>
77#endif
78
Nico Weber379a1952016-05-16 18:14:07 +000079#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI__)
Craig Topperf2855ad2011-12-25 06:25:37 +000080#include <bmiintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000081#endif
Craig Topperf2855ad2011-12-25 06:25:37 +000082
Nico Weber379a1952016-05-16 18:14:07 +000083#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI2__)
Craig Topperc334dd62011-12-26 02:31:10 +000084#include <bmi2intrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000085#endif
Craig Topperc334dd62011-12-26 02:31:10 +000086
Nico Weber379a1952016-05-16 18:14:07 +000087#if !defined(_MSC_VER) || __has_feature(modules) || defined(__LZCNT__)
Craig Topperf2855ad2011-12-25 06:25:37 +000088#include <lzcntintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000089#endif
Craig Topperf2855ad2011-12-25 06:25:37 +000090
Nico Weber379a1952016-05-16 18:14:07 +000091#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FMA__)
Craig Topper2b1eda32012-06-04 03:42:47 +000092#include <fmaintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000093#endif
Craig Topper2b1eda32012-06-04 03:42:47 +000094
Nico Weber379a1952016-05-16 18:14:07 +000095#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512F__)
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +000096#include <avx512fintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +000097#endif
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +000098
Nico Weber379a1952016-05-16 18:14:07 +000099#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VL__)
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000100#include <avx512vlintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000101#endif
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000102
Nico Weber379a1952016-05-16 18:14:07 +0000103#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512BW__)
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000104#include <avx512bwintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000105#endif
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000106
Coby Tayree22685762017-12-27 10:01:00 +0000107#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512BITALG__)
108#include <avx512bitalgintrin.h>
109#endif
110
Nico Weber379a1952016-05-16 18:14:07 +0000111#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512CD__)
Asaf Badouha45b7ca2015-06-29 12:51:53 +0000112#include <avx512cdintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000113#endif
Asaf Badouha45b7ca2015-06-29 12:51:53 +0000114
Oren Ben Simhon140c1fb2017-05-25 13:44:11 +0000115#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VPOPCNTDQ__)
116#include <avx512vpopcntdqintrin.h>
117#endif
118
Craig Topperb846d1f2017-12-16 06:02:31 +0000119#if !defined(_MSC_VER) || __has_feature(modules) || \
120 (defined(__AVX512VL__) && defined(__AVX512VPOPCNTDQ__))
121#include <avx512vpopcntdqvlintrin.h>
122#endif
123
Coby Tayree3d9c88c2017-12-27 10:37:51 +0000124#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VNNI__)
125#include <avx512vnniintrin.h>
126#endif
127
128#if !defined(_MSC_VER) || __has_feature(modules) || \
129 (defined(__AVX512VL__) && defined(__AVX512VNNI__))
130#include <avx512vlvnniintrin.h>
131#endif
132
Nico Weber379a1952016-05-16 18:14:07 +0000133#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512DQ__)
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000134#include <avx512dqintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000135#endif
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000136
Nico Weber379a1952016-05-16 18:14:07 +0000137#if !defined(_MSC_VER) || __has_feature(modules) || \
Coby Tayree22685762017-12-27 10:01:00 +0000138 (defined(__AVX512VL__) && defined(__AVX512BITALG__))
139#include <avx512vlbitalgintrin.h>
140#endif
141
142#if !defined(_MSC_VER) || __has_feature(modules) || \
Nico Weber379a1952016-05-16 18:14:07 +0000143 (defined(__AVX512VL__) && defined(__AVX512BW__))
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000144#include <avx512vlbwintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000145#endif
Robert Khasanovb9f3a912014-10-08 17:18:13 +0000146
Nico Weber379a1952016-05-16 18:14:07 +0000147#if !defined(_MSC_VER) || __has_feature(modules) || \
148 (defined(__AVX512VL__) && defined(__AVX512CD__))
Michael Zuckerman8c2900f2016-04-27 11:43:14 +0000149#include <avx512vlcdintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000150#endif
Michael Zuckerman8c2900f2016-04-27 11:43:14 +0000151
Nico Weber379a1952016-05-16 18:14:07 +0000152#if !defined(_MSC_VER) || __has_feature(modules) || \
153 (defined(__AVX512VL__) && defined(__AVX512DQ__))
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000154#include <avx512vldqintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000155#endif
Elena Demikhovskye7d4c2e2015-04-30 09:24:29 +0000156
Nico Weber379a1952016-05-16 18:14:07 +0000157#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512ER__)
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +0000158#include <avx512erintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000159#endif
Elena Demikhovskyfcc6df32014-07-22 11:31:39 +0000160
Nico Weber379a1952016-05-16 18:14:07 +0000161#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512IFMA__)
Michael Zuckerman0190c652016-03-07 09:55:55 +0000162#include <avx512ifmaintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000163#endif
Michael Zuckerman0190c652016-03-07 09:55:55 +0000164
Nico Weber379a1952016-05-16 18:14:07 +0000165#if !defined(_MSC_VER) || __has_feature(modules) || \
166 (defined(__AVX512IFMA__) && defined(__AVX512VL__))
Michael Zuckerman0190c652016-03-07 09:55:55 +0000167#include <avx512ifmavlintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000168#endif
Michael Zuckerman0190c652016-03-07 09:55:55 +0000169
Nico Weber379a1952016-05-16 18:14:07 +0000170#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VBMI__)
Michael Zuckerman9f338482016-03-07 17:04:11 +0000171#include <avx512vbmiintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000172#endif
Michael Zuckerman9f338482016-03-07 17:04:11 +0000173
Nico Weber379a1952016-05-16 18:14:07 +0000174#if !defined(_MSC_VER) || __has_feature(modules) || \
175 (defined(__AVX512VBMI__) && defined(__AVX512VL__))
Michael Zuckerman9f338482016-03-07 17:04:11 +0000176#include <avx512vbmivlintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000177#endif
Michael Zuckerman9f338482016-03-07 17:04:11 +0000178
Coby Tayreea09663a2017-12-27 11:25:07 +0000179#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VBMI2__)
180#include <avx512vbmi2intrin.h>
181#endif
182
183#if !defined(_MSC_VER) || __has_feature(modules) || \
184 (defined(__AVX512VBMI2__) && defined(__AVX512VL__))
185#include <avx512vlvbmi2intrin.h>
186#endif
187
Nico Weber379a1952016-05-16 18:14:07 +0000188#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512PF__)
Michael Zuckerman4fa96af2016-04-21 12:47:27 +0000189#include <avx512pfintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000190#endif
Michael Zuckerman4fa96af2016-04-21 12:47:27 +0000191
Nico Weber379a1952016-05-16 18:14:07 +0000192#if !defined(_MSC_VER) || __has_feature(modules) || defined(__PKU__)
Asaf Badouha9d1e182015-12-31 14:14:07 +0000193#include <pkuintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000194#endif
Asaf Badouha9d1e182015-12-31 14:14:07 +0000195
Coby Tayreea1e5f0c2017-12-27 08:16:54 +0000196#if !defined(_MSC_VER) || __has_feature(modules) || defined(__VAES__)
197#include <vaesintrin.h>
198#endif
199
Coby Tayreef4811eb2017-12-27 08:37:47 +0000200#if !defined(_MSC_VER) || __has_feature(modules) || defined(__GFNI__)
201#include <gfniintrin.h>
202#endif
203
Craig Topper8cdb9492018-01-20 18:36:52 +0000204#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDPID__)
Adrian Prantl9fc8faf2018-05-09 01:00:01 +0000205/// Returns the value of the IA32_TSC_AUX MSR (0xc0000103).
Craig Topper8cdb9492018-01-20 18:36:52 +0000206///
207/// \headerfile <immintrin.h>
208///
209/// This intrinsic corresponds to the <c> RDPID </c> instruction.
210static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("rdpid")))
211_rdpid_u32(void) {
212 return __builtin_ia32_rdpid();
213}
214#endif // __RDPID__
215
Nico Weber379a1952016-05-16 18:14:07 +0000216#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDRND__)
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000217static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
Benjamin Kramera43b6992012-07-12 09:33:03 +0000218_rdrand16_step(unsigned short *__p)
219{
220 return __builtin_ia32_rdrand16_step(__p);
221}
222
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000223static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
Benjamin Kramera43b6992012-07-12 09:33:03 +0000224_rdrand32_step(unsigned int *__p)
225{
226 return __builtin_ia32_rdrand32_step(__p);
227}
228
Zvi Rackover064f0002017-07-10 07:13:56 +0000229#ifdef __x86_64__
230static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd")))
231_rdrand64_step(unsigned long long *__p)
232{
233 return __builtin_ia32_rdrand64_step(__p);
234}
235#endif
236#endif /* __RDRND__ */
237
Michael Zuckermane54093f2016-06-01 12:21:00 +0000238/* __bit_scan_forward */
239static __inline__ int __attribute__((__always_inline__, __nodebug__))
240_bit_scan_forward(int __A) {
David Majnemerd4235742016-06-13 17:26:16 +0000241 return __builtin_ctz(__A);
Michael Zuckermane54093f2016-06-01 12:21:00 +0000242}
243
244/* __bit_scan_reverse */
245static __inline__ int __attribute__((__always_inline__, __nodebug__))
246_bit_scan_reverse(int __A) {
David Majnemerd4235742016-06-13 17:26:16 +0000247 return 31 - __builtin_clz(__A);
Michael Zuckermane54093f2016-06-01 12:21:00 +0000248}
249
Nico Weber379a1952016-05-16 18:14:07 +0000250#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FSGSBASE__)
Craig Topper8c7f2512014-11-03 06:51:41 +0000251#ifdef __x86_64__
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000252static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000253_readfsbase_u32(void)
254{
255 return __builtin_ia32_rdfsbase32();
256}
257
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000258static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000259_readfsbase_u64(void)
260{
261 return __builtin_ia32_rdfsbase64();
262}
263
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000264static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000265_readgsbase_u32(void)
266{
267 return __builtin_ia32_rdgsbase32();
268}
269
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000270static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000271_readgsbase_u64(void)
272{
273 return __builtin_ia32_rdgsbase64();
274}
275
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000276static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000277_writefsbase_u32(unsigned int __V)
278{
279 return __builtin_ia32_wrfsbase32(__V);
280}
281
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000282static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000283_writefsbase_u64(unsigned long long __V)
284{
285 return __builtin_ia32_wrfsbase64(__V);
286}
287
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000288static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000289_writegsbase_u32(unsigned int __V)
290{
291 return __builtin_ia32_wrgsbase32(__V);
292}
293
Eric Christopher9fc7fb22015-06-17 07:09:32 +0000294static __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase")))
Craig Topper8c7f2512014-11-03 06:51:41 +0000295_writegsbase_u64(unsigned long long __V)
296{
297 return __builtin_ia32_wrgsbase64(__V);
298}
Michael Zuckermane54093f2016-06-01 12:21:00 +0000299
Craig Topper8c7f2512014-11-03 06:51:41 +0000300#endif
Nico Weber379a1952016-05-16 18:14:07 +0000301#endif /* __FSGSBASE__ */
Craig Topper8c7f2512014-11-03 06:51:41 +0000302
Nico Weber379a1952016-05-16 18:14:07 +0000303#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RTM__)
Michael Liao625a8752012-11-10 05:17:46 +0000304#include <rtmintrin.h>
Eric Christopher3d920ee2015-06-17 18:42:07 +0000305#include <xtestintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000306#endif
Michael Liao4442f792013-03-29 05:14:06 +0000307
Nico Weber379a1952016-05-16 18:14:07 +0000308#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SHA__)
Ben Langmuir6efe3a82013-09-19 14:00:22 +0000309#include <shaintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000310#endif
Ben Langmuir6efe3a82013-09-19 14:00:22 +0000311
Nico Weber379a1952016-05-16 18:14:07 +0000312#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FXSR__)
Michael Kupersteina3c7b742015-06-30 09:45:38 +0000313#include <fxsrintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000314#endif
Michael Kupersteina3c7b742015-06-30 09:45:38 +0000315
Nico Weber379a1952016-05-16 18:14:07 +0000316#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVE__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000317#include <xsaveintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000318#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000319
Nico Weber379a1952016-05-16 18:14:07 +0000320#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVEOPT__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000321#include <xsaveoptintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000322#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000323
Nico Weber379a1952016-05-16 18:14:07 +0000324#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVEC__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000325#include <xsavecintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000326#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000327
Nico Weber379a1952016-05-16 18:14:07 +0000328#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVES__)
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000329#include <xsavesintrin.h>
Nico Weber379a1952016-05-16 18:14:07 +0000330#endif
Amjad Aboud2b9b8a52015-10-13 12:29:35 +0000331
Oren Ben Simhonfec21ec2017-11-26 12:34:54 +0000332#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SHSTK__)
333#include <cetintrin.h>
334#endif
335
Eric Christopher29b78092015-06-17 18:42:03 +0000336/* Some intrinsics inside adxintrin.h are available only on processors with ADX,
337 * whereas others are also available at all times. */
Robert Khasanov83c419b2014-09-19 10:17:06 +0000338#include <adxintrin.h>
339
Benjamin Kramer65b9f7b2010-08-20 18:04:07 +0000340#endif /* __IMMINTRIN_H */