xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/config/i386/immintrin.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
1 /* Copyright (C) 2008-2020 Free Software Foundation, Inc.
2 
3    This file is part of GCC.
4 
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.
9 
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.
14 
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.
18 
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/>.  */
23 
24 #ifndef _IMMINTRIN_H_INCLUDED
25 #define _IMMINTRIN_H_INCLUDED
26 
27 #include <mmintrin.h>
28 
29 #include <xmmintrin.h>
30 
31 #include <emmintrin.h>
32 
33 #include <pmmintrin.h>
34 
35 #include <tmmintrin.h>
36 
37 #include <smmintrin.h>
38 
39 #include <wmmintrin.h>
40 
41 #include <fxsrintrin.h>
42 
43 #include <xsaveintrin.h>
44 
45 #include <xsaveoptintrin.h>
46 
47 #include <xsavesintrin.h>
48 
49 #include <xsavecintrin.h>
50 
51 #include <avxintrin.h>
52 
53 #include <avx2intrin.h>
54 
55 #include <avx512fintrin.h>
56 
57 #include <avx512erintrin.h>
58 
59 #include <avx512pfintrin.h>
60 
61 #include <avx512cdintrin.h>
62 
63 #include <avx512vlintrin.h>
64 
65 #include <avx512bwintrin.h>
66 
67 #include <avx512dqintrin.h>
68 
69 #include <avx512vlbwintrin.h>
70 
71 #include <avx512vldqintrin.h>
72 
73 #include <avx512ifmaintrin.h>
74 
75 #include <avx512ifmavlintrin.h>
76 
77 #include <avx512vbmiintrin.h>
78 
79 #include <avx512vbmivlintrin.h>
80 
81 #include <avx5124fmapsintrin.h>
82 
83 #include <avx5124vnniwintrin.h>
84 
85 #include <avx512vpopcntdqintrin.h>
86 
87 #include <avx512vbmi2intrin.h>
88 
89 #include <avx512vbmi2vlintrin.h>
90 
91 #include <avx512vnniintrin.h>
92 
93 #include <avx512vnnivlintrin.h>
94 
95 #include <avx512vpopcntdqvlintrin.h>
96 
97 #include <avx512bitalgintrin.h>
98 
99 #include <avx512vp2intersectintrin.h>
100 
101 #include <avx512vp2intersectvlintrin.h>
102 
103 #include <shaintrin.h>
104 
105 #include <lzcntintrin.h>
106 
107 #include <bmiintrin.h>
108 
109 #include <bmi2intrin.h>
110 
111 #include <fmaintrin.h>
112 
113 #include <f16cintrin.h>
114 
115 #include <rtmintrin.h>
116 
117 #include <xtestintrin.h>
118 
119 #include <cetintrin.h>
120 
121 #include <gfniintrin.h>
122 
123 #include <vaesintrin.h>
124 
125 #include <vpclmulqdqintrin.h>
126 
127 #include <movdirintrin.h>
128 
129 #include <sgxintrin.h>
130 
131 #include <pconfigintrin.h>
132 
133 #include <waitpkgintrin.h>
134 
135 #include <cldemoteintrin.h>
136 
137 #include <avx512bf16vlintrin.h>
138 
139 #include <avx512bf16intrin.h>
140 
141 #include <enqcmdintrin.h>
142 
143 #include <rdseedintrin.h>
144 
145 #include <prfchwintrin.h>
146 
147 #include <adxintrin.h>
148 
149 #include <clwbintrin.h>
150 
151 #include <clflushoptintrin.h>
152 
153 #include <wbnoinvdintrin.h>
154 
155 #include <pkuintrin.h>
156 
157 extern __inline void
158 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_wbinvd(void)159 _wbinvd (void)
160 {
161   __builtin_ia32_wbinvd ();
162 }
163 
164 #ifndef __RDRND__
165 #pragma GCC push_options
166 #pragma GCC target("rdrnd")
167 #define __DISABLE_RDRND__
168 #endif /* __RDRND__ */
169 extern __inline int
170 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_rdrand16_step(unsigned short * __P)171 _rdrand16_step (unsigned short *__P)
172 {
173   return __builtin_ia32_rdrand16_step (__P);
174 }
175 
176 extern __inline int
177 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_rdrand32_step(unsigned int * __P)178 _rdrand32_step (unsigned int *__P)
179 {
180   return __builtin_ia32_rdrand32_step (__P);
181 }
182 #ifdef __DISABLE_RDRND__
183 #undef __DISABLE_RDRND__
184 #pragma GCC pop_options
185 #endif /* __DISABLE_RDRND__ */
186 
187 #ifndef __RDPID__
188 #pragma GCC push_options
189 #pragma GCC target("rdpid")
190 #define __DISABLE_RDPID__
191 #endif /* __RDPID__ */
192 extern __inline unsigned int
193 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_rdpid_u32(void)194 _rdpid_u32 (void)
195 {
196   return __builtin_ia32_rdpid ();
197 }
198 #ifdef __DISABLE_RDPID__
199 #undef __DISABLE_RDPID__
200 #pragma GCC pop_options
201 #endif /* __DISABLE_RDPID__ */
202 
203 #ifdef  __x86_64__
204 
205 #ifndef __FSGSBASE__
206 #pragma GCC push_options
207 #pragma GCC target("fsgsbase")
208 #define __DISABLE_FSGSBASE__
209 #endif /* __FSGSBASE__ */
210 extern __inline unsigned int
211 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readfsbase_u32(void)212 _readfsbase_u32 (void)
213 {
214   return __builtin_ia32_rdfsbase32 ();
215 }
216 
217 extern __inline unsigned long long
218 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readfsbase_u64(void)219 _readfsbase_u64 (void)
220 {
221   return __builtin_ia32_rdfsbase64 ();
222 }
223 
224 extern __inline unsigned int
225 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readgsbase_u32(void)226 _readgsbase_u32 (void)
227 {
228   return __builtin_ia32_rdgsbase32 ();
229 }
230 
231 extern __inline unsigned long long
232 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readgsbase_u64(void)233 _readgsbase_u64 (void)
234 {
235   return __builtin_ia32_rdgsbase64 ();
236 }
237 
238 extern __inline void
239 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writefsbase_u32(unsigned int __B)240 _writefsbase_u32 (unsigned int __B)
241 {
242   __builtin_ia32_wrfsbase32 (__B);
243 }
244 
245 extern __inline void
246 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writefsbase_u64(unsigned long long __B)247 _writefsbase_u64 (unsigned long long __B)
248 {
249   __builtin_ia32_wrfsbase64 (__B);
250 }
251 
252 extern __inline void
253 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writegsbase_u32(unsigned int __B)254 _writegsbase_u32 (unsigned int __B)
255 {
256   __builtin_ia32_wrgsbase32 (__B);
257 }
258 
259 extern __inline void
260 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writegsbase_u64(unsigned long long __B)261 _writegsbase_u64 (unsigned long long __B)
262 {
263   __builtin_ia32_wrgsbase64 (__B);
264 }
265 #ifdef __DISABLE_FSGSBASE__
266 #undef __DISABLE_FSGSBASE__
267 #pragma GCC pop_options
268 #endif /* __DISABLE_FSGSBASE__ */
269 
270 #ifndef __RDRND__
271 #pragma GCC push_options
272 #pragma GCC target("rdrnd")
273 #define __DISABLE_RDRND__
274 #endif /* __RDRND__ */
275 extern __inline int
276 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_rdrand64_step(unsigned long long * __P)277 _rdrand64_step (unsigned long long *__P)
278 {
279   return __builtin_ia32_rdrand64_step (__P);
280 }
281 #ifdef __DISABLE_RDRND__
282 #undef __DISABLE_RDRND__
283 #pragma GCC pop_options
284 #endif /* __DISABLE_RDRND__ */
285 
286 #endif /* __x86_64__  */
287 
288 #ifndef __PTWRITE__
289 #pragma GCC push_options
290 #pragma GCC target("ptwrite")
291 #define __DISABLE_PTWRITE__
292 #endif
293 
294 #ifdef __x86_64__
295 extern __inline void
296 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_ptwrite64(unsigned long long __B)297 _ptwrite64 (unsigned long long __B)
298 {
299   __builtin_ia32_ptwrite64 (__B);
300 }
301 #endif /* __x86_64__ */
302 
303 extern __inline void
304 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_ptwrite32(unsigned __B)305 _ptwrite32 (unsigned __B)
306 {
307   __builtin_ia32_ptwrite32 (__B);
308 }
309 #ifdef __DISABLE_PTWRITE__
310 #undef __DISABLE_PTWRITE__
311 #pragma GCC pop_options
312 #endif /* __DISABLE_PTWRITE__ */
313 
314 #endif /* _IMMINTRIN_H_INCLUDED */
315