immintrin.h revision 263508
1230557Sjimharris/*===---- immintrin.h - Intel intrinsics -----------------------------------=== 2230557Sjimharris * 3230557Sjimharris * Permission is hereby granted, free of charge, to any person obtaining a copy 4230557Sjimharris * of this software and associated documentation files (the "Software"), to deal 5230557Sjimharris * in the Software without restriction, including without limitation the rights 6230557Sjimharris * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7230557Sjimharris * copies of the Software, and to permit persons to whom the Software is 8230557Sjimharris * furnished to do so, subject to the following conditions: 9230557Sjimharris * 10230557Sjimharris * The above copyright notice and this permission notice shall be included in 11230557Sjimharris * all copies or substantial portions of the Software. 12230557Sjimharris * 13230557Sjimharris * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14230557Sjimharris * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15230557Sjimharris * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16230557Sjimharris * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17230557Sjimharris * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18230557Sjimharris * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19230557Sjimharris * THE SOFTWARE. 20230557Sjimharris * 21230557Sjimharris *===-----------------------------------------------------------------------=== 22230557Sjimharris */ 23230557Sjimharris 24230557Sjimharris#ifndef __IMMINTRIN_H 25230557Sjimharris#define __IMMINTRIN_H 26230557Sjimharris 27230557Sjimharris#ifdef __MMX__ 28230557Sjimharris#include <mmintrin.h> 29230557Sjimharris#endif 30230557Sjimharris 31230557Sjimharris#ifdef __SSE__ 32230557Sjimharris#include <xmmintrin.h> 33230557Sjimharris#endif 34230557Sjimharris 35230557Sjimharris#ifdef __SSE2__ 36230557Sjimharris#include <emmintrin.h> 37230557Sjimharris#endif 38230557Sjimharris 39230557Sjimharris#ifdef __SSE3__ 40230557Sjimharris#include <pmmintrin.h> 41230557Sjimharris#endif 42230557Sjimharris 43230557Sjimharris#ifdef __SSSE3__ 44230557Sjimharris#include <tmmintrin.h> 45230557Sjimharris#endif 46230557Sjimharris 47230557Sjimharris#if defined (__SSE4_2__) || defined (__SSE4_1__) 48230557Sjimharris#include <smmintrin.h> 49230557Sjimharris#endif 50230557Sjimharris 51230557Sjimharris#if defined (__AES__) 52230557Sjimharris#include <wmmintrin.h> 53230557Sjimharris#endif 54230557Sjimharris 55230557Sjimharris#ifdef __AVX__ 56230557Sjimharris#include <avxintrin.h> 57230557Sjimharris#endif 58230557Sjimharris 59230557Sjimharris#ifdef __AVX2__ 60230557Sjimharris#include <avx2intrin.h> 61230557Sjimharris#endif 62230557Sjimharris 63230557Sjimharris#ifdef __BMI__ 64230557Sjimharris#include <bmiintrin.h> 65230557Sjimharris#endif 66230557Sjimharris 67230557Sjimharris#ifdef __BMI2__ 68230557Sjimharris#include <bmi2intrin.h> 69230557Sjimharris#endif 70230557Sjimharris 71230557Sjimharris#ifdef __LZCNT__ 72230557Sjimharris#include <lzcntintrin.h> 73230557Sjimharris#endif 74230557Sjimharris 75230557Sjimharris#ifdef __FMA__ 76230557Sjimharris#include <fmaintrin.h> 77230557Sjimharris#endif 78230557Sjimharris 79230557Sjimharris#ifdef __RDRND__ 80230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__)) 81230557Sjimharris_rdrand16_step(unsigned short *__p) 82230557Sjimharris{ 83230557Sjimharris return __builtin_ia32_rdrand16_step(__p); 84230557Sjimharris} 85230557Sjimharris 86230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__)) 87230557Sjimharris_rdrand32_step(unsigned int *__p) 88230557Sjimharris{ 89230557Sjimharris return __builtin_ia32_rdrand32_step(__p); 90230557Sjimharris} 91230557Sjimharris 92230557Sjimharris#ifdef __x86_64__ 93230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__)) 94230557Sjimharris_rdrand64_step(unsigned long long *__p) 95230557Sjimharris{ 96230557Sjimharris return __builtin_ia32_rdrand64_step(__p); 97230557Sjimharris} 98230557Sjimharris#endif 99230557Sjimharris#endif /* __RDRND__ */ 100230557Sjimharris 101230557Sjimharris#ifdef __RTM__ 102230557Sjimharris#include <rtmintrin.h> 103230557Sjimharris#endif 104230557Sjimharris 105230557Sjimharris/* FIXME: check __HLE__ as well when HLE is supported. */ 106230557Sjimharris#if defined (__RTM__) 107230557Sjimharrisstatic __inline__ int __attribute__((__always_inline__, __nodebug__)) 108230557Sjimharris_xtest(void) 109230557Sjimharris{ 110230557Sjimharris return __builtin_ia32_xtest(); 111230557Sjimharris} 112230557Sjimharris#endif 113230557Sjimharris 114230557Sjimharris#ifdef __SHA__ 115230557Sjimharris#include <shaintrin.h> 116230557Sjimharris#endif 117230557Sjimharris 118230557Sjimharris#endif /* __IMMINTRIN_H */ 119230557Sjimharris