immintrin.h revision 296417
1169689Skan/*===---- immintrin.h - Intel intrinsics -----------------------------------=== 2169689Skan * 3169689Skan * Permission is hereby granted, free of charge, to any person obtaining a copy 4169689Skan * of this software and associated documentation files (the "Software"), to deal 5169689Skan * in the Software without restriction, including without limitation the rights 6169689Skan * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7169689Skan * copies of the Software, and to permit persons to whom the Software is 8169689Skan * furnished to do so, subject to the following conditions: 9169689Skan * 10169689Skan * The above copyright notice and this permission notice shall be included in 11169689Skan * all copies or substantial portions of the Software. 12169689Skan * 13169689Skan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14169689Skan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15169689Skan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16169689Skan * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17169689Skan * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18169689Skan * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19169689Skan * THE SOFTWARE. 20169689Skan * 21169689Skan *===-----------------------------------------------------------------------=== 22169689Skan */ 23169689Skan 24169689Skan#ifndef __IMMINTRIN_H 25169689Skan#define __IMMINTRIN_H 26169689Skan 27169689Skan#include <mmintrin.h> 28169689Skan 29169689Skan#include <xmmintrin.h> 30169689Skan 31169689Skan#include <emmintrin.h> 32169689Skan 33169689Skan#include <pmmintrin.h> 34169689Skan 35169689Skan#include <tmmintrin.h> 36169689Skan 37169689Skan#include <smmintrin.h> 38169689Skan 39169689Skan#include <wmmintrin.h> 40169689Skan 41169689Skan#include <avxintrin.h> 42169689Skan 43169689Skan#include <avx2intrin.h> 44169689Skan 45169689Skan/* The 256-bit versions of functions in f16cintrin.h. 46169689Skan Intel documents these as being in immintrin.h, and 47169689Skan they depend on typedefs from avxintrin.h. */ 48169689Skan 49169689Skan#define _mm256_cvtps_ph(a, imm) __extension__ ({ \ 50169689Skan (__m128i)__builtin_ia32_vcvtps2ph256((__v8sf)(__m256)(a), (imm)); }) 51169689Skan 52169689Skanstatic __inline __m256 __attribute__((__always_inline__, __nodebug__, __target__("f16c"))) 53169689Skan_mm256_cvtph_ps(__m128i __a) 54169689Skan{ 55169689Skan return (__m256)__builtin_ia32_vcvtph2ps256((__v8hi)__a); 56169689Skan} 57169689Skan 58169689Skan#include <bmiintrin.h> 59169689Skan 60169689Skan#include <bmi2intrin.h> 61169689Skan 62169689Skan#include <lzcntintrin.h> 63169689Skan 64169689Skan#include <fmaintrin.h> 65169689Skan 66169689Skan#include <avx512fintrin.h> 67169689Skan 68169689Skan#include <avx512vlintrin.h> 69169689Skan 70169689Skan#include <avx512bwintrin.h> 71169689Skan 72169689Skan#include <avx512cdintrin.h> 73169689Skan 74169689Skan#include <avx512dqintrin.h> 75169689Skan 76169689Skan#include <avx512vlbwintrin.h> 77169689Skan 78169689Skan#include <avx512vldqintrin.h> 79169689Skan 80169689Skan#include <avx512erintrin.h> 81169689Skan 82169689Skan#include <pkuintrin.h> 83169689Skan 84169689Skanstatic __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) 85169689Skan_rdrand16_step(unsigned short *__p) 86169689Skan{ 87169689Skan return __builtin_ia32_rdrand16_step(__p); 88169689Skan} 89169689Skan 90169689Skanstatic __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) 91169689Skan_rdrand32_step(unsigned int *__p) 92169689Skan{ 93169689Skan return __builtin_ia32_rdrand32_step(__p); 94169689Skan} 95169689Skan 96169689Skan#ifdef __x86_64__ 97169689Skanstatic __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) 98169689Skan_rdrand64_step(unsigned long long *__p) 99169689Skan{ 100169689Skan return __builtin_ia32_rdrand64_step(__p); 101169689Skan} 102169689Skan#endif 103169689Skan 104169689Skan#ifdef __x86_64__ 105169689Skanstatic __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 106169689Skan_readfsbase_u32(void) 107169689Skan{ 108169689Skan return __builtin_ia32_rdfsbase32(); 109169689Skan} 110169689Skan 111169689Skanstatic __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 112169689Skan_readfsbase_u64(void) 113169689Skan{ 114169689Skan return __builtin_ia32_rdfsbase64(); 115169689Skan} 116169689Skan 117169689Skanstatic __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 118169689Skan_readgsbase_u32(void) 119169689Skan{ 120169689Skan return __builtin_ia32_rdgsbase32(); 121169689Skan} 122169689Skan 123169689Skanstatic __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 124169689Skan_readgsbase_u64(void) 125169689Skan{ 126169689Skan return __builtin_ia32_rdgsbase64(); 127169689Skan} 128169689Skan 129169689Skanstatic __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 130169689Skan_writefsbase_u32(unsigned int __V) 131169689Skan{ 132169689Skan return __builtin_ia32_wrfsbase32(__V); 133169689Skan} 134169689Skan 135169689Skanstatic __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 136169689Skan_writefsbase_u64(unsigned long long __V) 137169689Skan{ 138169689Skan return __builtin_ia32_wrfsbase64(__V); 139169689Skan} 140169689Skan 141169689Skanstatic __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 142169689Skan_writegsbase_u32(unsigned int __V) 143169689Skan{ 144169689Skan return __builtin_ia32_wrgsbase32(__V); 145169689Skan} 146169689Skan 147169689Skanstatic __inline__ void __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) 148169689Skan_writegsbase_u64(unsigned long long __V) 149169689Skan{ 150169689Skan return __builtin_ia32_wrgsbase64(__V); 151169689Skan} 152169689Skan#endif 153169689Skan 154169689Skan#include <rtmintrin.h> 155169689Skan 156169689Skan#include <xtestintrin.h> 157169689Skan 158169689Skan#include <shaintrin.h> 159169689Skan 160169689Skan#include <fxsrintrin.h> 161169689Skan 162169689Skan#include <xsaveintrin.h> 163169689Skan 164169689Skan#include <xsaveoptintrin.h> 165169689Skan 166169689Skan#include <xsavecintrin.h> 167169689Skan 168169689Skan#include <xsavesintrin.h> 169169689Skan 170169689Skan/* Some intrinsics inside adxintrin.h are available only on processors with ADX, 171169689Skan * whereas others are also available at all times. */ 172169689Skan#include <adxintrin.h> 173169689Skan 174169689Skan#endif /* __IMMINTRIN_H */ 175169689Skan