1*67e74705SXin Li /*===------------- avx512pfintrin.h - PF intrinsics ------------------=== 2*67e74705SXin Li * 3*67e74705SXin Li * 4*67e74705SXin Li * Permission is hereby granted, free of charge, to any person obtaining a copy 5*67e74705SXin Li * of this software and associated documentation files (the "Software"), to deal 6*67e74705SXin Li * in the Software without restriction, including without limitation the rights 7*67e74705SXin Li * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8*67e74705SXin Li * copies of the Software, and to permit persons to whom the Software is 9*67e74705SXin Li * furnished to do so, subject to the following conditions: 10*67e74705SXin Li * 11*67e74705SXin Li * The above copyright notice and this permission notice shall be included in 12*67e74705SXin Li * all copies or substantial portions of the Software. 13*67e74705SXin Li * 14*67e74705SXin Li * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*67e74705SXin Li * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*67e74705SXin Li * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17*67e74705SXin Li * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18*67e74705SXin Li * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19*67e74705SXin Li * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20*67e74705SXin Li * THE SOFTWARE. 21*67e74705SXin Li * 22*67e74705SXin Li *===-----------------------------------------------------------------------=== 23*67e74705SXin Li */ 24*67e74705SXin Li #ifndef __IMMINTRIN_H 25*67e74705SXin Li #error "Never use <avx512pfintrin.h> directly; include <immintrin.h> instead." 26*67e74705SXin Li #endif 27*67e74705SXin Li 28*67e74705SXin Li #ifndef __AVX512PFINTRIN_H 29*67e74705SXin Li #define __AVX512PFINTRIN_H 30*67e74705SXin Li 31*67e74705SXin Li /* Define the default attributes for the functions in this file. */ 32*67e74705SXin Li #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512pf"))) 33*67e74705SXin Li 34*67e74705SXin Li #define _mm512_mask_prefetch_i32gather_pd(index, mask, addr, scale, hint) __extension__ ({\ 35*67e74705SXin Li __builtin_ia32_gatherpfdpd((__mmask8)(mask), (__v8si)(__m256i)(index), \ 36*67e74705SXin Li (long long const *)(addr), (int)(scale), \ 37*67e74705SXin Li (int)(hint)); }) 38*67e74705SXin Li 39*67e74705SXin Li #define _mm512_prefetch_i32gather_pd(index, addr, scale, hint) __extension__ ({\ 40*67e74705SXin Li __builtin_ia32_gatherpfdpd((__mmask8) -1, (__v8si)(__m256i)(index), \ 41*67e74705SXin Li (long long const *)(addr), (int)(scale), \ 42*67e74705SXin Li (int)(hint)); }) 43*67e74705SXin Li 44*67e74705SXin Li #define _mm512_mask_prefetch_i32gather_ps(index, mask, addr, scale, hint) ({\ 45*67e74705SXin Li __builtin_ia32_gatherpfdps((__mmask16)(mask), \ 46*67e74705SXin Li (__v16si)(__m512i)(index), (int const *)(addr), \ 47*67e74705SXin Li (int)(scale), (int)(hint)); }) 48*67e74705SXin Li 49*67e74705SXin Li #define _mm512_prefetch_i32gather_ps(index, addr, scale, hint) ({\ 50*67e74705SXin Li __builtin_ia32_gatherpfdps((__mmask16) -1, \ 51*67e74705SXin Li (__v16si)(__m512i)(index), (int const *)(addr), \ 52*67e74705SXin Li (int)(scale), (int)(hint)); }) 53*67e74705SXin Li 54*67e74705SXin Li #define _mm512_mask_prefetch_i64gather_pd(index, mask, addr, scale, hint) __extension__ ({\ 55*67e74705SXin Li __builtin_ia32_gatherpfqpd((__mmask8)(mask), (__v8di)(__m512i)(index), \ 56*67e74705SXin Li (long long const *)(addr), (int)(scale), \ 57*67e74705SXin Li (int)(hint)); }) 58*67e74705SXin Li 59*67e74705SXin Li #define _mm512_prefetch_i64gather_pd(index, addr, scale, hint) __extension__ ({\ 60*67e74705SXin Li __builtin_ia32_gatherpfqpd((__mmask8) -1, (__v8di)(__m512i)(index), \ 61*67e74705SXin Li (long long const *)(addr), (int)(scale), \ 62*67e74705SXin Li (int)(hint)); }) 63*67e74705SXin Li 64*67e74705SXin Li #define _mm512_mask_prefetch_i64gather_ps(index, mask, addr, scale, hint) ({\ 65*67e74705SXin Li __builtin_ia32_gatherpfqps((__mmask8)(mask), (__v8di)(__m512i)(index), \ 66*67e74705SXin Li (int const *)(addr), (int)(scale), (int)(hint)); }) 67*67e74705SXin Li 68*67e74705SXin Li #define _mm512_prefetch_i64gather_ps(index, addr, scale, hint) ({\ 69*67e74705SXin Li __builtin_ia32_gatherpfqps((__mmask8) -1, (__v8di)(__m512i)(index), \ 70*67e74705SXin Li (int const *)(addr), (int)(scale), (int)(hint)); }) 71*67e74705SXin Li 72*67e74705SXin Li #define _mm512_prefetch_i32scatter_pd(addr, index, scale, hint) __extension__ ({\ 73*67e74705SXin Li __builtin_ia32_scatterpfdpd((__mmask8)-1, (__v8si)(__m256i)(index), \ 74*67e74705SXin Li (long long *)(addr), (int)(scale), \ 75*67e74705SXin Li (int)(hint)); }) 76*67e74705SXin Li 77*67e74705SXin Li #define _mm512_mask_prefetch_i32scatter_pd(addr, mask, index, scale, hint) __extension__ ({\ 78*67e74705SXin Li __builtin_ia32_scatterpfdpd((__mmask8)(mask), (__v8si)(__m256i)(index), \ 79*67e74705SXin Li (long long *)(addr), (int)(scale), \ 80*67e74705SXin Li (int)(hint)); }) 81*67e74705SXin Li 82*67e74705SXin Li #define _mm512_prefetch_i32scatter_ps(addr, index, scale, hint) __extension__ ({\ 83*67e74705SXin Li __builtin_ia32_scatterpfdps((__mmask16)-1, (__v16si)(__m512i)(index), \ 84*67e74705SXin Li (int *)(addr), (int)(scale), (int)(hint)); }) 85*67e74705SXin Li 86*67e74705SXin Li #define _mm512_mask_prefetch_i32scatter_ps(addr, mask, index, scale, hint) __extension__ ({\ 87*67e74705SXin Li __builtin_ia32_scatterpfdps((__mmask16)(mask), \ 88*67e74705SXin Li (__v16si)(__m512i)(index), (int *)(addr), \ 89*67e74705SXin Li (int)(scale), (int)(hint)); }) 90*67e74705SXin Li 91*67e74705SXin Li #define _mm512_prefetch_i64scatter_pd(addr, index, scale, hint) __extension__ ({\ 92*67e74705SXin Li __builtin_ia32_scatterpfqpd((__mmask8)-1, (__v8di)(__m512i)(index), \ 93*67e74705SXin Li (long long *)(addr), (int)(scale), \ 94*67e74705SXin Li (int)(hint)); }) 95*67e74705SXin Li 96*67e74705SXin Li #define _mm512_mask_prefetch_i64scatter_pd(addr, mask, index, scale, hint) __extension__ ({\ 97*67e74705SXin Li __builtin_ia32_scatterpfqpd((__mmask8)(mask), (__v8di)(__m512i)(index), \ 98*67e74705SXin Li (long long *)(addr), (int)(scale), \ 99*67e74705SXin Li (int)(hint)); }) 100*67e74705SXin Li 101*67e74705SXin Li #define _mm512_prefetch_i64scatter_ps(addr, index, scale, hint) __extension__ ({\ 102*67e74705SXin Li __builtin_ia32_scatterpfqps((__mmask8)-1, (__v8di)(__m512i)(index), \ 103*67e74705SXin Li (int *)(addr), (int)(scale), (int)(hint)); }) 104*67e74705SXin Li 105*67e74705SXin Li #define _mm512_mask_prefetch_i64scatter_ps(addr, mask, index, scale, hint) __extension__ ({\ 106*67e74705SXin Li __builtin_ia32_scatterpfqps((__mmask8)(mask), (__v8di)(__m512i)(index), \ 107*67e74705SXin Li (int *)(addr), (int)(scale), (int)(hint)); }) 108*67e74705SXin Li 109*67e74705SXin Li #undef __DEFAULT_FN_ATTRS 110*67e74705SXin Li 111*67e74705SXin Li #endif 112