root / lab4 / .minix-src / include / clang-3.6 / immintrin.h @ 14
History | View | Annotate | Download (4.47 KB)
1 | 13 | up20180614 | /*===---- 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 | |||
27 | #ifdef __MMX__
|
||
28 | #include <mmintrin.h> |
||
29 | #endif
|
||
30 | |||
31 | #ifdef __SSE__
|
||
32 | #include <xmmintrin.h> |
||
33 | #endif
|
||
34 | |||
35 | #ifdef __SSE2__
|
||
36 | #include <emmintrin.h> |
||
37 | #endif
|
||
38 | |||
39 | #ifdef __SSE3__
|
||
40 | #include <pmmintrin.h> |
||
41 | #endif
|
||
42 | |||
43 | #ifdef __SSSE3__
|
||
44 | #include <tmmintrin.h> |
||
45 | #endif
|
||
46 | |||
47 | #if defined (__SSE4_2__) || defined (__SSE4_1__)
|
||
48 | #include <smmintrin.h> |
||
49 | #endif
|
||
50 | |||
51 | #if defined (__AES__) || defined (__PCLMUL__)
|
||
52 | #include <wmmintrin.h> |
||
53 | #endif
|
||
54 | |||
55 | #ifdef __AVX__
|
||
56 | #include <avxintrin.h> |
||
57 | #endif
|
||
58 | |||
59 | #ifdef __AVX2__
|
||
60 | #include <avx2intrin.h> |
||
61 | #endif
|
||
62 | |||
63 | #ifdef __BMI__
|
||
64 | #include <bmiintrin.h> |
||
65 | #endif
|
||
66 | |||
67 | #ifdef __BMI2__
|
||
68 | #include <bmi2intrin.h> |
||
69 | #endif
|
||
70 | |||
71 | #ifdef __LZCNT__
|
||
72 | #include <lzcntintrin.h> |
||
73 | #endif
|
||
74 | |||
75 | #ifdef __FMA__
|
||
76 | #include <fmaintrin.h> |
||
77 | #endif
|
||
78 | |||
79 | #ifdef __AVX512F__
|
||
80 | #include <avx512fintrin.h> |
||
81 | #endif
|
||
82 | |||
83 | #ifdef __AVX512VL__
|
||
84 | #include <avx512vlintrin.h> |
||
85 | #endif
|
||
86 | |||
87 | #ifdef __AVX512BW__
|
||
88 | #include <avx512bwintrin.h> |
||
89 | #endif
|
||
90 | |||
91 | #if defined (__AVX512VL__) && defined (__AVX512BW__)
|
||
92 | #include <avx512vlbwintrin.h> |
||
93 | #endif
|
||
94 | |||
95 | #ifdef __AVX512ER__
|
||
96 | #include <avx512erintrin.h> |
||
97 | #endif
|
||
98 | |||
99 | #ifdef __RDRND__
|
||
100 | static __inline__ int __attribute__((__always_inline__, __nodebug__)) |
||
101 | _rdrand16_step(unsigned short *__p) |
||
102 | { |
||
103 | return __builtin_ia32_rdrand16_step(__p);
|
||
104 | } |
||
105 | |||
106 | static __inline__ int __attribute__((__always_inline__, __nodebug__)) |
||
107 | _rdrand32_step(unsigned int *__p) |
||
108 | { |
||
109 | return __builtin_ia32_rdrand32_step(__p);
|
||
110 | } |
||
111 | |||
112 | #ifdef __x86_64__
|
||
113 | static __inline__ int __attribute__((__always_inline__, __nodebug__)) |
||
114 | _rdrand64_step(unsigned long long *__p) |
||
115 | { |
||
116 | return __builtin_ia32_rdrand64_step(__p);
|
||
117 | } |
||
118 | #endif
|
||
119 | #endif /* __RDRND__ */ |
||
120 | |||
121 | #ifdef __FSGSBASE__
|
||
122 | #ifdef __x86_64__
|
||
123 | static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) |
||
124 | _readfsbase_u32(void)
|
||
125 | { |
||
126 | return __builtin_ia32_rdfsbase32();
|
||
127 | } |
||
128 | |||
129 | static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) |
||
130 | _readfsbase_u64(void)
|
||
131 | { |
||
132 | return __builtin_ia32_rdfsbase64();
|
||
133 | } |
||
134 | |||
135 | static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) |
||
136 | _readgsbase_u32(void)
|
||
137 | { |
||
138 | return __builtin_ia32_rdgsbase32();
|
||
139 | } |
||
140 | |||
141 | static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) |
||
142 | _readgsbase_u64(void)
|
||
143 | { |
||
144 | return __builtin_ia32_rdgsbase64();
|
||
145 | } |
||
146 | |||
147 | static __inline__ void __attribute__((__always_inline__, __nodebug__)) |
||
148 | _writefsbase_u32(unsigned int __V) |
||
149 | { |
||
150 | return __builtin_ia32_wrfsbase32(__V);
|
||
151 | } |
||
152 | |||
153 | static __inline__ void __attribute__((__always_inline__, __nodebug__)) |
||
154 | _writefsbase_u64(unsigned long long __V) |
||
155 | { |
||
156 | return __builtin_ia32_wrfsbase64(__V);
|
||
157 | } |
||
158 | |||
159 | static __inline__ void __attribute__((__always_inline__, __nodebug__)) |
||
160 | _writegsbase_u32(unsigned int __V) |
||
161 | { |
||
162 | return __builtin_ia32_wrgsbase32(__V);
|
||
163 | } |
||
164 | |||
165 | static __inline__ void __attribute__((__always_inline__, __nodebug__)) |
||
166 | _writegsbase_u64(unsigned long long __V) |
||
167 | { |
||
168 | return __builtin_ia32_wrgsbase64(__V);
|
||
169 | } |
||
170 | #endif
|
||
171 | #endif /* __FSGSBASE__ */ |
||
172 | |||
173 | #ifdef __RTM__
|
||
174 | #include <rtmintrin.h> |
||
175 | #endif
|
||
176 | |||
177 | /* FIXME: check __HLE__ as well when HLE is supported. */
|
||
178 | #if defined (__RTM__)
|
||
179 | static __inline__ int __attribute__((__always_inline__, __nodebug__)) |
||
180 | _xtest(void)
|
||
181 | { |
||
182 | return __builtin_ia32_xtest();
|
||
183 | } |
||
184 | #endif
|
||
185 | |||
186 | #ifdef __SHA__
|
||
187 | #include <shaintrin.h> |
||
188 | #endif
|
||
189 | |||
190 | /* Some intrinsics inside adxintrin.h are available only if __ADX__ defined,
|
||
191 | * whereas others are also available if __ADX__ undefined */
|
||
192 | #include <adxintrin.h> |
||
193 | |||
194 | #endif /* __IMMINTRIN_H */ |