1 /* Copyright (C) 2008-2019 Free Software Foundation, Inc.
3 This file is part of GCC.
5 GCC is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3, or (at your option)
10 GCC is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 Under Section 7 of GPL version 3, you are granted additional
16 permissions described in the GCC Runtime Library Exception, version
17 3.1, as published by the Free Software Foundation.
19 You should have received a copy of the GNU General Public License and
20 a copy of the GCC Runtime Library Exception along with this program;
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 <http://www.gnu.org/licenses/>. */
24 #ifndef _IMMINTRIN_H_INCLUDED
25 #define _IMMINTRIN_H_INCLUDED
29 #include <xmmintrin.h>
31 #include <emmintrin.h>
33 #include <pmmintrin.h>
35 #include <tmmintrin.h>
37 #include <smmintrin.h>
39 #include <wmmintrin.h>
41 #include <fxsrintrin.h>
43 #include <xsaveintrin.h>
45 #include <xsaveoptintrin.h>
47 #include <xsavesintrin.h>
49 #include <xsavecintrin.h>
51 #include <avxintrin.h>
53 #include <avx2intrin.h>
55 #include <avx512fintrin.h>
57 #include <avx512erintrin.h>
59 #include <avx512pfintrin.h>
61 #include <avx512cdintrin.h>
63 #include <avx512vlintrin.h>
65 #include <avx512bwintrin.h>
67 #include <avx512dqintrin.h>
69 #include <avx512vlbwintrin.h>
71 #include <avx512vldqintrin.h>
73 #include <avx512ifmaintrin.h>
75 #include <avx512ifmavlintrin.h>
77 #include <avx512vbmiintrin.h>
79 #include <avx512vbmivlintrin.h>
81 #include <avx5124fmapsintrin.h>
83 #include <avx5124vnniwintrin.h>
85 #include <avx512vpopcntdqintrin.h>
87 #include <avx512vbmi2intrin.h>
89 #include <avx512vbmi2vlintrin.h>
91 #include <avx512vnniintrin.h>
93 #include <avx512vnnivlintrin.h>
95 #include <avx512vpopcntdqvlintrin.h>
97 #include <avx512bitalgintrin.h>
99 #include <shaintrin.h>
101 #include <lzcntintrin.h>
103 #include <bmiintrin.h>
105 #include <bmi2intrin.h>
107 #include <fmaintrin.h>
109 #include <f16cintrin.h>
111 #include <rtmintrin.h>
113 #include <xtestintrin.h>
115 #include <cetintrin.h>
117 #include <gfniintrin.h>
119 #include <vaesintrin.h>
121 #include <vpclmulqdqintrin.h>
123 #include <movdirintrin.h>
125 #include <sgxintrin.h>
127 #include <pconfigintrin.h>
129 #include <waitpkgintrin.h>
131 #include <cldemoteintrin.h>
133 #include <avx512bf16vlintrin.h>
135 #include <avx512bf16intrin.h>
137 #include <enqcmdintrin.h>
139 #include <rdseedintrin.h>
141 #include <prfchwintrin.h>
143 #include <adxintrin.h>
145 #include <clwbintrin.h>
147 #include <clflushoptintrin.h>
149 #include <wbnoinvdintrin.h>
151 #include <pkuintrin.h>
154 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
157 __builtin_ia32_wbinvd ();
161 #pragma GCC push_options
162 #pragma GCC target("rdrnd")
163 #define __DISABLE_RDRND__
164 #endif /* __RDRND__ */
166 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
167 _rdrand16_step (unsigned short *__P
)
169 return __builtin_ia32_rdrand16_step (__P
);
173 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
174 _rdrand32_step (unsigned int *__P
)
176 return __builtin_ia32_rdrand32_step (__P
);
178 #ifdef __DISABLE_RDRND__
179 #undef __DISABLE_RDRND__
180 #pragma GCC pop_options
181 #endif /* __DISABLE_RDRND__ */
184 #pragma GCC push_options
185 #pragma GCC target("rdpid")
186 #define __DISABLE_RDPID__
187 #endif /* __RDPID__ */
188 extern __inline
unsigned int
189 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
192 return __builtin_ia32_rdpid ();
194 #ifdef __DISABLE_RDPID__
195 #undef __DISABLE_RDPID__
196 #pragma GCC pop_options
197 #endif /* __DISABLE_RDPID__ */
202 #pragma GCC push_options
203 #pragma GCC target("fsgsbase")
204 #define __DISABLE_FSGSBASE__
205 #endif /* __FSGSBASE__ */
206 extern __inline
unsigned int
207 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
208 _readfsbase_u32 (void)
210 return __builtin_ia32_rdfsbase32 ();
213 extern __inline
unsigned long long
214 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
215 _readfsbase_u64 (void)
217 return __builtin_ia32_rdfsbase64 ();
220 extern __inline
unsigned int
221 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
222 _readgsbase_u32 (void)
224 return __builtin_ia32_rdgsbase32 ();
227 extern __inline
unsigned long long
228 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
229 _readgsbase_u64 (void)
231 return __builtin_ia32_rdgsbase64 ();
235 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
236 _writefsbase_u32 (unsigned int __B
)
238 __builtin_ia32_wrfsbase32 (__B
);
242 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
243 _writefsbase_u64 (unsigned long long __B
)
245 __builtin_ia32_wrfsbase64 (__B
);
249 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
250 _writegsbase_u32 (unsigned int __B
)
252 __builtin_ia32_wrgsbase32 (__B
);
256 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
257 _writegsbase_u64 (unsigned long long __B
)
259 __builtin_ia32_wrgsbase64 (__B
);
261 #ifdef __DISABLE_FSGSBASE__
262 #undef __DISABLE_FSGSBASE__
263 #pragma GCC pop_options
264 #endif /* __DISABLE_FSGSBASE__ */
267 #pragma GCC push_options
268 #pragma GCC target("rdrnd")
269 #define __DISABLE_RDRND__
270 #endif /* __RDRND__ */
272 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
273 _rdrand64_step (unsigned long long *__P
)
275 return __builtin_ia32_rdrand64_step (__P
);
277 #ifdef __DISABLE_RDRND__
278 #undef __DISABLE_RDRND__
279 #pragma GCC pop_options
280 #endif /* __DISABLE_RDRND__ */
282 #endif /* __x86_64__ */
285 #pragma GCC push_options
286 #pragma GCC target("ptwrite")
287 #define __DISABLE_PTWRITE__
292 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
293 _ptwrite64 (unsigned long long __B
)
295 __builtin_ia32_ptwrite64 (__B
);
297 #endif /* __x86_64__ */
300 __attribute__((__gnu_inline__
, __always_inline__
, __artificial__
))
301 _ptwrite32 (unsigned __B
)
303 __builtin_ia32_ptwrite32 (__B
);
305 #ifdef __DISABLE_PTWRITE__
306 #undef __DISABLE_PTWRITE__
307 #pragma GCC pop_options
308 #endif /* __DISABLE_PTWRITE__ */
310 #endif /* _IMMINTRIN_H_INCLUDED */