xref: /dflybsd-src/contrib/gcc-4.7/gcc/config/i386/immintrin.h (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
2*e4b17023SJohn Marino 
3*e4b17023SJohn Marino    This file is part of GCC.
4*e4b17023SJohn Marino 
5*e4b17023SJohn Marino    GCC is free software; you can redistribute it and/or modify
6*e4b17023SJohn Marino    it under the terms of the GNU General Public License as published by
7*e4b17023SJohn Marino    the Free Software Foundation; either version 3, or (at your option)
8*e4b17023SJohn Marino    any later version.
9*e4b17023SJohn Marino 
10*e4b17023SJohn Marino    GCC is distributed in the hope that it will be useful,
11*e4b17023SJohn Marino    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*e4b17023SJohn Marino    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*e4b17023SJohn Marino    GNU General Public License for more details.
14*e4b17023SJohn Marino 
15*e4b17023SJohn Marino    Under Section 7 of GPL version 3, you are granted additional
16*e4b17023SJohn Marino    permissions described in the GCC Runtime Library Exception, version
17*e4b17023SJohn Marino    3.1, as published by the Free Software Foundation.
18*e4b17023SJohn Marino 
19*e4b17023SJohn Marino    You should have received a copy of the GNU General Public License and
20*e4b17023SJohn Marino    a copy of the GCC Runtime Library Exception along with this program;
21*e4b17023SJohn Marino    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
22*e4b17023SJohn Marino    <http://www.gnu.org/licenses/>.  */
23*e4b17023SJohn Marino 
24*e4b17023SJohn Marino #ifndef _IMMINTRIN_H_INCLUDED
25*e4b17023SJohn Marino #define _IMMINTRIN_H_INCLUDED
26*e4b17023SJohn Marino 
27*e4b17023SJohn Marino #ifdef __MMX__
28*e4b17023SJohn Marino #include <mmintrin.h>
29*e4b17023SJohn Marino #endif
30*e4b17023SJohn Marino 
31*e4b17023SJohn Marino #ifdef __SSE__
32*e4b17023SJohn Marino #include <xmmintrin.h>
33*e4b17023SJohn Marino #endif
34*e4b17023SJohn Marino 
35*e4b17023SJohn Marino #ifdef __SSE2__
36*e4b17023SJohn Marino #include <emmintrin.h>
37*e4b17023SJohn Marino #endif
38*e4b17023SJohn Marino 
39*e4b17023SJohn Marino #ifdef __SSE3__
40*e4b17023SJohn Marino #include <pmmintrin.h>
41*e4b17023SJohn Marino #endif
42*e4b17023SJohn Marino 
43*e4b17023SJohn Marino #ifdef __SSSE3__
44*e4b17023SJohn Marino #include <tmmintrin.h>
45*e4b17023SJohn Marino #endif
46*e4b17023SJohn Marino 
47*e4b17023SJohn Marino #if defined (__SSE4_2__) || defined (__SSE4_1__)
48*e4b17023SJohn Marino #include <smmintrin.h>
49*e4b17023SJohn Marino #endif
50*e4b17023SJohn Marino 
51*e4b17023SJohn Marino #if defined (__AES__) || defined (__PCLMUL__)
52*e4b17023SJohn Marino #include <wmmintrin.h>
53*e4b17023SJohn Marino #endif
54*e4b17023SJohn Marino 
55*e4b17023SJohn Marino #ifdef __AVX__
56*e4b17023SJohn Marino #include <avxintrin.h>
57*e4b17023SJohn Marino #endif
58*e4b17023SJohn Marino 
59*e4b17023SJohn Marino #ifdef __AVX2__
60*e4b17023SJohn Marino #include <avx2intrin.h>
61*e4b17023SJohn Marino #endif
62*e4b17023SJohn Marino 
63*e4b17023SJohn Marino #ifdef __LZCNT__
64*e4b17023SJohn Marino #include <lzcntintrin.h>
65*e4b17023SJohn Marino #endif
66*e4b17023SJohn Marino 
67*e4b17023SJohn Marino #ifdef __BMI__
68*e4b17023SJohn Marino #include <bmiintrin.h>
69*e4b17023SJohn Marino #endif
70*e4b17023SJohn Marino 
71*e4b17023SJohn Marino #ifdef __BMI2__
72*e4b17023SJohn Marino #include <bmi2intrin.h>
73*e4b17023SJohn Marino #endif
74*e4b17023SJohn Marino 
75*e4b17023SJohn Marino #ifdef __FMA__
76*e4b17023SJohn Marino #include <fmaintrin.h>
77*e4b17023SJohn Marino #endif
78*e4b17023SJohn Marino 
79*e4b17023SJohn Marino #ifdef __F16C__
80*e4b17023SJohn Marino #include <f16cintrin.h>
81*e4b17023SJohn Marino #endif
82*e4b17023SJohn Marino 
83*e4b17023SJohn Marino #ifdef __RDRND__
84*e4b17023SJohn Marino extern __inline int
85*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_rdrand16_step(unsigned short * __P)86*e4b17023SJohn Marino _rdrand16_step (unsigned short *__P)
87*e4b17023SJohn Marino {
88*e4b17023SJohn Marino   return __builtin_ia32_rdrand16_step (__P);
89*e4b17023SJohn Marino }
90*e4b17023SJohn Marino 
91*e4b17023SJohn Marino extern __inline int
92*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_rdrand32_step(unsigned int * __P)93*e4b17023SJohn Marino _rdrand32_step (unsigned int *__P)
94*e4b17023SJohn Marino {
95*e4b17023SJohn Marino   return __builtin_ia32_rdrand32_step (__P);
96*e4b17023SJohn Marino }
97*e4b17023SJohn Marino #endif /* __RDRND__ */
98*e4b17023SJohn Marino 
99*e4b17023SJohn Marino #ifdef  __x86_64__
100*e4b17023SJohn Marino #ifdef __FSGSBASE__
101*e4b17023SJohn Marino extern __inline unsigned int
102*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readfsbase_u32(void)103*e4b17023SJohn Marino _readfsbase_u32 (void)
104*e4b17023SJohn Marino {
105*e4b17023SJohn Marino   return __builtin_ia32_rdfsbase32 ();
106*e4b17023SJohn Marino }
107*e4b17023SJohn Marino 
108*e4b17023SJohn Marino extern __inline unsigned long long
109*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readfsbase_u64(void)110*e4b17023SJohn Marino _readfsbase_u64 (void)
111*e4b17023SJohn Marino {
112*e4b17023SJohn Marino   return __builtin_ia32_rdfsbase64 ();
113*e4b17023SJohn Marino }
114*e4b17023SJohn Marino 
115*e4b17023SJohn Marino extern __inline unsigned int
116*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readgsbase_u32(void)117*e4b17023SJohn Marino _readgsbase_u32 (void)
118*e4b17023SJohn Marino {
119*e4b17023SJohn Marino   return __builtin_ia32_rdgsbase32 ();
120*e4b17023SJohn Marino }
121*e4b17023SJohn Marino 
122*e4b17023SJohn Marino extern __inline unsigned long long
123*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_readgsbase_u64(void)124*e4b17023SJohn Marino _readgsbase_u64 (void)
125*e4b17023SJohn Marino {
126*e4b17023SJohn Marino   return __builtin_ia32_rdgsbase64 ();
127*e4b17023SJohn Marino }
128*e4b17023SJohn Marino 
129*e4b17023SJohn Marino extern __inline void
130*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writefsbase_u32(unsigned int __B)131*e4b17023SJohn Marino _writefsbase_u32 (unsigned int __B)
132*e4b17023SJohn Marino {
133*e4b17023SJohn Marino   __builtin_ia32_wrfsbase32 (__B);
134*e4b17023SJohn Marino }
135*e4b17023SJohn Marino 
136*e4b17023SJohn Marino extern __inline void
137*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writefsbase_u64(unsigned long long __B)138*e4b17023SJohn Marino _writefsbase_u64 (unsigned long long __B)
139*e4b17023SJohn Marino {
140*e4b17023SJohn Marino   __builtin_ia32_wrfsbase64 (__B);
141*e4b17023SJohn Marino }
142*e4b17023SJohn Marino 
143*e4b17023SJohn Marino extern __inline void
144*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writegsbase_u32(unsigned int __B)145*e4b17023SJohn Marino _writegsbase_u32 (unsigned int __B)
146*e4b17023SJohn Marino {
147*e4b17023SJohn Marino   __builtin_ia32_wrgsbase32 (__B);
148*e4b17023SJohn Marino }
149*e4b17023SJohn Marino 
150*e4b17023SJohn Marino extern __inline void
151*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_writegsbase_u64(unsigned long long __B)152*e4b17023SJohn Marino _writegsbase_u64 (unsigned long long __B)
153*e4b17023SJohn Marino {
154*e4b17023SJohn Marino   __builtin_ia32_wrgsbase64 (__B);
155*e4b17023SJohn Marino }
156*e4b17023SJohn Marino #endif /* __FSGSBASE__ */
157*e4b17023SJohn Marino 
158*e4b17023SJohn Marino #ifdef __RDRND__
159*e4b17023SJohn Marino extern __inline int
160*e4b17023SJohn Marino __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_rdrand64_step(unsigned long long * __P)161*e4b17023SJohn Marino _rdrand64_step (unsigned long long *__P)
162*e4b17023SJohn Marino {
163*e4b17023SJohn Marino   return __builtin_ia32_rdrand64_step (__P);
164*e4b17023SJohn Marino }
165*e4b17023SJohn Marino #endif /* __RDRND__ */
166*e4b17023SJohn Marino #endif /* __x86_64__  */
167*e4b17023SJohn Marino 
168*e4b17023SJohn Marino #endif /* _IMMINTRIN_H_INCLUDED */
169