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