Home | History | Annotate | Download | only in Headers
      1 /*===---- 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 __RDRND__
     80 static __inline__ int __attribute__((__always_inline__, __nodebug__))
     81 _rdrand16_step(unsigned short *__p)
     82 {
     83   return __builtin_ia32_rdrand16_step(__p);
     84 }
     85 
     86 static __inline__ int __attribute__((__always_inline__, __nodebug__))
     87 _rdrand32_step(unsigned int *__p)
     88 {
     89   return __builtin_ia32_rdrand32_step(__p);
     90 }
     91 
     92 #ifdef __x86_64__
     93 static __inline__ int __attribute__((__always_inline__, __nodebug__))
     94 _rdrand64_step(unsigned long long *__p)
     95 {
     96   return __builtin_ia32_rdrand64_step(__p);
     97 }
     98 #endif
     99 #endif /* __RDRND__ */
    100 
    101 #ifdef __RTM__
    102 #include <rtmintrin.h>
    103 #endif
    104 
    105 /* FIXME: check __HLE__ as well when HLE is supported. */
    106 #if defined (__RTM__)
    107 static __inline__ int __attribute__((__always_inline__, __nodebug__))
    108 _xtest(void)
    109 {
    110   return __builtin_ia32_xtest();
    111 }
    112 #endif
    113 
    114 #ifdef __SHA__
    115 #include <shaintrin.h>
    116 #endif
    117 
    118 #endif /* __IMMINTRIN_H */
    119