Home | History | Annotate | Line # | Download | only in i386
      1  1.1.1.4  mrg /* Copyright (C) 2017-2022 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 <gfniintrin.h> directly; include <immintrin.h> instead."
     26      1.1  mrg #endif
     27      1.1  mrg 
     28      1.1  mrg #ifndef _GFNIINTRIN_H_INCLUDED
     29      1.1  mrg #define _GFNIINTRIN_H_INCLUDED
     30      1.1  mrg 
     31      1.1  mrg #if !defined(__GFNI__) || !defined(__SSE2__)
     32      1.1  mrg #pragma GCC push_options
     33      1.1  mrg #pragma GCC target("gfni,sse2")
     34      1.1  mrg #define __DISABLE_GFNI__
     35      1.1  mrg #endif /* __GFNI__ */
     36      1.1  mrg 
     37      1.1  mrg extern __inline __m128i
     38      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     39      1.1  mrg _mm_gf2p8mul_epi8 (__m128i __A, __m128i __B)
     40      1.1  mrg {
     41      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8mulb_v16qi((__v16qi) __A,
     42      1.1  mrg 						   (__v16qi) __B);
     43      1.1  mrg }
     44      1.1  mrg 
     45      1.1  mrg #ifdef __OPTIMIZE__
     46      1.1  mrg extern __inline __m128i
     47      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     48      1.1  mrg _mm_gf2p8affineinv_epi64_epi8 (__m128i __A, __m128i __B, const int __C)
     49      1.1  mrg {
     50      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8affineinvqb_v16qi ((__v16qi) __A,
     51      1.1  mrg 							   (__v16qi) __B,
     52      1.1  mrg 							    __C);
     53      1.1  mrg }
     54      1.1  mrg 
     55      1.1  mrg extern __inline __m128i
     56      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     57      1.1  mrg _mm_gf2p8affine_epi64_epi8 (__m128i __A, __m128i __B, const int __C)
     58      1.1  mrg {
     59      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8affineqb_v16qi ((__v16qi) __A,
     60      1.1  mrg 							(__v16qi) __B, __C);
     61      1.1  mrg }
     62      1.1  mrg #else
     63      1.1  mrg #define _mm_gf2p8affineinv_epi64_epi8(A, B, C)				   \
     64      1.1  mrg   ((__m128i) __builtin_ia32_vgf2p8affineinvqb_v16qi((__v16qi)(__m128i)(A), \
     65      1.1  mrg 					   (__v16qi)(__m128i)(B), (int)(C)))
     66      1.1  mrg #define _mm_gf2p8affine_epi64_epi8(A, B, C)				   \
     67      1.1  mrg   ((__m128i) __builtin_ia32_vgf2p8affineqb_v16qi ((__v16qi)(__m128i)(A),   \
     68      1.1  mrg 					   (__v16qi)(__m128i)(B), (int)(C)))
     69      1.1  mrg #endif
     70      1.1  mrg 
     71      1.1  mrg #ifdef __DISABLE_GFNI__
     72      1.1  mrg #undef __DISABLE_GFNI__
     73      1.1  mrg #pragma GCC pop_options
     74      1.1  mrg #endif /* __DISABLE_GFNI__ */
     75      1.1  mrg 
     76      1.1  mrg #if !defined(__GFNI__) || !defined(__AVX__)
     77      1.1  mrg #pragma GCC push_options
     78      1.1  mrg #pragma GCC target("gfni,avx")
     79      1.1  mrg #define __DISABLE_GFNIAVX__
     80      1.1  mrg #endif /* __GFNIAVX__ */
     81      1.1  mrg 
     82      1.1  mrg extern __inline __m256i
     83      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     84      1.1  mrg _mm256_gf2p8mul_epi8 (__m256i __A, __m256i __B)
     85      1.1  mrg {
     86      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8mulb_v32qi ((__v32qi) __A,
     87      1.1  mrg 						    (__v32qi) __B);
     88      1.1  mrg }
     89      1.1  mrg 
     90      1.1  mrg #ifdef __OPTIMIZE__
     91      1.1  mrg extern __inline __m256i
     92      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
     93      1.1  mrg _mm256_gf2p8affineinv_epi64_epi8 (__m256i __A, __m256i __B, const int __C)
     94      1.1  mrg {
     95      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8affineinvqb_v32qi ((__v32qi) __A,
     96      1.1  mrg 							   (__v32qi) __B,
     97      1.1  mrg 							    __C);
     98      1.1  mrg }
     99      1.1  mrg 
    100      1.1  mrg extern __inline __m256i
    101      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    102      1.1  mrg _mm256_gf2p8affine_epi64_epi8 (__m256i __A, __m256i __B, const int __C)
    103      1.1  mrg {
    104      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8affineqb_v32qi ((__v32qi) __A,
    105      1.1  mrg 							(__v32qi) __B, __C);
    106      1.1  mrg }
    107      1.1  mrg #else
    108      1.1  mrg #define _mm256_gf2p8affineinv_epi64_epi8(A, B, C)			   \
    109      1.1  mrg   ((__m256i) __builtin_ia32_vgf2p8affineinvqb_v32qi((__v32qi)(__m256i)(A), \
    110      1.1  mrg 						    (__v32qi)(__m256i)(B), \
    111      1.1  mrg 						    (int)(C)))
    112      1.1  mrg #define _mm256_gf2p8affine_epi64_epi8(A, B, C)				   \
    113      1.1  mrg   ((__m256i) __builtin_ia32_vgf2p8affineqb_v32qi ((__v32qi)(__m256i)(A),   \
    114      1.1  mrg 					(   __v32qi)(__m256i)(B), (int)(C)))
    115      1.1  mrg #endif
    116      1.1  mrg 
    117      1.1  mrg #ifdef __DISABLE_GFNIAVX__
    118      1.1  mrg #undef __DISABLE_GFNIAVX__
    119      1.1  mrg #pragma GCC pop_options
    120      1.1  mrg #endif /* __GFNIAVX__ */
    121      1.1  mrg 
    122      1.1  mrg #if !defined(__GFNI__) || !defined(__AVX512VL__)
    123      1.1  mrg #pragma GCC push_options
    124      1.1  mrg #pragma GCC target("gfni,avx512vl")
    125      1.1  mrg #define __DISABLE_GFNIAVX512VL__
    126      1.1  mrg #endif /* __GFNIAVX512VL__ */
    127      1.1  mrg 
    128      1.1  mrg extern __inline __m128i
    129      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    130      1.1  mrg _mm_mask_gf2p8mul_epi8 (__m128i __A, __mmask16 __B, __m128i __C, __m128i __D)
    131      1.1  mrg {
    132      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8mulb_v16qi_mask ((__v16qi) __C,
    133      1.1  mrg 							 (__v16qi) __D,
    134      1.1  mrg 							 (__v16qi)__A, __B);
    135      1.1  mrg }
    136      1.1  mrg 
    137      1.1  mrg extern __inline __m128i
    138      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    139      1.1  mrg _mm_maskz_gf2p8mul_epi8 (__mmask16 __A, __m128i __B, __m128i __C)
    140      1.1  mrg {
    141      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8mulb_v16qi_mask ((__v16qi) __B,
    142      1.1  mrg 			(__v16qi) __C, (__v16qi) _mm_setzero_si128 (), __A);
    143      1.1  mrg }
    144      1.1  mrg 
    145      1.1  mrg #ifdef __OPTIMIZE__
    146      1.1  mrg extern __inline __m128i
    147      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    148      1.1  mrg _mm_mask_gf2p8affineinv_epi64_epi8 (__m128i __A, __mmask16 __B, __m128i __C,
    149      1.1  mrg 				    __m128i __D, const int __E)
    150      1.1  mrg {
    151      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8affineinvqb_v16qi_mask ((__v16qi) __C,
    152      1.1  mrg 								(__v16qi) __D,
    153      1.1  mrg 								 __E,
    154      1.1  mrg 								(__v16qi)__A,
    155      1.1  mrg 								 __B);
    156      1.1  mrg }
    157      1.1  mrg 
    158      1.1  mrg extern __inline __m128i
    159      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    160      1.1  mrg _mm_maskz_gf2p8affineinv_epi64_epi8 (__mmask16 __A, __m128i __B, __m128i __C,
    161      1.1  mrg 				     const int __D)
    162      1.1  mrg {
    163      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8affineinvqb_v16qi_mask ((__v16qi) __B,
    164      1.1  mrg 						(__v16qi) __C, __D,
    165      1.1  mrg 						(__v16qi) _mm_setzero_si128 (),
    166      1.1  mrg 						 __A);
    167      1.1  mrg }
    168      1.1  mrg 
    169      1.1  mrg extern __inline __m128i
    170      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    171      1.1  mrg _mm_mask_gf2p8affine_epi64_epi8 (__m128i __A, __mmask16 __B, __m128i __C,
    172      1.1  mrg 				 __m128i __D, const int __E)
    173      1.1  mrg {
    174      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8affineqb_v16qi_mask ((__v16qi) __C,
    175      1.1  mrg 					(__v16qi) __D, __E, (__v16qi)__A, __B);
    176      1.1  mrg }
    177      1.1  mrg 
    178      1.1  mrg extern __inline __m128i
    179      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    180      1.1  mrg _mm_maskz_gf2p8affine_epi64_epi8 (__mmask16 __A, __m128i __B, __m128i __C,
    181      1.1  mrg 				  const int __D)
    182      1.1  mrg {
    183      1.1  mrg   return (__m128i) __builtin_ia32_vgf2p8affineqb_v16qi_mask ((__v16qi) __B,
    184      1.1  mrg 		     (__v16qi) __C, __D, (__v16qi) _mm_setzero_si128 (), __A);
    185      1.1  mrg }
    186      1.1  mrg #else
    187      1.1  mrg #define _mm_mask_gf2p8affineinv_epi64_epi8(A, B, C, D, E) 		   \
    188      1.1  mrg   ((__m128i) __builtin_ia32_vgf2p8affineinvqb_v16qi_mask(		   \
    189      1.1  mrg 			(__v16qi)(__m128i)(C), (__v16qi)(__m128i)(D),      \
    190      1.1  mrg 			(int)(E), (__v16qi)(__m128i)(A), (__mmask16)(B)))
    191      1.1  mrg #define _mm_maskz_gf2p8affineinv_epi64_epi8(A, B, C, D) \
    192      1.1  mrg   ((__m128i) __builtin_ia32_vgf2p8affineinvqb_v16qi_mask(		   \
    193      1.1  mrg 			(__v16qi)(__m128i)(B), (__v16qi)(__m128i)(C),	   \
    194      1.1  mrg 			(int)(D), (__v16qi)(__m128i) _mm_setzero_si128 (), \
    195      1.1  mrg 			(__mmask16)(A)))
    196      1.1  mrg #define _mm_mask_gf2p8affine_epi64_epi8(A, B, C, D, E) \
    197      1.1  mrg   ((__m128i) __builtin_ia32_vgf2p8affineqb_v16qi_mask((__v16qi)(__m128i)(C),\
    198      1.1  mrg       (__v16qi)(__m128i)(D), (int)(E), (__v16qi)(__m128i)(A), (__mmask16)(B)))
    199      1.1  mrg #define _mm_maskz_gf2p8affine_epi64_epi8(A, B, C, D)			    \
    200      1.1  mrg   ((__m128i) __builtin_ia32_vgf2p8affineqb_v16qi_mask((__v16qi)(__m128i)(B),\
    201      1.1  mrg 		(__v16qi)(__m128i)(C), (int)(D),			    \
    202      1.1  mrg 		(__v16qi)(__m128i) _mm_setzero_si128 (), (__mmask16)(A)))
    203      1.1  mrg #endif
    204      1.1  mrg 
    205      1.1  mrg #ifdef __DISABLE_GFNIAVX512VL__
    206      1.1  mrg #undef __DISABLE_GFNIAVX512VL__
    207      1.1  mrg #pragma GCC pop_options
    208      1.1  mrg #endif /* __GFNIAVX512VL__ */
    209      1.1  mrg 
    210      1.1  mrg #if !defined(__GFNI__) || !defined(__AVX512VL__) || !defined(__AVX512BW__)
    211      1.1  mrg #pragma GCC push_options
    212      1.1  mrg #pragma GCC target("gfni,avx512vl,avx512bw")
    213      1.1  mrg #define __DISABLE_GFNIAVX512VLBW__
    214      1.1  mrg #endif /* __GFNIAVX512VLBW__ */
    215      1.1  mrg 
    216      1.1  mrg extern __inline __m256i
    217      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    218      1.1  mrg _mm256_mask_gf2p8mul_epi8 (__m256i __A, __mmask32 __B, __m256i __C,
    219      1.1  mrg 			   __m256i __D)
    220      1.1  mrg {
    221      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8mulb_v32qi_mask ((__v32qi) __C,
    222      1.1  mrg 							 (__v32qi) __D,
    223      1.1  mrg 							 (__v32qi)__A, __B);
    224      1.1  mrg }
    225      1.1  mrg 
    226      1.1  mrg extern __inline __m256i
    227      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    228      1.1  mrg _mm256_maskz_gf2p8mul_epi8 (__mmask32 __A, __m256i __B, __m256i __C)
    229      1.1  mrg {
    230      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8mulb_v32qi_mask ((__v32qi) __B,
    231      1.1  mrg 			(__v32qi) __C, (__v32qi) _mm256_setzero_si256 (), __A);
    232      1.1  mrg }
    233      1.1  mrg 
    234      1.1  mrg #ifdef __OPTIMIZE__
    235      1.1  mrg extern __inline __m256i
    236      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    237      1.1  mrg _mm256_mask_gf2p8affineinv_epi64_epi8 (__m256i __A, __mmask32 __B,
    238      1.1  mrg 				       __m256i __C, __m256i __D, const int __E)
    239      1.1  mrg {
    240      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8affineinvqb_v32qi_mask ((__v32qi) __C,
    241      1.1  mrg 								(__v32qi) __D,
    242      1.1  mrg 							 	 __E,
    243      1.1  mrg 								(__v32qi)__A,
    244      1.1  mrg 								 __B);
    245      1.1  mrg }
    246      1.1  mrg 
    247      1.1  mrg extern __inline __m256i
    248      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    249      1.1  mrg _mm256_maskz_gf2p8affineinv_epi64_epi8 (__mmask32 __A, __m256i __B,
    250      1.1  mrg 					__m256i __C, const int __D)
    251      1.1  mrg {
    252      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8affineinvqb_v32qi_mask ((__v32qi) __B,
    253      1.1  mrg 				      (__v32qi) __C, __D,
    254      1.1  mrg 				      (__v32qi) _mm256_setzero_si256 (), __A);
    255      1.1  mrg }
    256      1.1  mrg 
    257      1.1  mrg extern __inline __m256i
    258      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    259      1.1  mrg _mm256_mask_gf2p8affine_epi64_epi8 (__m256i __A, __mmask32 __B, __m256i __C,
    260      1.1  mrg 				    __m256i __D, const int __E)
    261      1.1  mrg {
    262      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8affineqb_v32qi_mask ((__v32qi) __C,
    263      1.1  mrg 							     (__v32qi) __D,
    264      1.1  mrg 							      __E,
    265      1.1  mrg 							     (__v32qi)__A,
    266      1.1  mrg 							      __B);
    267      1.1  mrg }
    268      1.1  mrg 
    269      1.1  mrg extern __inline __m256i
    270      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    271      1.1  mrg _mm256_maskz_gf2p8affine_epi64_epi8 (__mmask32 __A, __m256i __B,
    272      1.1  mrg 				     __m256i __C, const int __D)
    273      1.1  mrg {
    274      1.1  mrg   return (__m256i) __builtin_ia32_vgf2p8affineqb_v32qi_mask ((__v32qi) __B,
    275      1.1  mrg 		(__v32qi) __C, __D, (__v32qi)_mm256_setzero_si256 (), __A);
    276      1.1  mrg }
    277      1.1  mrg #else
    278      1.1  mrg #define _mm256_mask_gf2p8affineinv_epi64_epi8(A, B, C, D, E)		\
    279      1.1  mrg   ((__m256i) __builtin_ia32_vgf2p8affineinvqb_v32qi_mask(		\
    280      1.1  mrg 	(__v32qi)(__m256i)(C), (__v32qi)(__m256i)(D), (int)(E),		\
    281      1.1  mrg 	(__v32qi)(__m256i)(A), (__mmask32)(B)))
    282      1.1  mrg #define _mm256_maskz_gf2p8affineinv_epi64_epi8(A, B, C, D)		\
    283      1.1  mrg   ((__m256i) __builtin_ia32_vgf2p8affineinvqb_v32qi_mask(		\
    284      1.1  mrg 	(__v32qi)(__m256i)(B), (__v32qi)(__m256i)(C), (int)(D),		\
    285      1.1  mrg 	(__v32qi)(__m256i) _mm256_setzero_si256 (), (__mmask32)(A)))
    286      1.1  mrg #define _mm256_mask_gf2p8affine_epi64_epi8(A, B, C, D, E) 		    \
    287      1.1  mrg   ((__m256i) __builtin_ia32_vgf2p8affineqb_v32qi_mask((__v32qi)(__m256i)(C),\
    288      1.1  mrg 	(__v32qi)(__m256i)(D), (int)(E), (__v32qi)(__m256i)(A), (__mmask32)(B)))
    289      1.1  mrg #define _mm256_maskz_gf2p8affine_epi64_epi8(A, B, C, D)			    \
    290      1.1  mrg   ((__m256i) __builtin_ia32_vgf2p8affineqb_v32qi_mask((__v32qi)(__m256i)(B),\
    291      1.1  mrg 	 (__v32qi)(__m256i)(C), (int)(D),				    \
    292      1.1  mrg 	 (__v32qi)(__m256i) _mm256_setzero_si256 (), (__mmask32)(A)))
    293      1.1  mrg #endif
    294      1.1  mrg 
    295      1.1  mrg #ifdef __DISABLE_GFNIAVX512VLBW__
    296      1.1  mrg #undef __DISABLE_GFNIAVX512VLBW__
    297      1.1  mrg #pragma GCC pop_options
    298      1.1  mrg #endif /* __GFNIAVX512VLBW__ */
    299      1.1  mrg 
    300      1.1  mrg #if !defined(__GFNI__) || !defined(__AVX512F__) || !defined(__AVX512BW__)
    301      1.1  mrg #pragma GCC push_options
    302      1.1  mrg #pragma GCC target("gfni,avx512f,avx512bw")
    303      1.1  mrg #define __DISABLE_GFNIAVX512FBW__
    304      1.1  mrg #endif /* __GFNIAVX512FBW__ */
    305      1.1  mrg 
    306      1.1  mrg extern __inline __m512i
    307      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    308      1.1  mrg _mm512_mask_gf2p8mul_epi8 (__m512i __A, __mmask64 __B, __m512i __C,
    309      1.1  mrg 			   __m512i __D)
    310      1.1  mrg {
    311      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8mulb_v64qi_mask ((__v64qi) __C,
    312      1.1  mrg 					(__v64qi) __D, (__v64qi)__A, __B);
    313      1.1  mrg }
    314      1.1  mrg 
    315      1.1  mrg extern __inline __m512i
    316      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    317      1.1  mrg _mm512_maskz_gf2p8mul_epi8 (__mmask64 __A, __m512i __B, __m512i __C)
    318      1.1  mrg {
    319      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8mulb_v64qi_mask ((__v64qi) __B,
    320      1.1  mrg 			(__v64qi) __C, (__v64qi) _mm512_setzero_si512 (), __A);
    321      1.1  mrg }
    322      1.1  mrg extern __inline __m512i
    323      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    324      1.1  mrg _mm512_gf2p8mul_epi8 (__m512i __A, __m512i __B)
    325      1.1  mrg {
    326      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8mulb_v64qi ((__v64qi) __A,
    327      1.1  mrg 						    (__v64qi) __B);
    328      1.1  mrg }
    329      1.1  mrg 
    330      1.1  mrg #ifdef __OPTIMIZE__
    331      1.1  mrg extern __inline __m512i
    332      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    333      1.1  mrg _mm512_mask_gf2p8affineinv_epi64_epi8 (__m512i __A, __mmask64 __B, __m512i __C,
    334      1.1  mrg 				       __m512i __D, const int __E)
    335      1.1  mrg {
    336      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8affineinvqb_v64qi_mask ((__v64qi) __C,
    337      1.1  mrg 								(__v64qi) __D,
    338      1.1  mrg 								 __E,
    339      1.1  mrg 								(__v64qi)__A,
    340      1.1  mrg 								 __B);
    341      1.1  mrg }
    342      1.1  mrg 
    343      1.1  mrg extern __inline __m512i
    344      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    345      1.1  mrg _mm512_maskz_gf2p8affineinv_epi64_epi8 (__mmask64 __A, __m512i __B,
    346      1.1  mrg 					__m512i __C, const int __D)
    347      1.1  mrg {
    348      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8affineinvqb_v64qi_mask ((__v64qi) __B,
    349      1.1  mrg 				(__v64qi) __C, __D,
    350      1.1  mrg 				(__v64qi) _mm512_setzero_si512 (), __A);
    351      1.1  mrg }
    352      1.1  mrg 
    353      1.1  mrg extern __inline __m512i
    354      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    355      1.1  mrg _mm512_gf2p8affineinv_epi64_epi8 (__m512i __A, __m512i __B, const int __C)
    356      1.1  mrg {
    357      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8affineinvqb_v64qi ((__v64qi) __A,
    358      1.1  mrg 							   (__v64qi) __B, __C);
    359      1.1  mrg }
    360      1.1  mrg 
    361      1.1  mrg extern __inline __m512i
    362      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    363      1.1  mrg _mm512_mask_gf2p8affine_epi64_epi8 (__m512i __A, __mmask64 __B, __m512i __C,
    364      1.1  mrg 				    __m512i __D, const int __E)
    365      1.1  mrg {
    366      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8affineqb_v64qi_mask ((__v64qi) __C,
    367      1.1  mrg 					(__v64qi) __D, __E, (__v64qi)__A, __B);
    368      1.1  mrg }
    369      1.1  mrg 
    370      1.1  mrg extern __inline __m512i
    371      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    372      1.1  mrg _mm512_maskz_gf2p8affine_epi64_epi8 (__mmask64 __A, __m512i __B, __m512i __C,
    373      1.1  mrg 				     const int __D)
    374      1.1  mrg {
    375      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8affineqb_v64qi_mask ((__v64qi) __B,
    376      1.1  mrg 		  (__v64qi) __C, __D, (__v64qi) _mm512_setzero_si512 (), __A);
    377      1.1  mrg }
    378      1.1  mrg extern __inline __m512i
    379      1.1  mrg __attribute__((__gnu_inline__, __always_inline__, __artificial__))
    380      1.1  mrg _mm512_gf2p8affine_epi64_epi8 (__m512i __A, __m512i __B, const int __C)
    381      1.1  mrg {
    382      1.1  mrg   return (__m512i) __builtin_ia32_vgf2p8affineqb_v64qi ((__v64qi) __A,
    383      1.1  mrg 							(__v64qi) __B, __C);
    384      1.1  mrg }
    385      1.1  mrg #else
    386      1.1  mrg #define _mm512_mask_gf2p8affineinv_epi64_epi8(A, B, C, D, E) 		\
    387      1.1  mrg   ((__m512i) __builtin_ia32_vgf2p8affineinvqb_v64qi_mask(		\
    388      1.1  mrg 	(__v64qi)(__m512i)(C), (__v64qi)(__m512i)(D), (int)(E),		\
    389      1.1  mrg 	(__v64qi)(__m512i)(A), (__mmask64)(B)))
    390      1.1  mrg #define _mm512_maskz_gf2p8affineinv_epi64_epi8(A, B, C, D)		\
    391      1.1  mrg   ((__m512i) __builtin_ia32_vgf2p8affineinvqb_v64qi_mask(		\
    392      1.1  mrg 	(__v64qi)(__m512i)(B), (__v64qi)(__m512i)(C), (int)(D),		\
    393      1.1  mrg 	(__v64qi)(__m512i) _mm512_setzero_si512 (), (__mmask64)(A)))
    394      1.1  mrg #define _mm512_gf2p8affineinv_epi64_epi8(A, B, C)			\
    395      1.1  mrg   ((__m512i) __builtin_ia32_vgf2p8affineinvqb_v64qi (			\
    396      1.1  mrg 	(__v64qi)(__m512i)(A), (__v64qi)(__m512i)(B), (int)(C)))
    397      1.1  mrg #define _mm512_mask_gf2p8affine_epi64_epi8(A, B, C, D, E)		    \
    398      1.1  mrg   ((__m512i) __builtin_ia32_vgf2p8affineqb_v64qi_mask((__v64qi)(__m512i)(C),\
    399      1.1  mrg      (__v64qi)(__m512i)(D), (int)(E), (__v64qi)(__m512i)(A), (__mmask64)(B)))
    400      1.1  mrg #define _mm512_maskz_gf2p8affine_epi64_epi8(A, B, C, D)			    \
    401      1.1  mrg   ((__m512i) __builtin_ia32_vgf2p8affineqb_v64qi_mask((__v64qi)(__m512i)(B),\
    402      1.1  mrg 	 (__v64qi)(__m512i)(C), (int)(D),				    \
    403      1.1  mrg 	 (__v64qi)(__m512i) _mm512_setzero_si512 (), (__mmask64)(A)))
    404      1.1  mrg #define _mm512_gf2p8affine_epi64_epi8(A, B, C)				    \
    405      1.1  mrg   ((__m512i) __builtin_ia32_vgf2p8affineqb_v64qi ((__v64qi)(__m512i)(A),    \
    406      1.1  mrg 	 (__v64qi)(__m512i)(B), (int)(C)))
    407      1.1  mrg #endif
    408      1.1  mrg 
    409      1.1  mrg #ifdef __DISABLE_GFNIAVX512FBW__
    410      1.1  mrg #undef __DISABLE_GFNIAVX512FBW__
    411      1.1  mrg #pragma GCC pop_options
    412      1.1  mrg #endif /* __GFNIAVX512FBW__ */
    413      1.1  mrg 
    414      1.1  mrg #endif /* _GFNIINTRIN_H_INCLUDED */
    415