Home | History | Annotate | Line # | Download | only in i386
avx512erintrin.h revision 1.1
      1  1.1  mrg /* Copyright (C) 2013-2015 Free Software Foundation, Inc.
      2  1.1  mrg 
      3  1.1  mrg    This file is part of GCC.
      4  1.1  mrg 
      5  1.1  mrg    GCC is free software; you can redistribute it and/or modify
      6  1.1  mrg    it under the terms of the GNU General Public License as published by
      7  1.1  mrg    the Free Software Foundation; either version 3, or (at your option)
      8  1.1  mrg    any later version.
      9  1.1  mrg 
     10  1.1  mrg    GCC is distributed in the hope that it will be useful,
     11  1.1  mrg    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  1.1  mrg    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13  1.1  mrg    GNU General Public License for more details.
     14  1.1  mrg 
     15  1.1  mrg    Under Section 7 of GPL version 3, you are granted additional
     16  1.1  mrg    permissions described in the GCC Runtime Library Exception, version
     17  1.1  mrg    3.1, as published by the Free Software Foundation.
     18  1.1  mrg 
     19  1.1  mrg    You should have received a copy of the GNU General Public License and
     20  1.1  mrg    a copy of the GCC Runtime Library Exception along with this program;
     21  1.1  mrg    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     22  1.1  mrg    <http://www.gnu.org/licenses/>.  */
     23  1.1  mrg 
     24  1.1  mrg #ifndef _IMMINTRIN_H_INCLUDED
     25  1.1  mrg #error "Never use <avx512erintrin.h> directly; include <immintrin.h> instead."
     26  1.1  mrg #endif
     27  1.1  mrg 
     28  1.1  mrg #ifndef _AVX512ERINTRIN_H_INCLUDED
     29  1.1  mrg #define _AVX512ERINTRIN_H_INCLUDED
     30  1.1  mrg 
     31  1.1  mrg #ifndef __AVX512ER__
     32  1.1  mrg #pragma GCC push_options
     33  1.1  mrg #pragma GCC target("avx512er")
     34  1.1  mrg #define __DISABLE_AVX512ER__
     35  1.1  mrg #endif /* __AVX512ER__ */
     36  1.1  mrg 
     37  1.1  mrg /* Internal data types for implementing the intrinsics.  */
     38  1.1  mrg typedef double __v8df __attribute__ ((__vector_size__ (64)));
     39  1.1  mrg typedef float __v16sf __attribute__ ((__vector_size__ (64)));
     40  1.1  mrg 
     41  1.1  mrg /* The Intel API is flexible enough that we must allow aliasing with other
     42  1.1  mrg    vector types, and their scalar components.  */
     43  1.1  mrg typedef float __m512 __attribute__ ((__vector_size__ (64), __may_alias__));
     44  1.1  mrg typedef double __m512d __attribute__ ((__vector_size__ (64), __may_alias__));
     45  1.1  mrg 
     46  1.1  mrg typedef unsigned char  __mmask8;
     47  1.1  mrg typedef unsigned short __mmask16;
     48  1.1  mrg 
     49  1.1  mrg #ifdef __OPTIMIZE__
     50  1.1  mrg extern __inline __m512d
     51  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
     52  1.1  mrg _mm512_exp2a23_round_pd (__m512d __A, int __R)
     53  1.1  mrg {
     54  1.1  mrg   __m512d __W;
     55  1.1  mrg   return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
     56  1.1  mrg 					       (__v8df) __W,
     57  1.1  mrg 					       (__mmask8) -1, __R);
     58  1.1  mrg }
     59  1.1  mrg 
     60  1.1  mrg extern __inline __m512d
     61  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
     62  1.1  mrg _mm512_mask_exp2a23_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
     63  1.1  mrg {
     64  1.1  mrg   return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
     65  1.1  mrg 					       (__v8df) __W,
     66  1.1  mrg 					       (__mmask8) __U, __R);
     67  1.1  mrg }
     68  1.1  mrg 
     69  1.1  mrg extern __inline __m512d
     70  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
     71  1.1  mrg _mm512_maskz_exp2a23_round_pd (__mmask8 __U, __m512d __A, int __R)
     72  1.1  mrg {
     73  1.1  mrg   return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
     74  1.1  mrg 					       (__v8df) _mm512_setzero_pd (),
     75  1.1  mrg 					       (__mmask8) __U, __R);
     76  1.1  mrg }
     77  1.1  mrg 
     78  1.1  mrg extern __inline __m512
     79  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
     80  1.1  mrg _mm512_exp2a23_round_ps (__m512 __A, int __R)
     81  1.1  mrg {
     82  1.1  mrg   __m512 __W;
     83  1.1  mrg   return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
     84  1.1  mrg 					      (__v16sf) __W,
     85  1.1  mrg 					      (__mmask16) -1, __R);
     86  1.1  mrg }
     87  1.1  mrg 
     88  1.1  mrg extern __inline __m512
     89  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
     90  1.1  mrg _mm512_mask_exp2a23_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
     91  1.1  mrg {
     92  1.1  mrg   return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
     93  1.1  mrg 					      (__v16sf) __W,
     94  1.1  mrg 					      (__mmask16) __U, __R);
     95  1.1  mrg }
     96  1.1  mrg 
     97  1.1  mrg extern __inline __m512
     98  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
     99  1.1  mrg _mm512_maskz_exp2a23_round_ps (__mmask16 __U, __m512 __A, int __R)
    100  1.1  mrg {
    101  1.1  mrg   return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
    102  1.1  mrg 					      (__v16sf) _mm512_setzero_ps (),
    103  1.1  mrg 					      (__mmask16) __U, __R);
    104  1.1  mrg }
    105  1.1  mrg 
    106  1.1  mrg extern __inline __m512d
    107  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    108  1.1  mrg _mm512_rcp28_round_pd (__m512d __A, int __R)
    109  1.1  mrg {
    110  1.1  mrg   __m512d __W;
    111  1.1  mrg   return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
    112  1.1  mrg 						(__v8df) __W,
    113  1.1  mrg 						(__mmask8) -1, __R);
    114  1.1  mrg }
    115  1.1  mrg 
    116  1.1  mrg extern __inline __m512d
    117  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    118  1.1  mrg _mm512_mask_rcp28_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
    119  1.1  mrg {
    120  1.1  mrg   return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
    121  1.1  mrg 						(__v8df) __W,
    122  1.1  mrg 						(__mmask8) __U, __R);
    123  1.1  mrg }
    124  1.1  mrg 
    125  1.1  mrg extern __inline __m512d
    126  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    127  1.1  mrg _mm512_maskz_rcp28_round_pd (__mmask8 __U, __m512d __A, int __R)
    128  1.1  mrg {
    129  1.1  mrg   return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
    130  1.1  mrg 						(__v8df) _mm512_setzero_pd (),
    131  1.1  mrg 						(__mmask8) __U, __R);
    132  1.1  mrg }
    133  1.1  mrg 
    134  1.1  mrg extern __inline __m512
    135  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    136  1.1  mrg _mm512_rcp28_round_ps (__m512 __A, int __R)
    137  1.1  mrg {
    138  1.1  mrg   __m512 __W;
    139  1.1  mrg   return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
    140  1.1  mrg 					       (__v16sf) __W,
    141  1.1  mrg 					       (__mmask16) -1, __R);
    142  1.1  mrg }
    143  1.1  mrg 
    144  1.1  mrg extern __inline __m512
    145  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    146  1.1  mrg _mm512_mask_rcp28_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
    147  1.1  mrg {
    148  1.1  mrg   return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
    149  1.1  mrg 					       (__v16sf) __W,
    150  1.1  mrg 					       (__mmask16) __U, __R);
    151  1.1  mrg }
    152  1.1  mrg 
    153  1.1  mrg extern __inline __m512
    154  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    155  1.1  mrg _mm512_maskz_rcp28_round_ps (__mmask16 __U, __m512 __A, int __R)
    156  1.1  mrg {
    157  1.1  mrg   return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
    158  1.1  mrg 					       (__v16sf) _mm512_setzero_ps (),
    159  1.1  mrg 					       (__mmask16) __U, __R);
    160  1.1  mrg }
    161  1.1  mrg 
    162  1.1  mrg extern __inline __m128d
    163  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    164  1.1  mrg _mm_rcp28_round_sd (__m128d __A, __m128d __B, int __R)
    165  1.1  mrg {
    166  1.1  mrg   return (__m128d) __builtin_ia32_rcp28sd_round ((__v2df) __B,
    167  1.1  mrg 						 (__v2df) __A,
    168  1.1  mrg 						 __R);
    169  1.1  mrg }
    170  1.1  mrg 
    171  1.1  mrg extern __inline __m128
    172  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    173  1.1  mrg _mm_rcp28_round_ss (__m128 __A, __m128 __B, int __R)
    174  1.1  mrg {
    175  1.1  mrg   return (__m128) __builtin_ia32_rcp28ss_round ((__v4sf) __B,
    176  1.1  mrg 						(__v4sf) __A,
    177  1.1  mrg 						__R);
    178  1.1  mrg }
    179  1.1  mrg 
    180  1.1  mrg extern __inline __m512d
    181  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    182  1.1  mrg _mm512_rsqrt28_round_pd (__m512d __A, int __R)
    183  1.1  mrg {
    184  1.1  mrg   __m512d __W;
    185  1.1  mrg   return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
    186  1.1  mrg 						  (__v8df) __W,
    187  1.1  mrg 						  (__mmask8) -1, __R);
    188  1.1  mrg }
    189  1.1  mrg 
    190  1.1  mrg extern __inline __m512d
    191  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    192  1.1  mrg _mm512_mask_rsqrt28_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
    193  1.1  mrg {
    194  1.1  mrg   return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
    195  1.1  mrg 						  (__v8df) __W,
    196  1.1  mrg 						  (__mmask8) __U, __R);
    197  1.1  mrg }
    198  1.1  mrg 
    199  1.1  mrg extern __inline __m512d
    200  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    201  1.1  mrg _mm512_maskz_rsqrt28_round_pd (__mmask8 __U, __m512d __A, int __R)
    202  1.1  mrg {
    203  1.1  mrg   return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
    204  1.1  mrg 						  (__v8df) _mm512_setzero_pd (),
    205  1.1  mrg 						  (__mmask8) __U, __R);
    206  1.1  mrg }
    207  1.1  mrg 
    208  1.1  mrg extern __inline __m512
    209  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    210  1.1  mrg _mm512_rsqrt28_round_ps (__m512 __A, int __R)
    211  1.1  mrg {
    212  1.1  mrg   __m512 __W;
    213  1.1  mrg   return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
    214  1.1  mrg 						 (__v16sf) __W,
    215  1.1  mrg 						 (__mmask16) -1, __R);
    216  1.1  mrg }
    217  1.1  mrg 
    218  1.1  mrg extern __inline __m512
    219  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    220  1.1  mrg _mm512_mask_rsqrt28_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
    221  1.1  mrg {
    222  1.1  mrg   return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
    223  1.1  mrg 						 (__v16sf) __W,
    224  1.1  mrg 						 (__mmask16) __U, __R);
    225  1.1  mrg }
    226  1.1  mrg 
    227  1.1  mrg extern __inline __m512
    228  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    229  1.1  mrg _mm512_maskz_rsqrt28_round_ps (__mmask16 __U, __m512 __A, int __R)
    230  1.1  mrg {
    231  1.1  mrg   return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
    232  1.1  mrg 						 (__v16sf) _mm512_setzero_ps (),
    233  1.1  mrg 						 (__mmask16) __U, __R);
    234  1.1  mrg }
    235  1.1  mrg 
    236  1.1  mrg extern __inline __m128d
    237  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    238  1.1  mrg _mm_rsqrt28_round_sd (__m128d __A, __m128d __B, int __R)
    239  1.1  mrg {
    240  1.1  mrg   return (__m128d) __builtin_ia32_rsqrt28sd_round ((__v2df) __B,
    241  1.1  mrg 						   (__v2df) __A,
    242  1.1  mrg 						   __R);
    243  1.1  mrg }
    244  1.1  mrg 
    245  1.1  mrg extern __inline __m128
    246  1.1  mrg __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
    247  1.1  mrg _mm_rsqrt28_round_ss (__m128 __A, __m128 __B, int __R)
    248  1.1  mrg {
    249  1.1  mrg   return (__m128) __builtin_ia32_rsqrt28ss_round ((__v4sf) __B,
    250  1.1  mrg 						  (__v4sf) __A,
    251  1.1  mrg 						  __R);
    252  1.1  mrg }
    253  1.1  mrg 
    254  1.1  mrg #else
    255  1.1  mrg #define _mm512_exp2a23_round_pd(A, C)            \
    256  1.1  mrg     __builtin_ia32_exp2pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
    257  1.1  mrg 
    258  1.1  mrg #define _mm512_mask_exp2a23_round_pd(W, U, A, C) \
    259  1.1  mrg     __builtin_ia32_exp2pd_mask(A, W, U, C)
    260  1.1  mrg 
    261  1.1  mrg #define _mm512_maskz_exp2a23_round_pd(U, A, C)   \
    262  1.1  mrg     __builtin_ia32_exp2pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
    263  1.1  mrg 
    264  1.1  mrg #define _mm512_exp2a23_round_ps(A, C)            \
    265  1.1  mrg     __builtin_ia32_exp2ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
    266  1.1  mrg 
    267  1.1  mrg #define _mm512_mask_exp2a23_round_ps(W, U, A, C) \
    268  1.1  mrg     __builtin_ia32_exp2ps_mask(A, W, U, C)
    269  1.1  mrg 
    270  1.1  mrg #define _mm512_maskz_exp2a23_round_ps(U, A, C)   \
    271  1.1  mrg     __builtin_ia32_exp2ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
    272  1.1  mrg 
    273  1.1  mrg #define _mm512_rcp28_round_pd(A, C)            \
    274  1.1  mrg     __builtin_ia32_rcp28pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
    275  1.1  mrg 
    276  1.1  mrg #define _mm512_mask_rcp28_round_pd(W, U, A, C) \
    277  1.1  mrg     __builtin_ia32_rcp28pd_mask(A, W, U, C)
    278  1.1  mrg 
    279  1.1  mrg #define _mm512_maskz_rcp28_round_pd(U, A, C)   \
    280  1.1  mrg     __builtin_ia32_rcp28pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
    281  1.1  mrg 
    282  1.1  mrg #define _mm512_rcp28_round_ps(A, C)            \
    283  1.1  mrg     __builtin_ia32_rcp28ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
    284  1.1  mrg 
    285  1.1  mrg #define _mm512_mask_rcp28_round_ps(W, U, A, C) \
    286  1.1  mrg     __builtin_ia32_rcp28ps_mask(A, W, U, C)
    287  1.1  mrg 
    288  1.1  mrg #define _mm512_maskz_rcp28_round_ps(U, A, C)   \
    289  1.1  mrg     __builtin_ia32_rcp28ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
    290  1.1  mrg 
    291  1.1  mrg #define _mm512_rsqrt28_round_pd(A, C)            \
    292  1.1  mrg     __builtin_ia32_rsqrt28pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
    293  1.1  mrg 
    294  1.1  mrg #define _mm512_mask_rsqrt28_round_pd(W, U, A, C) \
    295  1.1  mrg     __builtin_ia32_rsqrt28pd_mask(A, W, U, C)
    296  1.1  mrg 
    297  1.1  mrg #define _mm512_maskz_rsqrt28_round_pd(U, A, C)   \
    298  1.1  mrg     __builtin_ia32_rsqrt28pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
    299  1.1  mrg 
    300  1.1  mrg #define _mm512_rsqrt28_round_ps(A, C)            \
    301  1.1  mrg     __builtin_ia32_rsqrt28ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
    302  1.1  mrg 
    303  1.1  mrg #define _mm512_mask_rsqrt28_round_ps(W, U, A, C) \
    304  1.1  mrg     __builtin_ia32_rsqrt28ps_mask(A, W, U, C)
    305  1.1  mrg 
    306  1.1  mrg #define _mm512_maskz_rsqrt28_round_ps(U, A, C)   \
    307  1.1  mrg     __builtin_ia32_rsqrt28ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
    308  1.1  mrg 
    309  1.1  mrg #define _mm_rcp28_round_sd(A, B, R)	\
    310  1.1  mrg     __builtin_ia32_rcp28sd_round(A, B, R)
    311  1.1  mrg 
    312  1.1  mrg #define _mm_rcp28_round_ss(A, B, R)	\
    313  1.1  mrg     __builtin_ia32_rcp28ss_round(A, B, R)
    314  1.1  mrg 
    315  1.1  mrg #define _mm_rsqrt28_round_sd(A, B, R)	\
    316  1.1  mrg     __builtin_ia32_rsqrt28sd_round(A, B, R)
    317  1.1  mrg 
    318  1.1  mrg #define _mm_rsqrt28_round_ss(A, B, R)	\
    319  1.1  mrg     __builtin_ia32_rsqrt28ss_round(A, B, R)
    320  1.1  mrg 
    321  1.1  mrg #endif
    322  1.1  mrg 
    323  1.1  mrg #define _mm512_exp2a23_pd(A)                    \
    324  1.1  mrg     _mm512_exp2a23_round_pd(A, _MM_FROUND_CUR_DIRECTION)
    325  1.1  mrg 
    326  1.1  mrg #define _mm512_mask_exp2a23_pd(W, U, A)   \
    327  1.1  mrg     _mm512_mask_exp2a23_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
    328  1.1  mrg 
    329  1.1  mrg #define _mm512_maskz_exp2a23_pd(U, A)     \
    330  1.1  mrg     _mm512_maskz_exp2a23_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
    331  1.1  mrg 
    332  1.1  mrg #define _mm512_exp2a23_ps(A)                    \
    333  1.1  mrg     _mm512_exp2a23_round_ps(A, _MM_FROUND_CUR_DIRECTION)
    334  1.1  mrg 
    335  1.1  mrg #define _mm512_mask_exp2a23_ps(W, U, A)   \
    336  1.1  mrg     _mm512_mask_exp2a23_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
    337  1.1  mrg 
    338  1.1  mrg #define _mm512_maskz_exp2a23_ps(U, A)     \
    339  1.1  mrg     _mm512_maskz_exp2a23_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
    340  1.1  mrg 
    341  1.1  mrg #define _mm512_rcp28_pd(A)                    \
    342  1.1  mrg     _mm512_rcp28_round_pd(A, _MM_FROUND_CUR_DIRECTION)
    343  1.1  mrg 
    344  1.1  mrg #define _mm512_mask_rcp28_pd(W, U, A)   \
    345  1.1  mrg     _mm512_mask_rcp28_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
    346  1.1  mrg 
    347  1.1  mrg #define _mm512_maskz_rcp28_pd(U, A)     \
    348  1.1  mrg     _mm512_maskz_rcp28_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
    349  1.1  mrg 
    350  1.1  mrg #define _mm512_rcp28_ps(A)                    \
    351  1.1  mrg     _mm512_rcp28_round_ps(A, _MM_FROUND_CUR_DIRECTION)
    352  1.1  mrg 
    353  1.1  mrg #define _mm512_mask_rcp28_ps(W, U, A)   \
    354  1.1  mrg     _mm512_mask_rcp28_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
    355  1.1  mrg 
    356  1.1  mrg #define _mm512_maskz_rcp28_ps(U, A)     \
    357  1.1  mrg     _mm512_maskz_rcp28_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
    358  1.1  mrg 
    359  1.1  mrg #define _mm512_rsqrt28_pd(A)                    \
    360  1.1  mrg     _mm512_rsqrt28_round_pd(A, _MM_FROUND_CUR_DIRECTION)
    361  1.1  mrg 
    362  1.1  mrg #define _mm512_mask_rsqrt28_pd(W, U, A)   \
    363  1.1  mrg     _mm512_mask_rsqrt28_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
    364  1.1  mrg 
    365  1.1  mrg #define _mm512_maskz_rsqrt28_pd(U, A)     \
    366  1.1  mrg     _mm512_maskz_rsqrt28_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
    367  1.1  mrg 
    368  1.1  mrg #define _mm512_rsqrt28_ps(A)                    \
    369  1.1  mrg     _mm512_rsqrt28_round_ps(A, _MM_FROUND_CUR_DIRECTION)
    370  1.1  mrg 
    371  1.1  mrg #define _mm512_mask_rsqrt28_ps(W, U, A)   \
    372  1.1  mrg     _mm512_mask_rsqrt28_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
    373  1.1  mrg 
    374  1.1  mrg #define _mm512_maskz_rsqrt28_ps(U, A)     \
    375  1.1  mrg     _mm512_maskz_rsqrt28_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
    376  1.1  mrg 
    377  1.1  mrg #define _mm_rcp28_sd(A, B)	\
    378  1.1  mrg     __builtin_ia32_rcp28sd_round(B, A, _MM_FROUND_CUR_DIRECTION)
    379  1.1  mrg 
    380  1.1  mrg #define _mm_rcp28_ss(A, B)	\
    381  1.1  mrg     __builtin_ia32_rcp28ss_round(B, A, _MM_FROUND_CUR_DIRECTION)
    382  1.1  mrg 
    383  1.1  mrg #define _mm_rsqrt28_sd(A, B)	\
    384  1.1  mrg     __builtin_ia32_rsqrt28sd_round(B, A, _MM_FROUND_CUR_DIRECTION)
    385  1.1  mrg 
    386  1.1  mrg #define _mm_rsqrt28_ss(A, B)	\
    387  1.1  mrg     __builtin_ia32_rsqrt28ss_round(B, A, _MM_FROUND_CUR_DIRECTION)
    388  1.1  mrg 
    389  1.1  mrg #ifdef __DISABLE_AVX512ER__
    390  1.1  mrg #undef __DISABLE_AVX512ER__
    391  1.1  mrg #pragma GCC pop_options
    392  1.1  mrg #endif /* __DISABLE_AVX512ER__ */
    393  1.1  mrg 
    394  1.1  mrg #endif /* _AVX512ERINTRIN_H_INCLUDED */
    395