gfniintrin.h revision 1.1.1.1 1 1.1 mrg /* Copyright (C) 2017-2018 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