Add GCC support to ENQCMD.
[official-gcc.git] / gcc / config / i386 / immintrin.h
blobdb98820a34902453883f3d1dc7f25b217a32e81a
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)
8 any later version.
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
27 #include <mmintrin.h>
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>
153 extern __inline void
154 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
155 _wbinvd (void)
157 __builtin_ia32_wbinvd ();
160 #ifndef __RDRND__
161 #pragma GCC push_options
162 #pragma GCC target("rdrnd")
163 #define __DISABLE_RDRND__
164 #endif /* __RDRND__ */
165 extern __inline int
166 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
167 _rdrand16_step (unsigned short *__P)
169 return __builtin_ia32_rdrand16_step (__P);
172 extern __inline int
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__ */
183 #ifndef __RDPID__
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__))
190 _rdpid_u32 (void)
192 return __builtin_ia32_rdpid ();
194 #ifdef __DISABLE_RDPID__
195 #undef __DISABLE_RDPID__
196 #pragma GCC pop_options
197 #endif /* __DISABLE_RDPID__ */
199 #ifdef __x86_64__
201 #ifndef __FSGSBASE__
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 ();
234 extern __inline void
235 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
236 _writefsbase_u32 (unsigned int __B)
238 __builtin_ia32_wrfsbase32 (__B);
241 extern __inline void
242 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
243 _writefsbase_u64 (unsigned long long __B)
245 __builtin_ia32_wrfsbase64 (__B);
248 extern __inline void
249 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
250 _writegsbase_u32 (unsigned int __B)
252 __builtin_ia32_wrgsbase32 (__B);
255 extern __inline void
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__ */
266 #ifndef __RDRND__
267 #pragma GCC push_options
268 #pragma GCC target("rdrnd")
269 #define __DISABLE_RDRND__
270 #endif /* __RDRND__ */
271 extern __inline int
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__ */
284 #ifndef __PTWRITE__
285 #pragma GCC push_options
286 #pragma GCC target("ptwrite")
287 #define __DISABLE_PTWRITE__
288 #endif
290 #ifdef __x86_64__
291 extern __inline void
292 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
293 _ptwrite64 (unsigned long long __B)
295 __builtin_ia32_ptwrite64 (__B);
297 #endif /* __x86_64__ */
299 extern __inline void
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 */