clang API Documentation
00001 /*===---- avx512fintrin.h - AVX2 intrinsics -----------------------------------=== 00002 * 00003 * Permission is hereby granted, free of charge, to any person obtaining a copy 00004 * of this software and associated documentation files (the "Software"), to deal 00005 * in the Software without restriction, including without limitation the rights 00006 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00007 * copies of the Software, and to permit persons to whom the Software is 00008 * furnished to do so, subject to the following conditions: 00009 * 00010 * The above copyright notice and this permission notice shall be included in 00011 * all copies or substantial portions of the Software. 00012 * 00013 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00014 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00015 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00016 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00017 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00018 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00019 * THE SOFTWARE. 00020 * 00021 *===-----------------------------------------------------------------------=== 00022 */ 00023 #ifndef __IMMINTRIN_H 00024 #error "Never use <avx512erintrin.h> directly; include <immintrin.h> instead." 00025 #endif 00026 00027 #ifndef __AVX512ERINTRIN_H 00028 #define __AVX512ERINTRIN_H 00029 00030 00031 // rsqrt28 00032 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__)) 00033 _mm512_rsqrt28_round_pd (__m512d __A, int __R) 00034 { 00035 return (__m512d)__builtin_ia32_rsqrt28pd_mask ((__v8df)__A, 00036 (__v8df)_mm512_setzero_pd(), 00037 (__mmask8)-1, 00038 __R); 00039 } 00040 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__)) 00041 _mm512_rsqrt28_round_ps(__m512 __A, int __R) 00042 { 00043 return (__m512)__builtin_ia32_rsqrt28ps_mask ((__v16sf)__A, 00044 (__v16sf)_mm512_setzero_ps(), 00045 (__mmask16)-1, 00046 __R); 00047 } 00048 00049 static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 00050 _mm_rsqrt28_round_ss(__m128 __A, __m128 __B, int __R) 00051 { 00052 return (__m128) __builtin_ia32_rsqrt28ss_mask ((__v4sf) __A, 00053 (__v4sf) __B, 00054 (__v4sf) 00055 _mm_setzero_ps (), 00056 (__mmask8) -1, 00057 __R); 00058 } 00059 00060 static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 00061 _mm_rsqrt28_round_sd (__m128d __A, __m128d __B, int __R) 00062 { 00063 return (__m128d) __builtin_ia32_rsqrt28sd_mask ((__v2df) __A, 00064 (__v2df) __B, 00065 (__v2df) 00066 _mm_setzero_pd (), 00067 (__mmask8) -1, 00068 __R); 00069 } 00070 00071 00072 // rcp28 00073 static __inline__ __m512d __attribute__((__always_inline__, __nodebug__)) 00074 _mm512_rcp28_round_pd (__m512d __A, int __R) 00075 { 00076 return (__m512d)__builtin_ia32_rcp28pd_mask ((__v8df)__A, 00077 (__v8df)_mm512_setzero_pd(), 00078 (__mmask8)-1, 00079 __R); 00080 } 00081 00082 static __inline__ __m512 __attribute__((__always_inline__, __nodebug__)) 00083 _mm512_rcp28_round_ps (__m512 __A, int __R) 00084 { 00085 return (__m512)__builtin_ia32_rcp28ps_mask ((__v16sf)__A, 00086 (__v16sf)_mm512_setzero_ps (), 00087 (__mmask16)-1, 00088 __R); 00089 } 00090 00091 static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) 00092 _mm_rcp28_round_ss (__m128 __A, __m128 __B, int __R) 00093 { 00094 return (__m128) __builtin_ia32_rcp28ss_mask ((__v4sf) __A, 00095 (__v4sf) __B, 00096 (__v4sf) 00097 _mm_setzero_ps (), 00098 (__mmask8) -1, 00099 __R); 00100 } 00101 static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) 00102 _mm_rcp28_round_sd (__m128d __A, __m128d __B, int __R) 00103 { 00104 return (__m128d) __builtin_ia32_rcp28sd_mask ((__v2df) __A, 00105 (__v2df) __B, 00106 (__v2df) 00107 _mm_setzero_pd (), 00108 (__mmask8) -1, 00109 __R); 00110 } 00111 00112 #endif // __AVX512ERINTRIN_H