immintrin.h revision 263508
1230557Sjimharris/*===---- immintrin.h - Intel intrinsics -----------------------------------===
2230557Sjimharris *
3230557Sjimharris * Permission is hereby granted, free of charge, to any person obtaining a copy
4230557Sjimharris * of this software and associated documentation files (the "Software"), to deal
5230557Sjimharris * in the Software without restriction, including without limitation the rights
6230557Sjimharris * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7230557Sjimharris * copies of the Software, and to permit persons to whom the Software is
8230557Sjimharris * furnished to do so, subject to the following conditions:
9230557Sjimharris *
10230557Sjimharris * The above copyright notice and this permission notice shall be included in
11230557Sjimharris * all copies or substantial portions of the Software.
12230557Sjimharris *
13230557Sjimharris * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14230557Sjimharris * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15230557Sjimharris * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16230557Sjimharris * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17230557Sjimharris * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18230557Sjimharris * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19230557Sjimharris * THE SOFTWARE.
20230557Sjimharris *
21230557Sjimharris *===-----------------------------------------------------------------------===
22230557Sjimharris */
23230557Sjimharris
24230557Sjimharris#ifndef __IMMINTRIN_H
25230557Sjimharris#define __IMMINTRIN_H
26230557Sjimharris
27230557Sjimharris#ifdef __MMX__
28230557Sjimharris#include <mmintrin.h>
29230557Sjimharris#endif
30230557Sjimharris
31230557Sjimharris#ifdef __SSE__
32230557Sjimharris#include <xmmintrin.h>
33230557Sjimharris#endif
34230557Sjimharris
35230557Sjimharris#ifdef __SSE2__
36230557Sjimharris#include <emmintrin.h>
37230557Sjimharris#endif
38230557Sjimharris
39230557Sjimharris#ifdef __SSE3__
40230557Sjimharris#include <pmmintrin.h>
41230557Sjimharris#endif
42230557Sjimharris
43230557Sjimharris#ifdef __SSSE3__
44230557Sjimharris#include <tmmintrin.h>
45230557Sjimharris#endif
46230557Sjimharris
47230557Sjimharris#if defined (__SSE4_2__) || defined (__SSE4_1__)
48230557Sjimharris#include <smmintrin.h>
49230557Sjimharris#endif
50230557Sjimharris
51230557Sjimharris#if defined (__AES__)
52230557Sjimharris#include <wmmintrin.h>
53230557Sjimharris#endif
54230557Sjimharris
55230557Sjimharris#ifdef __AVX__
56230557Sjimharris#include <avxintrin.h>
57230557Sjimharris#endif
58230557Sjimharris
59230557Sjimharris#ifdef __AVX2__
60230557Sjimharris#include <avx2intrin.h>
61230557Sjimharris#endif
62230557Sjimharris
63230557Sjimharris#ifdef __BMI__
64230557Sjimharris#include <bmiintrin.h>
65230557Sjimharris#endif
66230557Sjimharris
67230557Sjimharris#ifdef __BMI2__
68230557Sjimharris#include <bmi2intrin.h>
69230557Sjimharris#endif
70230557Sjimharris
71230557Sjimharris#ifdef __LZCNT__
72230557Sjimharris#include <lzcntintrin.h>
73230557Sjimharris#endif
74230557Sjimharris
75230557Sjimharris#ifdef __FMA__
76230557Sjimharris#include <fmaintrin.h>
77230557Sjimharris#endif
78230557Sjimharris
79230557Sjimharris#ifdef __RDRND__
80230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
81230557Sjimharris_rdrand16_step(unsigned short *__p)
82230557Sjimharris{
83230557Sjimharris  return __builtin_ia32_rdrand16_step(__p);
84230557Sjimharris}
85230557Sjimharris
86230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
87230557Sjimharris_rdrand32_step(unsigned int *__p)
88230557Sjimharris{
89230557Sjimharris  return __builtin_ia32_rdrand32_step(__p);
90230557Sjimharris}
91230557Sjimharris
92230557Sjimharris#ifdef __x86_64__
93230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
94230557Sjimharris_rdrand64_step(unsigned long long *__p)
95230557Sjimharris{
96230557Sjimharris  return __builtin_ia32_rdrand64_step(__p);
97230557Sjimharris}
98230557Sjimharris#endif
99230557Sjimharris#endif /* __RDRND__ */
100230557Sjimharris
101230557Sjimharris#ifdef __RTM__
102230557Sjimharris#include <rtmintrin.h>
103230557Sjimharris#endif
104230557Sjimharris
105230557Sjimharris/* FIXME: check __HLE__ as well when HLE is supported. */
106230557Sjimharris#if defined (__RTM__)
107230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
108230557Sjimharris_xtest(void)
109230557Sjimharris{
110230557Sjimharris  return __builtin_ia32_xtest();
111230557Sjimharris}
112230557Sjimharris#endif
113230557Sjimharris
114230557Sjimharris#ifdef __SHA__
115230557Sjimharris#include <shaintrin.h>
116230557Sjimharris#endif
117230557Sjimharris
118230557Sjimharris#endif /* __IMMINTRIN_H */
119230557Sjimharris