Line data Source code
1 : /* Copyright (C) 2011-2019 Free Software Foundation, Inc.
2 :
3 : This file is part of GCC.
4 :
5 : GCC is free software; you can redistribute it and/or modify
6 : it under the terms of the GNU General Public License as published by
7 : the Free Software Foundation; either version 3, or (at your option)
8 : any later version.
9 :
10 : GCC is distributed in the hope that it will be useful,
11 : but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 : GNU General Public License for more details.
14 :
15 : Under Section 7 of GPL version 3, you are granted additional
16 : permissions described in the GCC Runtime Library Exception, version
17 : 3.1, as published by the Free Software Foundation.
18 :
19 : You should have received a copy of the GNU General Public License and
20 : a copy of the GCC Runtime Library Exception along with this program;
21 : see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 : <http://www.gnu.org/licenses/>. */
23 :
24 : #ifndef _IMMINTRIN_H_INCLUDED
25 : # error "Never use <avx2intrin.h> directly; include <immintrin.h> instead."
26 : #endif
27 :
28 : #ifndef _AVX2INTRIN_H_INCLUDED
29 : #define _AVX2INTRIN_H_INCLUDED
30 :
31 : #ifndef __AVX2__
32 : #pragma GCC push_options
33 : #pragma GCC target("avx2")
34 : #define __DISABLE_AVX2__
35 : #endif /* __AVX2__ */
36 :
37 : /* Sum absolute 8-bit integer difference of adjacent groups of 4
38 : byte integers in the first 2 operands. Starting offsets within
39 : operands are determined by the 3rd mask operand. */
40 : #ifdef __OPTIMIZE__
41 : extern __inline __m256i
42 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
43 : _mm256_mpsadbw_epu8 (__m256i __X, __m256i __Y, const int __M)
44 : {
45 : return (__m256i) __builtin_ia32_mpsadbw256 ((__v32qi)__X,
46 : (__v32qi)__Y, __M);
47 : }
48 : #else
49 : #define _mm256_mpsadbw_epu8(X, Y, M) \
50 : ((__m256i) __builtin_ia32_mpsadbw256 ((__v32qi)(__m256i)(X), \
51 : (__v32qi)(__m256i)(Y), (int)(M)))
52 : #endif
53 :
54 : extern __inline __m256i
55 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
56 : _mm256_abs_epi8 (__m256i __A)
57 : {
58 : return (__m256i)__builtin_ia32_pabsb256 ((__v32qi)__A);
59 : }
60 :
61 : extern __inline __m256i
62 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
63 : _mm256_abs_epi16 (__m256i __A)
64 : {
65 2739309900 : return (__m256i)__builtin_ia32_pabsw256 ((__v16hi)__A);
66 : }
67 :
68 : extern __inline __m256i
69 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
70 : _mm256_abs_epi32 (__m256i __A)
71 : {
72 2316546000 : return (__m256i)__builtin_ia32_pabsd256 ((__v8si)__A);
73 : }
74 :
75 : extern __inline __m256i
76 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
77 : _mm256_packs_epi32 (__m256i __A, __m256i __B)
78 : {
79 15861643203 : return (__m256i)__builtin_ia32_packssdw256 ((__v8si)__A, (__v8si)__B);
80 : }
81 :
82 : extern __inline __m256i
83 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
84 : _mm256_packs_epi16 (__m256i __A, __m256i __B)
85 : {
86 252480000 : return (__m256i)__builtin_ia32_packsswb256 ((__v16hi)__A, (__v16hi)__B);
87 : }
88 :
89 : extern __inline __m256i
90 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
91 : _mm256_packus_epi32 (__m256i __A, __m256i __B)
92 : {
93 350452060 : return (__m256i)__builtin_ia32_packusdw256 ((__v8si)__A, (__v8si)__B);
94 : }
95 :
96 : extern __inline __m256i
97 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
98 : _mm256_packus_epi16 (__m256i __A, __m256i __B)
99 : {
100 8556635860 : return (__m256i)__builtin_ia32_packuswb256 ((__v16hi)__A, (__v16hi)__B);
101 : }
102 :
103 : extern __inline __m256i
104 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
105 : _mm256_add_epi8 (__m256i __A, __m256i __B)
106 : {
107 6134852 : return (__m256i) ((__v32qu)__A + (__v32qu)__B);
108 : }
109 :
110 : extern __inline __m256i
111 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
112 : _mm256_add_epi16 (__m256i __A, __m256i __B)
113 : {
114 42095706814 : return (__m256i) ((__v16hu)__A + (__v16hu)__B);
115 : }
116 :
117 : extern __inline __m256i
118 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
119 : _mm256_add_epi32 (__m256i __A, __m256i __B)
120 : {
121 >11099*10^7 : return (__m256i) ((__v8su)__A + (__v8su)__B);
122 : }
123 :
124 : extern __inline __m256i
125 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
126 : _mm256_add_epi64 (__m256i __A, __m256i __B)
127 : {
128 10760801152 : return (__m256i) ((__v4du)__A + (__v4du)__B);
129 : }
130 :
131 : extern __inline __m256i
132 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
133 : _mm256_adds_epi8 (__m256i __A, __m256i __B)
134 : {
135 : return (__m256i)__builtin_ia32_paddsb256 ((__v32qi)__A, (__v32qi)__B);
136 : }
137 :
138 : extern __inline __m256i
139 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
140 : _mm256_adds_epi16 (__m256i __A, __m256i __B)
141 : {
142 7669051500 : return (__m256i)__builtin_ia32_paddsw256 ((__v16hi)__A, (__v16hi)__B);
143 : }
144 :
145 : extern __inline __m256i
146 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
147 : _mm256_adds_epu8 (__m256i __A, __m256i __B)
148 : {
149 2692820 : return (__m256i)__builtin_ia32_paddusb256 ((__v32qi)__A, (__v32qi)__B);
150 : }
151 :
152 : extern __inline __m256i
153 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
154 : _mm256_adds_epu16 (__m256i __A, __m256i __B)
155 : {
156 9682330000 : return (__m256i)__builtin_ia32_paddusw256 ((__v16hi)__A, (__v16hi)__B);
157 : }
158 :
159 : #ifdef __OPTIMIZE__
160 : extern __inline __m256i
161 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
162 : _mm256_alignr_epi8 (__m256i __A, __m256i __B, const int __N)
163 : {
164 : return (__m256i) __builtin_ia32_palignr256 ((__v4di)__A,
165 : (__v4di)__B,
166 : __N * 8);
167 : }
168 : #else
169 : /* In that case (__N*8) will be in vreg, and insn will not be matched. */
170 : /* Use define instead */
171 : #define _mm256_alignr_epi8(A, B, N) \
172 : ((__m256i) __builtin_ia32_palignr256 ((__v4di)(__m256i)(A), \
173 : (__v4di)(__m256i)(B), \
174 : (int)(N) * 8))
175 : #endif
176 :
177 : extern __inline __m256i
178 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
179 : _mm256_and_si256 (__m256i __A, __m256i __B)
180 : {
181 5501909544 : return (__m256i) ((__v4du)__A & (__v4du)__B);
182 : }
183 :
184 : extern __inline __m256i
185 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
186 : _mm256_andnot_si256 (__m256i __A, __m256i __B)
187 : {
188 177221977 : return (__m256i) __builtin_ia32_andnotsi256 ((__v4di)__A, (__v4di)__B);
189 : }
190 :
191 : extern __inline __m256i
192 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
193 : _mm256_avg_epu8 (__m256i __A, __m256i __B)
194 : {
195 339086910 : return (__m256i)__builtin_ia32_pavgb256 ((__v32qi)__A, (__v32qi)__B);
196 : }
197 :
198 : extern __inline __m256i
199 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
200 : _mm256_avg_epu16 (__m256i __A, __m256i __B)
201 : {
202 172063000 : return (__m256i)__builtin_ia32_pavgw256 ((__v16hi)__A, (__v16hi)__B);
203 : }
204 :
205 : extern __inline __m256i
206 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
207 : _mm256_blendv_epi8 (__m256i __X, __m256i __Y, __m256i __M)
208 : {
209 14997500 : return (__m256i) __builtin_ia32_pblendvb256 ((__v32qi)__X,
210 : (__v32qi)__Y,
211 : (__v32qi)__M);
212 : }
213 :
214 : #ifdef __OPTIMIZE__
215 : extern __inline __m256i
216 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
217 : _mm256_blend_epi16 (__m256i __X, __m256i __Y, const int __M)
218 : {
219 : return (__m256i) __builtin_ia32_pblendw256 ((__v16hi)__X,
220 : (__v16hi)__Y,
221 : __M);
222 : }
223 : #else
224 : #define _mm256_blend_epi16(X, Y, M) \
225 : ((__m256i) __builtin_ia32_pblendw256 ((__v16hi)(__m256i)(X), \
226 : (__v16hi)(__m256i)(Y), (int)(M)))
227 : #endif
228 :
229 : extern __inline __m256i
230 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
231 : _mm256_cmpeq_epi8 (__m256i __A, __m256i __B)
232 : {
233 : return (__m256i) ((__v32qi)__A == (__v32qi)__B);
234 : }
235 :
236 : extern __inline __m256i
237 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
238 : _mm256_cmpeq_epi16 (__m256i __A, __m256i __B)
239 : {
240 375598500 : return (__m256i) ((__v16hi)__A == (__v16hi)__B);
241 : }
242 :
243 : extern __inline __m256i
244 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
245 : _mm256_cmpeq_epi32 (__m256i __A, __m256i __B)
246 : {
247 1695640000 : return (__m256i) ((__v8si)__A == (__v8si)__B);
248 : }
249 :
250 : extern __inline __m256i
251 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
252 : _mm256_cmpeq_epi64 (__m256i __A, __m256i __B)
253 : {
254 : return (__m256i) ((__v4di)__A == (__v4di)__B);
255 : }
256 :
257 : extern __inline __m256i
258 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
259 : _mm256_cmpgt_epi8 (__m256i __A, __m256i __B)
260 : {
261 : return (__m256i) ((__v32qs)__A > (__v32qs)__B);
262 : }
263 :
264 : extern __inline __m256i
265 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
266 : _mm256_cmpgt_epi16 (__m256i __A, __m256i __B)
267 : {
268 246276060 : return (__m256i) ((__v16hi)__A > (__v16hi)__B);
269 : }
270 :
271 : extern __inline __m256i
272 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
273 : _mm256_cmpgt_epi32 (__m256i __A, __m256i __B)
274 : {
275 1423476730 : return (__m256i) ((__v8si)__A > (__v8si)__B);
276 : }
277 :
278 : extern __inline __m256i
279 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
280 : _mm256_cmpgt_epi64 (__m256i __A, __m256i __B)
281 : {
282 24469900 : return (__m256i) ((__v4di)__A > (__v4di)__B);
283 : }
284 :
285 : extern __inline __m256i
286 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
287 : _mm256_hadd_epi16 (__m256i __X, __m256i __Y)
288 : {
289 36046850 : return (__m256i) __builtin_ia32_phaddw256 ((__v16hi)__X,
290 : (__v16hi)__Y);
291 : }
292 :
293 : extern __inline __m256i
294 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
295 : _mm256_hadd_epi32 (__m256i __X, __m256i __Y)
296 : {
297 57591519 : return (__m256i) __builtin_ia32_phaddd256 ((__v8si)__X, (__v8si)__Y);
298 : }
299 :
300 : extern __inline __m256i
301 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
302 : _mm256_hadds_epi16 (__m256i __X, __m256i __Y)
303 : {
304 0 : return (__m256i) __builtin_ia32_phaddsw256 ((__v16hi)__X,
305 : (__v16hi)__Y);
306 : }
307 :
308 : extern __inline __m256i
309 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
310 : _mm256_hsub_epi16 (__m256i __X, __m256i __Y)
311 : {
312 : return (__m256i) __builtin_ia32_phsubw256 ((__v16hi)__X,
313 : (__v16hi)__Y);
314 : }
315 :
316 : extern __inline __m256i
317 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
318 : _mm256_hsub_epi32 (__m256i __X, __m256i __Y)
319 : {
320 : return (__m256i) __builtin_ia32_phsubd256 ((__v8si)__X, (__v8si)__Y);
321 : }
322 :
323 : extern __inline __m256i
324 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
325 : _mm256_hsubs_epi16 (__m256i __X, __m256i __Y)
326 : {
327 : return (__m256i) __builtin_ia32_phsubsw256 ((__v16hi)__X,
328 : (__v16hi)__Y);
329 : }
330 :
331 : extern __inline __m256i
332 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
333 : _mm256_maddubs_epi16 (__m256i __X, __m256i __Y)
334 : {
335 42471153900 : return (__m256i) __builtin_ia32_pmaddubsw256 ((__v32qi)__X,
336 : (__v32qi)__Y);
337 : }
338 :
339 : extern __inline __m256i
340 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
341 : _mm256_madd_epi16 (__m256i __A, __m256i __B)
342 : {
343 86499322588 : return (__m256i)__builtin_ia32_pmaddwd256 ((__v16hi)__A,
344 : (__v16hi)__B);
345 : }
346 :
347 : extern __inline __m256i
348 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
349 : _mm256_max_epi8 (__m256i __A, __m256i __B)
350 : {
351 : return (__m256i)__builtin_ia32_pmaxsb256 ((__v32qi)__A, (__v32qi)__B);
352 : }
353 :
354 : extern __inline __m256i
355 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
356 : _mm256_max_epi16 (__m256i __A, __m256i __B)
357 : {
358 390939800 : return (__m256i)__builtin_ia32_pmaxsw256 ((__v16hi)__A, (__v16hi)__B);
359 : }
360 :
361 : extern __inline __m256i
362 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
363 : _mm256_max_epi32 (__m256i __A, __m256i __B)
364 : {
365 272925000 : return (__m256i)__builtin_ia32_pmaxsd256 ((__v8si)__A, (__v8si)__B);
366 : }
367 :
368 : extern __inline __m256i
369 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
370 : _mm256_max_epu8 (__m256i __A, __m256i __B)
371 : {
372 5059830000 : return (__m256i)__builtin_ia32_pmaxub256 ((__v32qi)__A, (__v32qi)__B);
373 : }
374 :
375 : extern __inline __m256i
376 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
377 : _mm256_max_epu16 (__m256i __A, __m256i __B)
378 : {
379 697540000 : return (__m256i)__builtin_ia32_pmaxuw256 ((__v16hi)__A, (__v16hi)__B);
380 : }
381 :
382 : extern __inline __m256i
383 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
384 : _mm256_max_epu32 (__m256i __A, __m256i __B)
385 : {
386 : return (__m256i)__builtin_ia32_pmaxud256 ((__v8si)__A, (__v8si)__B);
387 : }
388 :
389 : extern __inline __m256i
390 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
391 : _mm256_min_epi8 (__m256i __A, __m256i __B)
392 : {
393 : return (__m256i)__builtin_ia32_pminsb256 ((__v32qi)__A, (__v32qi)__B);
394 : }
395 :
396 : extern __inline __m256i
397 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
398 : _mm256_min_epi16 (__m256i __A, __m256i __B)
399 : {
400 868111930 : return (__m256i)__builtin_ia32_pminsw256 ((__v16hi)__A, (__v16hi)__B);
401 : }
402 :
403 : extern __inline __m256i
404 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
405 : _mm256_min_epi32 (__m256i __A, __m256i __B)
406 : {
407 205447630 : return (__m256i)__builtin_ia32_pminsd256 ((__v8si)__A, (__v8si)__B);
408 : }
409 :
410 : extern __inline __m256i
411 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
412 : _mm256_min_epu8 (__m256i __A, __m256i __B)
413 : {
414 5059830000 : return (__m256i)__builtin_ia32_pminub256 ((__v32qi)__A, (__v32qi)__B);
415 : }
416 :
417 : extern __inline __m256i
418 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
419 : _mm256_min_epu16 (__m256i __A, __m256i __B)
420 : {
421 64336200 : return (__m256i)__builtin_ia32_pminuw256 ((__v16hi)__A, (__v16hi)__B);
422 : }
423 :
424 : extern __inline __m256i
425 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
426 : _mm256_min_epu32 (__m256i __A, __m256i __B)
427 : {
428 13268300000 : return (__m256i)__builtin_ia32_pminud256 ((__v8si)__A, (__v8si)__B);
429 : }
430 :
431 : extern __inline int
432 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
433 : _mm256_movemask_epi8 (__m256i __A)
434 : {
435 1585068000 : return __builtin_ia32_pmovmskb256 ((__v32qi)__A);
436 : }
437 :
438 : extern __inline __m256i
439 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
440 : _mm256_cvtepi8_epi16 (__m128i __X)
441 : {
442 : return (__m256i) __builtin_ia32_pmovsxbw256 ((__v16qi)__X);
443 : }
444 :
445 : extern __inline __m256i
446 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
447 : _mm256_cvtepi8_epi32 (__m128i __X)
448 : {
449 : return (__m256i) __builtin_ia32_pmovsxbd256 ((__v16qi)__X);
450 : }
451 :
452 : extern __inline __m256i
453 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
454 : _mm256_cvtepi8_epi64 (__m128i __X)
455 : {
456 : return (__m256i) __builtin_ia32_pmovsxbq256 ((__v16qi)__X);
457 : }
458 :
459 : extern __inline __m256i
460 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
461 : _mm256_cvtepi16_epi32 (__m128i __X)
462 : {
463 2384013734 : return (__m256i) __builtin_ia32_pmovsxwd256 ((__v8hi)__X);
464 : }
465 :
466 : extern __inline __m256i
467 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
468 : _mm256_cvtepi16_epi64 (__m128i __X)
469 : {
470 0 : return (__m256i) __builtin_ia32_pmovsxwq256 ((__v8hi)__X);
471 : }
472 :
473 : extern __inline __m256i
474 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
475 : _mm256_cvtepi32_epi64 (__m128i __X)
476 : {
477 217716900 : return (__m256i) __builtin_ia32_pmovsxdq256 ((__v4si)__X);
478 : }
479 :
480 : extern __inline __m256i
481 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
482 : _mm256_cvtepu8_epi16 (__m128i __X)
483 : {
484 28135365500 : return (__m256i) __builtin_ia32_pmovzxbw256 ((__v16qi)__X);
485 : }
486 :
487 : extern __inline __m256i
488 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
489 : _mm256_cvtepu8_epi32 (__m128i __X)
490 : {
491 3136082100 : return (__m256i) __builtin_ia32_pmovzxbd256 ((__v16qi)__X);
492 : }
493 :
494 : extern __inline __m256i
495 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
496 : _mm256_cvtepu8_epi64 (__m128i __X)
497 : {
498 : return (__m256i) __builtin_ia32_pmovzxbq256 ((__v16qi)__X);
499 : }
500 :
501 : extern __inline __m256i
502 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
503 : _mm256_cvtepu16_epi32 (__m128i __X)
504 : {
505 681261000 : return (__m256i) __builtin_ia32_pmovzxwd256 ((__v8hi)__X);
506 : }
507 :
508 : extern __inline __m256i
509 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
510 : _mm256_cvtepu16_epi64 (__m128i __X)
511 : {
512 : return (__m256i) __builtin_ia32_pmovzxwq256 ((__v8hi)__X);
513 : }
514 :
515 : extern __inline __m256i
516 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
517 : _mm256_cvtepu32_epi64 (__m128i __X)
518 : {
519 0 : return (__m256i) __builtin_ia32_pmovzxdq256 ((__v4si)__X);
520 : }
521 :
522 : extern __inline __m256i
523 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
524 : _mm256_mul_epi32 (__m256i __X, __m256i __Y)
525 : {
526 1194098000 : return (__m256i) __builtin_ia32_pmuldq256 ((__v8si)__X, (__v8si)__Y);
527 : }
528 :
529 : extern __inline __m256i
530 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
531 : _mm256_mulhrs_epi16 (__m256i __X, __m256i __Y)
532 : {
533 630546000 : return (__m256i) __builtin_ia32_pmulhrsw256 ((__v16hi)__X,
534 : (__v16hi)__Y);
535 : }
536 :
537 : extern __inline __m256i
538 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
539 : _mm256_mulhi_epu16 (__m256i __A, __m256i __B)
540 : {
541 5765730 : return (__m256i)__builtin_ia32_pmulhuw256 ((__v16hi)__A, (__v16hi)__B);
542 : }
543 :
544 : extern __inline __m256i
545 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
546 : _mm256_mulhi_epi16 (__m256i __A, __m256i __B)
547 : {
548 59546400 : return (__m256i)__builtin_ia32_pmulhw256 ((__v16hi)__A, (__v16hi)__B);
549 : }
550 :
551 : extern __inline __m256i
552 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
553 : _mm256_mullo_epi16 (__m256i __A, __m256i __B)
554 : {
555 352662200 : return (__m256i) ((__v16hu)__A * (__v16hu)__B);
556 : }
557 :
558 : extern __inline __m256i
559 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
560 : _mm256_mullo_epi32 (__m256i __A, __m256i __B)
561 : {
562 14703496888 : return (__m256i) ((__v8su)__A * (__v8su)__B);
563 : }
564 :
565 : extern __inline __m256i
566 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
567 : _mm256_mul_epu32 (__m256i __A, __m256i __B)
568 : {
569 : return (__m256i)__builtin_ia32_pmuludq256 ((__v8si)__A, (__v8si)__B);
570 : }
571 :
572 : extern __inline __m256i
573 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
574 : _mm256_or_si256 (__m256i __A, __m256i __B)
575 : {
576 1965092500 : return (__m256i) ((__v4du)__A | (__v4du)__B);
577 : }
578 :
579 : extern __inline __m256i
580 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
581 : _mm256_sad_epu8 (__m256i __A, __m256i __B)
582 : {
583 1588764552 : return (__m256i)__builtin_ia32_psadbw256 ((__v32qi)__A, (__v32qi)__B);
584 : }
585 :
586 : extern __inline __m256i
587 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
588 : _mm256_shuffle_epi8 (__m256i __X, __m256i __Y)
589 : {
590 38673641706 : return (__m256i) __builtin_ia32_pshufb256 ((__v32qi)__X,
591 : (__v32qi)__Y);
592 : }
593 :
594 : #ifdef __OPTIMIZE__
595 : extern __inline __m256i
596 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
597 : _mm256_shuffle_epi32 (__m256i __A, const int __mask)
598 : {
599 : return (__m256i)__builtin_ia32_pshufd256 ((__v8si)__A, __mask);
600 : }
601 :
602 : extern __inline __m256i
603 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
604 : _mm256_shufflehi_epi16 (__m256i __A, const int __mask)
605 : {
606 : return (__m256i)__builtin_ia32_pshufhw256 ((__v16hi)__A, __mask);
607 : }
608 :
609 : extern __inline __m256i
610 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
611 : _mm256_shufflelo_epi16 (__m256i __A, const int __mask)
612 : {
613 : return (__m256i)__builtin_ia32_pshuflw256 ((__v16hi)__A, __mask);
614 : }
615 : #else
616 : #define _mm256_shuffle_epi32(A, N) \
617 : ((__m256i)__builtin_ia32_pshufd256 ((__v8si)(__m256i)(A), (int)(N)))
618 : #define _mm256_shufflehi_epi16(A, N) \
619 : ((__m256i)__builtin_ia32_pshufhw256 ((__v16hi)(__m256i)(A), (int)(N)))
620 : #define _mm256_shufflelo_epi16(A, N) \
621 : ((__m256i)__builtin_ia32_pshuflw256 ((__v16hi)(__m256i)(A), (int)(N)))
622 : #endif
623 :
624 : extern __inline __m256i
625 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
626 : _mm256_sign_epi8 (__m256i __X, __m256i __Y)
627 : {
628 : return (__m256i) __builtin_ia32_psignb256 ((__v32qi)__X, (__v32qi)__Y);
629 : }
630 :
631 : extern __inline __m256i
632 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
633 : _mm256_sign_epi16 (__m256i __X, __m256i __Y)
634 : {
635 410803900 : return (__m256i) __builtin_ia32_psignw256 ((__v16hi)__X, (__v16hi)__Y);
636 : }
637 :
638 : extern __inline __m256i
639 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
640 : _mm256_sign_epi32 (__m256i __X, __m256i __Y)
641 : {
642 273201000 : return (__m256i) __builtin_ia32_psignd256 ((__v8si)__X, (__v8si)__Y);
643 : }
644 :
645 : #ifdef __OPTIMIZE__
646 : extern __inline __m256i
647 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
648 : _mm256_bslli_epi128 (__m256i __A, const int __N)
649 : {
650 : return (__m256i)__builtin_ia32_pslldqi256 (__A, __N * 8);
651 : }
652 :
653 : extern __inline __m256i
654 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
655 : _mm256_slli_si256 (__m256i __A, const int __N)
656 : {
657 : return (__m256i)__builtin_ia32_pslldqi256 (__A, __N * 8);
658 : }
659 : #else
660 : #define _mm256_bslli_epi128(A, N) \
661 : ((__m256i)__builtin_ia32_pslldqi256 ((__m256i)(A), (int)(N) * 8))
662 : #define _mm256_slli_si256(A, N) \
663 : ((__m256i)__builtin_ia32_pslldqi256 ((__m256i)(A), (int)(N) * 8))
664 : #endif
665 :
666 : extern __inline __m256i
667 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
668 : _mm256_slli_epi16 (__m256i __A, int __B)
669 : {
670 1572456040 : return (__m256i)__builtin_ia32_psllwi256 ((__v16hi)__A, __B);
671 : }
672 :
673 : extern __inline __m256i
674 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
675 : _mm256_sll_epi16 (__m256i __A, __m128i __B)
676 : {
677 364748000 : return (__m256i)__builtin_ia32_psllw256((__v16hi)__A, (__v8hi)__B);
678 : }
679 :
680 : extern __inline __m256i
681 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
682 : _mm256_slli_epi32 (__m256i __A, int __B)
683 : {
684 7256379000 : return (__m256i)__builtin_ia32_pslldi256 ((__v8si)__A, __B);
685 : }
686 :
687 : extern __inline __m256i
688 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
689 : _mm256_sll_epi32 (__m256i __A, __m128i __B)
690 : {
691 0 : return (__m256i)__builtin_ia32_pslld256((__v8si)__A, (__v4si)__B);
692 : }
693 :
694 : extern __inline __m256i
695 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
696 : _mm256_slli_epi64 (__m256i __A, int __B)
697 : {
698 272524000 : return (__m256i)__builtin_ia32_psllqi256 ((__v4di)__A, __B);
699 : }
700 :
701 : extern __inline __m256i
702 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
703 : _mm256_sll_epi64 (__m256i __A, __m128i __B)
704 : {
705 : return (__m256i)__builtin_ia32_psllq256((__v4di)__A, (__v2di)__B);
706 : }
707 :
708 : extern __inline __m256i
709 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
710 : _mm256_srai_epi16 (__m256i __A, int __B)
711 : {
712 8799241992 : return (__m256i)__builtin_ia32_psrawi256 ((__v16hi)__A, __B);
713 : }
714 :
715 : extern __inline __m256i
716 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
717 : _mm256_sra_epi16 (__m256i __A, __m128i __B)
718 : {
719 3773803900 : return (__m256i)__builtin_ia32_psraw256 ((__v16hi)__A, (__v8hi)__B);
720 : }
721 :
722 : extern __inline __m256i
723 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
724 : _mm256_srai_epi32 (__m256i __A, int __B)
725 : {
726 27786710100 : return (__m256i)__builtin_ia32_psradi256 ((__v8si)__A, __B);
727 : }
728 :
729 : extern __inline __m256i
730 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
731 : _mm256_sra_epi32 (__m256i __A, __m128i __B)
732 : {
733 10672528100 : return (__m256i)__builtin_ia32_psrad256 ((__v8si)__A, (__v4si)__B);
734 : }
735 :
736 : #ifdef __OPTIMIZE__
737 : extern __inline __m256i
738 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
739 : _mm256_bsrli_epi128 (__m256i __A, const int __N)
740 : {
741 : return (__m256i)__builtin_ia32_psrldqi256 (__A, __N * 8);
742 : }
743 :
744 : extern __inline __m256i
745 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
746 : _mm256_srli_si256 (__m256i __A, const int __N)
747 : {
748 : return (__m256i)__builtin_ia32_psrldqi256 (__A, __N * 8);
749 : }
750 : #else
751 : #define _mm256_bsrli_epi128(A, N) \
752 : ((__m256i)__builtin_ia32_psrldqi256 ((__m256i)(A), (int)(N) * 8))
753 : #define _mm256_srli_si256(A, N) \
754 : ((__m256i)__builtin_ia32_psrldqi256 ((__m256i)(A), (int)(N) * 8))
755 : #endif
756 :
757 : extern __inline __m256i
758 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
759 : _mm256_srli_epi16 (__m256i __A, int __B)
760 : {
761 4081114070 : return (__m256i)__builtin_ia32_psrlwi256 ((__v16hi)__A, __B);
762 : }
763 :
764 : extern __inline __m256i
765 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
766 : _mm256_srl_epi16 (__m256i __A, __m128i __B)
767 : {
768 2588165100 : return (__m256i)__builtin_ia32_psrlw256((__v16hi)__A, (__v8hi)__B);
769 : }
770 :
771 : extern __inline __m256i
772 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
773 : _mm256_srli_epi32 (__m256i __A, int __B)
774 : {
775 1203316093 : return (__m256i)__builtin_ia32_psrldi256 ((__v8si)__A, __B);
776 : }
777 :
778 : extern __inline __m256i
779 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
780 : _mm256_srl_epi32 (__m256i __A, __m128i __B)
781 : {
782 0 : return (__m256i)__builtin_ia32_psrld256((__v8si)__A, (__v4si)__B);
783 : }
784 :
785 : extern __inline __m256i
786 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
787 : _mm256_srli_epi64 (__m256i __A, int __B)
788 : {
789 5205741000 : return (__m256i)__builtin_ia32_psrlqi256 ((__v4di)__A, __B);
790 : }
791 :
792 : extern __inline __m256i
793 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
794 : _mm256_srl_epi64 (__m256i __A, __m128i __B)
795 : {
796 : return (__m256i)__builtin_ia32_psrlq256((__v4di)__A, (__v2di)__B);
797 : }
798 :
799 : extern __inline __m256i
800 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
801 : _mm256_sub_epi8 (__m256i __A, __m256i __B)
802 : {
803 5145928700 : return (__m256i) ((__v32qu)__A - (__v32qu)__B);
804 : }
805 :
806 : extern __inline __m256i
807 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
808 : _mm256_sub_epi16 (__m256i __A, __m256i __B)
809 : {
810 17458644667 : return (__m256i) ((__v16hu)__A - (__v16hu)__B);
811 : }
812 :
813 : extern __inline __m256i
814 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
815 : _mm256_sub_epi32 (__m256i __A, __m256i __B)
816 : {
817 14752079777 : return (__m256i) ((__v8su)__A - (__v8su)__B);
818 : }
819 :
820 : extern __inline __m256i
821 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
822 : _mm256_sub_epi64 (__m256i __A, __m256i __B)
823 : {
824 80435000 : return (__m256i) ((__v4du)__A - (__v4du)__B);
825 : }
826 :
827 : extern __inline __m256i
828 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
829 : _mm256_subs_epi8 (__m256i __A, __m256i __B)
830 : {
831 : return (__m256i)__builtin_ia32_psubsb256 ((__v32qi)__A, (__v32qi)__B);
832 : }
833 :
834 : extern __inline __m256i
835 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
836 : _mm256_subs_epi16 (__m256i __A, __m256i __B)
837 : {
838 866936000 : return (__m256i)__builtin_ia32_psubsw256 ((__v16hi)__A, (__v16hi)__B);
839 : }
840 :
841 : extern __inline __m256i
842 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
843 : _mm256_subs_epu8 (__m256i __A, __m256i __B)
844 : {
845 0 : return (__m256i)__builtin_ia32_psubusb256 ((__v32qi)__A, (__v32qi)__B);
846 : }
847 :
848 : extern __inline __m256i
849 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
850 : _mm256_subs_epu16 (__m256i __A, __m256i __B)
851 : {
852 1426625100 : return (__m256i)__builtin_ia32_psubusw256 ((__v16hi)__A, (__v16hi)__B);
853 : }
854 :
855 : extern __inline __m256i
856 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
857 : _mm256_unpackhi_epi8 (__m256i __A, __m256i __B)
858 : {
859 8815541660 : return (__m256i)__builtin_ia32_punpckhbw256 ((__v32qi)__A, (__v32qi)__B);
860 : }
861 :
862 : extern __inline __m256i
863 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
864 : _mm256_unpackhi_epi16 (__m256i __A, __m256i __B)
865 : {
866 23508532562 : return (__m256i)__builtin_ia32_punpckhwd256 ((__v16hi)__A, (__v16hi)__B);
867 : }
868 :
869 : extern __inline __m256i
870 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
871 : _mm256_unpackhi_epi32 (__m256i __A, __m256i __B)
872 : {
873 11729355534 : return (__m256i)__builtin_ia32_punpckhdq256 ((__v8si)__A, (__v8si)__B);
874 : }
875 :
876 : extern __inline __m256i
877 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
878 : _mm256_unpackhi_epi64 (__m256i __A, __m256i __B)
879 : {
880 9207458034 : return (__m256i)__builtin_ia32_punpckhqdq256 ((__v4di)__A, (__v4di)__B);
881 : }
882 :
883 : extern __inline __m256i
884 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
885 : _mm256_unpacklo_epi8 (__m256i __A, __m256i __B)
886 : {
887 18303515660 : return (__m256i)__builtin_ia32_punpcklbw256 ((__v32qi)__A, (__v32qi)__B);
888 : }
889 :
890 : extern __inline __m256i
891 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
892 : _mm256_unpacklo_epi16 (__m256i __A, __m256i __B)
893 : {
894 23608883942 : return (__m256i)__builtin_ia32_punpcklwd256 ((__v16hi)__A, (__v16hi)__B);
895 : }
896 :
897 : extern __inline __m256i
898 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
899 : _mm256_unpacklo_epi32 (__m256i __A, __m256i __B)
900 : {
901 11729469048 : return (__m256i)__builtin_ia32_punpckldq256 ((__v8si)__A, (__v8si)__B);
902 : }
903 :
904 : extern __inline __m256i
905 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
906 : _mm256_unpacklo_epi64 (__m256i __A, __m256i __B)
907 : {
908 9237147454 : return (__m256i)__builtin_ia32_punpcklqdq256 ((__v4di)__A, (__v4di)__B);
909 : }
910 :
911 : extern __inline __m256i
912 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
913 : _mm256_xor_si256 (__m256i __A, __m256i __B)
914 : {
915 35773800 : return (__m256i) ((__v4du)__A ^ (__v4du)__B);
916 : }
917 :
918 : extern __inline __m256i
919 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
920 : _mm256_stream_load_si256 (__m256i const *__X)
921 : {
922 : return (__m256i) __builtin_ia32_movntdqa256 ((__v4di *) __X);
923 : }
924 :
925 : extern __inline __m128
926 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
927 : _mm_broadcastss_ps (__m128 __X)
928 : {
929 : return (__m128) __builtin_ia32_vbroadcastss_ps ((__v4sf)__X);
930 : }
931 :
932 : extern __inline __m256
933 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
934 : _mm256_broadcastss_ps (__m128 __X)
935 : {
936 : return (__m256) __builtin_ia32_vbroadcastss_ps256 ((__v4sf)__X);
937 : }
938 :
939 : extern __inline __m256d
940 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
941 : _mm256_broadcastsd_pd (__m128d __X)
942 : {
943 : return (__m256d) __builtin_ia32_vbroadcastsd_pd256 ((__v2df)__X);
944 : }
945 :
946 : extern __inline __m256i
947 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
948 : _mm256_broadcastsi128_si256 (__m128i __X)
949 : {
950 989182954 : return (__m256i) __builtin_ia32_vbroadcastsi256 ((__v2di)__X);
951 : }
952 :
953 : #ifdef __OPTIMIZE__
954 : extern __inline __m128i
955 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
956 : _mm_blend_epi32 (__m128i __X, __m128i __Y, const int __M)
957 : {
958 : return (__m128i) __builtin_ia32_pblendd128 ((__v4si)__X,
959 : (__v4si)__Y,
960 : __M);
961 : }
962 : #else
963 : #define _mm_blend_epi32(X, Y, M) \
964 : ((__m128i) __builtin_ia32_pblendd128 ((__v4si)(__m128i)(X), \
965 : (__v4si)(__m128i)(Y), (int)(M)))
966 : #endif
967 :
968 : #ifdef __OPTIMIZE__
969 : extern __inline __m256i
970 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
971 : _mm256_blend_epi32 (__m256i __X, __m256i __Y, const int __M)
972 : {
973 : return (__m256i) __builtin_ia32_pblendd256 ((__v8si)__X,
974 : (__v8si)__Y,
975 : __M);
976 : }
977 : #else
978 : #define _mm256_blend_epi32(X, Y, M) \
979 : ((__m256i) __builtin_ia32_pblendd256 ((__v8si)(__m256i)(X), \
980 : (__v8si)(__m256i)(Y), (int)(M)))
981 : #endif
982 :
983 : extern __inline __m256i
984 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
985 : _mm256_broadcastb_epi8 (__m128i __X)
986 : {
987 : return (__m256i) __builtin_ia32_pbroadcastb256 ((__v16qi)__X);
988 : }
989 :
990 : extern __inline __m256i
991 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
992 : _mm256_broadcastw_epi16 (__m128i __X)
993 : {
994 0 : return (__m256i) __builtin_ia32_pbroadcastw256 ((__v8hi)__X);
995 : }
996 :
997 : extern __inline __m256i
998 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
999 : _mm256_broadcastd_epi32 (__m128i __X)
1000 : {
1001 2880 : return (__m256i) __builtin_ia32_pbroadcastd256 ((__v4si)__X);
1002 : }
1003 :
1004 : extern __inline __m256i
1005 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1006 : _mm256_broadcastq_epi64 (__m128i __X)
1007 : {
1008 : return (__m256i) __builtin_ia32_pbroadcastq256 ((__v2di)__X);
1009 : }
1010 :
1011 : extern __inline __m128i
1012 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1013 : _mm_broadcastb_epi8 (__m128i __X)
1014 : {
1015 : return (__m128i) __builtin_ia32_pbroadcastb128 ((__v16qi)__X);
1016 : }
1017 :
1018 : extern __inline __m128i
1019 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1020 : _mm_broadcastw_epi16 (__m128i __X)
1021 : {
1022 : return (__m128i) __builtin_ia32_pbroadcastw128 ((__v8hi)__X);
1023 : }
1024 :
1025 : extern __inline __m128i
1026 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1027 : _mm_broadcastd_epi32 (__m128i __X)
1028 : {
1029 : return (__m128i) __builtin_ia32_pbroadcastd128 ((__v4si)__X);
1030 : }
1031 :
1032 : extern __inline __m128i
1033 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1034 : _mm_broadcastq_epi64 (__m128i __X)
1035 : {
1036 : return (__m128i) __builtin_ia32_pbroadcastq128 ((__v2di)__X);
1037 : }
1038 :
1039 : extern __inline __m256i
1040 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1041 : _mm256_permutevar8x32_epi32 (__m256i __X, __m256i __Y)
1042 : {
1043 405796310 : return (__m256i) __builtin_ia32_permvarsi256 ((__v8si)__X, (__v8si)__Y);
1044 : }
1045 :
1046 : #ifdef __OPTIMIZE__
1047 : extern __inline __m256d
1048 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1049 : _mm256_permute4x64_pd (__m256d __X, const int __M)
1050 : {
1051 : return (__m256d) __builtin_ia32_permdf256 ((__v4df)__X, __M);
1052 : }
1053 : #else
1054 : #define _mm256_permute4x64_pd(X, M) \
1055 : ((__m256d) __builtin_ia32_permdf256 ((__v4df)(__m256d)(X), (int)(M)))
1056 : #endif
1057 :
1058 : extern __inline __m256
1059 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1060 : _mm256_permutevar8x32_ps (__m256 __X, __m256i __Y)
1061 : {
1062 : return (__m256) __builtin_ia32_permvarsf256 ((__v8sf)__X, (__v8si)__Y);
1063 : }
1064 :
1065 : #ifdef __OPTIMIZE__
1066 : extern __inline __m256i
1067 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1068 : _mm256_permute4x64_epi64 (__m256i __X, const int __M)
1069 : {
1070 : return (__m256i) __builtin_ia32_permdi256 ((__v4di)__X, __M);
1071 : }
1072 : #else
1073 : #define _mm256_permute4x64_epi64(X, M) \
1074 : ((__m256i) __builtin_ia32_permdi256 ((__v4di)(__m256i)(X), (int)(M)))
1075 : #endif
1076 :
1077 :
1078 : #ifdef __OPTIMIZE__
1079 : extern __inline __m256i
1080 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1081 : _mm256_permute2x128_si256 (__m256i __X, __m256i __Y, const int __M)
1082 : {
1083 : return (__m256i) __builtin_ia32_permti256 ((__v4di)__X, (__v4di)__Y, __M);
1084 : }
1085 : #else
1086 : #define _mm256_permute2x128_si256(X, Y, M) \
1087 : ((__m256i) __builtin_ia32_permti256 ((__v4di)(__m256i)(X), (__v4di)(__m256i)(Y), (int)(M)))
1088 : #endif
1089 :
1090 : #ifdef __OPTIMIZE__
1091 : extern __inline __m128i
1092 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1093 : _mm256_extracti128_si256 (__m256i __X, const int __M)
1094 : {
1095 : return (__m128i) __builtin_ia32_extract128i256 ((__v4di)__X, __M);
1096 : }
1097 : #else
1098 : #define _mm256_extracti128_si256(X, M) \
1099 : ((__m128i) __builtin_ia32_extract128i256 ((__v4di)(__m256i)(X), (int)(M)))
1100 : #endif
1101 :
1102 : #ifdef __OPTIMIZE__
1103 : extern __inline __m256i
1104 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1105 : _mm256_inserti128_si256 (__m256i __X, __m128i __Y, const int __M)
1106 : {
1107 : return (__m256i) __builtin_ia32_insert128i256 ((__v4di)__X, (__v2di)__Y, __M);
1108 : }
1109 : #else
1110 : #define _mm256_inserti128_si256(X, Y, M) \
1111 : ((__m256i) __builtin_ia32_insert128i256 ((__v4di)(__m256i)(X), \
1112 : (__v2di)(__m128i)(Y), \
1113 : (int)(M)))
1114 : #endif
1115 :
1116 : extern __inline __m256i
1117 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1118 : _mm256_maskload_epi32 (int const *__X, __m256i __M )
1119 : {
1120 : return (__m256i) __builtin_ia32_maskloadd256 ((const __v8si *)__X,
1121 : (__v8si)__M);
1122 : }
1123 :
1124 : extern __inline __m256i
1125 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1126 : _mm256_maskload_epi64 (long long const *__X, __m256i __M )
1127 : {
1128 : return (__m256i) __builtin_ia32_maskloadq256 ((const __v4di *)__X,
1129 : (__v4di)__M);
1130 : }
1131 :
1132 : extern __inline __m128i
1133 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1134 : _mm_maskload_epi32 (int const *__X, __m128i __M )
1135 : {
1136 : return (__m128i) __builtin_ia32_maskloadd ((const __v4si *)__X,
1137 : (__v4si)__M);
1138 : }
1139 :
1140 : extern __inline __m128i
1141 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1142 : _mm_maskload_epi64 (long long const *__X, __m128i __M )
1143 : {
1144 : return (__m128i) __builtin_ia32_maskloadq ((const __v2di *)__X,
1145 : (__v2di)__M);
1146 : }
1147 :
1148 : extern __inline void
1149 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1150 : _mm256_maskstore_epi32 (int *__X, __m256i __M, __m256i __Y )
1151 : {
1152 : __builtin_ia32_maskstored256 ((__v8si *)__X, (__v8si)__M, (__v8si)__Y);
1153 : }
1154 :
1155 : extern __inline void
1156 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1157 : _mm256_maskstore_epi64 (long long *__X, __m256i __M, __m256i __Y )
1158 : {
1159 : __builtin_ia32_maskstoreq256 ((__v4di *)__X, (__v4di)__M, (__v4di)__Y);
1160 : }
1161 :
1162 : extern __inline void
1163 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1164 : _mm_maskstore_epi32 (int *__X, __m128i __M, __m128i __Y )
1165 : {
1166 : __builtin_ia32_maskstored ((__v4si *)__X, (__v4si)__M, (__v4si)__Y);
1167 : }
1168 :
1169 : extern __inline void
1170 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1171 : _mm_maskstore_epi64 (long long *__X, __m128i __M, __m128i __Y )
1172 : {
1173 : __builtin_ia32_maskstoreq (( __v2di *)__X, (__v2di)__M, (__v2di)__Y);
1174 : }
1175 :
1176 : extern __inline __m256i
1177 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1178 : _mm256_sllv_epi32 (__m256i __X, __m256i __Y)
1179 : {
1180 : return (__m256i) __builtin_ia32_psllv8si ((__v8si)__X, (__v8si)__Y);
1181 : }
1182 :
1183 : extern __inline __m128i
1184 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1185 : _mm_sllv_epi32 (__m128i __X, __m128i __Y)
1186 : {
1187 : return (__m128i) __builtin_ia32_psllv4si ((__v4si)__X, (__v4si)__Y);
1188 : }
1189 :
1190 : extern __inline __m256i
1191 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1192 : _mm256_sllv_epi64 (__m256i __X, __m256i __Y)
1193 : {
1194 227028 : return (__m256i) __builtin_ia32_psllv4di ((__v4di)__X, (__v4di)__Y);
1195 : }
1196 :
1197 : extern __inline __m128i
1198 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1199 : _mm_sllv_epi64 (__m128i __X, __m128i __Y)
1200 : {
1201 : return (__m128i) __builtin_ia32_psllv2di ((__v2di)__X, (__v2di)__Y);
1202 : }
1203 :
1204 : extern __inline __m256i
1205 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1206 : _mm256_srav_epi32 (__m256i __X, __m256i __Y)
1207 : {
1208 : return (__m256i) __builtin_ia32_psrav8si ((__v8si)__X, (__v8si)__Y);
1209 : }
1210 :
1211 : extern __inline __m128i
1212 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1213 : _mm_srav_epi32 (__m128i __X, __m128i __Y)
1214 : {
1215 : return (__m128i) __builtin_ia32_psrav4si ((__v4si)__X, (__v4si)__Y);
1216 : }
1217 :
1218 : extern __inline __m256i
1219 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1220 : _mm256_srlv_epi32 (__m256i __X, __m256i __Y)
1221 : {
1222 : return (__m256i) __builtin_ia32_psrlv8si ((__v8si)__X, (__v8si)__Y);
1223 : }
1224 :
1225 : extern __inline __m128i
1226 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1227 : _mm_srlv_epi32 (__m128i __X, __m128i __Y)
1228 : {
1229 : return (__m128i) __builtin_ia32_psrlv4si ((__v4si)__X, (__v4si)__Y);
1230 : }
1231 :
1232 : extern __inline __m256i
1233 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1234 : _mm256_srlv_epi64 (__m256i __X, __m256i __Y)
1235 : {
1236 : return (__m256i) __builtin_ia32_psrlv4di ((__v4di)__X, (__v4di)__Y);
1237 : }
1238 :
1239 : extern __inline __m128i
1240 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1241 : _mm_srlv_epi64 (__m128i __X, __m128i __Y)
1242 : {
1243 : return (__m128i) __builtin_ia32_psrlv2di ((__v2di)__X, (__v2di)__Y);
1244 : }
1245 :
1246 : #ifdef __OPTIMIZE__
1247 : extern __inline __m128d
1248 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1249 : _mm_i32gather_pd (double const *__base, __m128i __index, const int __scale)
1250 : {
1251 : __v2df __zero = _mm_setzero_pd ();
1252 : __v2df __mask = _mm_cmpeq_pd (__zero, __zero);
1253 :
1254 : return (__m128d) __builtin_ia32_gathersiv2df (_mm_undefined_pd (),
1255 : __base,
1256 : (__v4si)__index,
1257 : __mask,
1258 : __scale);
1259 : }
1260 :
1261 : extern __inline __m128d
1262 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1263 : _mm_mask_i32gather_pd (__m128d __src, double const *__base, __m128i __index,
1264 : __m128d __mask, const int __scale)
1265 : {
1266 : return (__m128d) __builtin_ia32_gathersiv2df ((__v2df)__src,
1267 : __base,
1268 : (__v4si)__index,
1269 : (__v2df)__mask,
1270 : __scale);
1271 : }
1272 :
1273 : extern __inline __m256d
1274 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1275 : _mm256_i32gather_pd (double const *__base, __m128i __index, const int __scale)
1276 : {
1277 : __v4df __zero = _mm256_setzero_pd ();
1278 : __v4df __mask = _mm256_cmp_pd (__zero, __zero, _CMP_EQ_OQ);
1279 :
1280 : return (__m256d) __builtin_ia32_gathersiv4df (_mm256_undefined_pd (),
1281 : __base,
1282 : (__v4si)__index,
1283 : __mask,
1284 : __scale);
1285 : }
1286 :
1287 : extern __inline __m256d
1288 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1289 : _mm256_mask_i32gather_pd (__m256d __src, double const *__base,
1290 : __m128i __index, __m256d __mask, const int __scale)
1291 : {
1292 : return (__m256d) __builtin_ia32_gathersiv4df ((__v4df)__src,
1293 : __base,
1294 : (__v4si)__index,
1295 : (__v4df)__mask,
1296 : __scale);
1297 : }
1298 :
1299 : extern __inline __m128d
1300 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1301 : _mm_i64gather_pd (double const *__base, __m128i __index, const int __scale)
1302 : {
1303 : __v2df __src = _mm_setzero_pd ();
1304 : __v2df __mask = _mm_cmpeq_pd (__src, __src);
1305 :
1306 : return (__m128d) __builtin_ia32_gatherdiv2df (__src,
1307 : __base,
1308 : (__v2di)__index,
1309 : __mask,
1310 : __scale);
1311 : }
1312 :
1313 : extern __inline __m128d
1314 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1315 : _mm_mask_i64gather_pd (__m128d __src, double const *__base, __m128i __index,
1316 : __m128d __mask, const int __scale)
1317 : {
1318 : return (__m128d) __builtin_ia32_gatherdiv2df ((__v2df)__src,
1319 : __base,
1320 : (__v2di)__index,
1321 : (__v2df)__mask,
1322 : __scale);
1323 : }
1324 :
1325 : extern __inline __m256d
1326 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1327 : _mm256_i64gather_pd (double const *__base, __m256i __index, const int __scale)
1328 : {
1329 : __v4df __src = _mm256_setzero_pd ();
1330 : __v4df __mask = _mm256_cmp_pd (__src, __src, _CMP_EQ_OQ);
1331 :
1332 : return (__m256d) __builtin_ia32_gatherdiv4df (__src,
1333 : __base,
1334 : (__v4di)__index,
1335 : __mask,
1336 : __scale);
1337 : }
1338 :
1339 : extern __inline __m256d
1340 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1341 : _mm256_mask_i64gather_pd (__m256d __src, double const *__base,
1342 : __m256i __index, __m256d __mask, const int __scale)
1343 : {
1344 : return (__m256d) __builtin_ia32_gatherdiv4df ((__v4df)__src,
1345 : __base,
1346 : (__v4di)__index,
1347 : (__v4df)__mask,
1348 : __scale);
1349 : }
1350 :
1351 : extern __inline __m128
1352 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1353 : _mm_i32gather_ps (float const *__base, __m128i __index, const int __scale)
1354 : {
1355 : __v4sf __src = _mm_setzero_ps ();
1356 : __v4sf __mask = _mm_cmpeq_ps (__src, __src);
1357 :
1358 : return (__m128) __builtin_ia32_gathersiv4sf (__src,
1359 : __base,
1360 : (__v4si)__index,
1361 : __mask,
1362 : __scale);
1363 : }
1364 :
1365 : extern __inline __m128
1366 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1367 : _mm_mask_i32gather_ps (__m128 __src, float const *__base, __m128i __index,
1368 : __m128 __mask, const int __scale)
1369 : {
1370 : return (__m128) __builtin_ia32_gathersiv4sf ((__v4sf)__src,
1371 : __base,
1372 : (__v4si)__index,
1373 : (__v4sf)__mask,
1374 : __scale);
1375 : }
1376 :
1377 : extern __inline __m256
1378 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1379 : _mm256_i32gather_ps (float const *__base, __m256i __index, const int __scale)
1380 : {
1381 : __v8sf __src = _mm256_setzero_ps ();
1382 : __v8sf __mask = _mm256_cmp_ps (__src, __src, _CMP_EQ_OQ);
1383 :
1384 : return (__m256) __builtin_ia32_gathersiv8sf (__src,
1385 : __base,
1386 : (__v8si)__index,
1387 : __mask,
1388 : __scale);
1389 : }
1390 :
1391 : extern __inline __m256
1392 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1393 : _mm256_mask_i32gather_ps (__m256 __src, float const *__base,
1394 : __m256i __index, __m256 __mask, const int __scale)
1395 : {
1396 : return (__m256) __builtin_ia32_gathersiv8sf ((__v8sf)__src,
1397 : __base,
1398 : (__v8si)__index,
1399 : (__v8sf)__mask,
1400 : __scale);
1401 : }
1402 :
1403 : extern __inline __m128
1404 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1405 : _mm_i64gather_ps (float const *__base, __m128i __index, const int __scale)
1406 : {
1407 : __v4sf __src = _mm_setzero_ps ();
1408 : __v4sf __mask = _mm_cmpeq_ps (__src, __src);
1409 :
1410 : return (__m128) __builtin_ia32_gatherdiv4sf (__src,
1411 : __base,
1412 : (__v2di)__index,
1413 : __mask,
1414 : __scale);
1415 : }
1416 :
1417 : extern __inline __m128
1418 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1419 : _mm_mask_i64gather_ps (__m128 __src, float const *__base, __m128i __index,
1420 : __m128 __mask, const int __scale)
1421 : {
1422 : return (__m128) __builtin_ia32_gatherdiv4sf ((__v4sf)__src,
1423 : __base,
1424 : (__v2di)__index,
1425 : (__v4sf)__mask,
1426 : __scale);
1427 : }
1428 :
1429 : extern __inline __m128
1430 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1431 : _mm256_i64gather_ps (float const *__base, __m256i __index, const int __scale)
1432 : {
1433 : __v4sf __src = _mm_setzero_ps ();
1434 : __v4sf __mask = _mm_cmpeq_ps (__src, __src);
1435 :
1436 : return (__m128) __builtin_ia32_gatherdiv4sf256 (__src,
1437 : __base,
1438 : (__v4di)__index,
1439 : __mask,
1440 : __scale);
1441 : }
1442 :
1443 : extern __inline __m128
1444 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1445 : _mm256_mask_i64gather_ps (__m128 __src, float const *__base,
1446 : __m256i __index, __m128 __mask, const int __scale)
1447 : {
1448 : return (__m128) __builtin_ia32_gatherdiv4sf256 ((__v4sf)__src,
1449 : __base,
1450 : (__v4di)__index,
1451 : (__v4sf)__mask,
1452 : __scale);
1453 : }
1454 :
1455 : extern __inline __m128i
1456 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1457 : _mm_i32gather_epi64 (long long int const *__base,
1458 : __m128i __index, const int __scale)
1459 : {
1460 : __v2di __src = __extension__ (__v2di){ 0, 0 };
1461 : __v2di __mask = __extension__ (__v2di){ ~0, ~0 };
1462 :
1463 : return (__m128i) __builtin_ia32_gathersiv2di (__src,
1464 : __base,
1465 : (__v4si)__index,
1466 : __mask,
1467 : __scale);
1468 : }
1469 :
1470 : extern __inline __m128i
1471 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1472 : _mm_mask_i32gather_epi64 (__m128i __src, long long int const *__base,
1473 : __m128i __index, __m128i __mask, const int __scale)
1474 : {
1475 : return (__m128i) __builtin_ia32_gathersiv2di ((__v2di)__src,
1476 : __base,
1477 : (__v4si)__index,
1478 : (__v2di)__mask,
1479 : __scale);
1480 : }
1481 :
1482 : extern __inline __m256i
1483 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1484 : _mm256_i32gather_epi64 (long long int const *__base,
1485 : __m128i __index, const int __scale)
1486 : {
1487 : __v4di __src = __extension__ (__v4di){ 0, 0, 0, 0 };
1488 : __v4di __mask = __extension__ (__v4di){ ~0, ~0, ~0, ~0 };
1489 :
1490 : return (__m256i) __builtin_ia32_gathersiv4di (__src,
1491 : __base,
1492 : (__v4si)__index,
1493 : __mask,
1494 : __scale);
1495 : }
1496 :
1497 : extern __inline __m256i
1498 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1499 : _mm256_mask_i32gather_epi64 (__m256i __src, long long int const *__base,
1500 : __m128i __index, __m256i __mask,
1501 : const int __scale)
1502 : {
1503 : return (__m256i) __builtin_ia32_gathersiv4di ((__v4di)__src,
1504 : __base,
1505 : (__v4si)__index,
1506 : (__v4di)__mask,
1507 : __scale);
1508 : }
1509 :
1510 : extern __inline __m128i
1511 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1512 : _mm_i64gather_epi64 (long long int const *__base,
1513 : __m128i __index, const int __scale)
1514 : {
1515 : __v2di __src = __extension__ (__v2di){ 0, 0 };
1516 : __v2di __mask = __extension__ (__v2di){ ~0, ~0 };
1517 :
1518 : return (__m128i) __builtin_ia32_gatherdiv2di (__src,
1519 : __base,
1520 : (__v2di)__index,
1521 : __mask,
1522 : __scale);
1523 : }
1524 :
1525 : extern __inline __m128i
1526 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1527 : _mm_mask_i64gather_epi64 (__m128i __src, long long int const *__base,
1528 : __m128i __index, __m128i __mask, const int __scale)
1529 : {
1530 : return (__m128i) __builtin_ia32_gatherdiv2di ((__v2di)__src,
1531 : __base,
1532 : (__v2di)__index,
1533 : (__v2di)__mask,
1534 : __scale);
1535 : }
1536 :
1537 : extern __inline __m256i
1538 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1539 : _mm256_i64gather_epi64 (long long int const *__base,
1540 : __m256i __index, const int __scale)
1541 : {
1542 : __v4di __src = __extension__ (__v4di){ 0, 0, 0, 0 };
1543 : __v4di __mask = __extension__ (__v4di){ ~0, ~0, ~0, ~0 };
1544 :
1545 : return (__m256i) __builtin_ia32_gatherdiv4di (__src,
1546 : __base,
1547 : (__v4di)__index,
1548 : __mask,
1549 : __scale);
1550 : }
1551 :
1552 : extern __inline __m256i
1553 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1554 : _mm256_mask_i64gather_epi64 (__m256i __src, long long int const *__base,
1555 : __m256i __index, __m256i __mask,
1556 : const int __scale)
1557 : {
1558 : return (__m256i) __builtin_ia32_gatherdiv4di ((__v4di)__src,
1559 : __base,
1560 : (__v4di)__index,
1561 : (__v4di)__mask,
1562 : __scale);
1563 : }
1564 :
1565 : extern __inline __m128i
1566 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1567 : _mm_i32gather_epi32 (int const *__base, __m128i __index, const int __scale)
1568 : {
1569 : __v4si __src = __extension__ (__v4si){ 0, 0, 0, 0 };
1570 : __v4si __mask = __extension__ (__v4si){ ~0, ~0, ~0, ~0 };
1571 :
1572 : return (__m128i) __builtin_ia32_gathersiv4si (__src,
1573 : __base,
1574 : (__v4si)__index,
1575 : __mask,
1576 : __scale);
1577 : }
1578 :
1579 : extern __inline __m128i
1580 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1581 : _mm_mask_i32gather_epi32 (__m128i __src, int const *__base, __m128i __index,
1582 : __m128i __mask, const int __scale)
1583 : {
1584 : return (__m128i) __builtin_ia32_gathersiv4si ((__v4si)__src,
1585 : __base,
1586 : (__v4si)__index,
1587 : (__v4si)__mask,
1588 : __scale);
1589 : }
1590 :
1591 : extern __inline __m256i
1592 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1593 : _mm256_i32gather_epi32 (int const *__base, __m256i __index, const int __scale)
1594 : {
1595 : __v8si __src = __extension__ (__v8si){ 0, 0, 0, 0, 0, 0, 0, 0 };
1596 : __v8si __mask = __extension__ (__v8si){ ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0 };
1597 :
1598 : return (__m256i) __builtin_ia32_gathersiv8si (__src,
1599 : __base,
1600 : (__v8si)__index,
1601 : __mask,
1602 : __scale);
1603 : }
1604 :
1605 : extern __inline __m256i
1606 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1607 : _mm256_mask_i32gather_epi32 (__m256i __src, int const *__base,
1608 : __m256i __index, __m256i __mask,
1609 : const int __scale)
1610 : {
1611 : return (__m256i) __builtin_ia32_gathersiv8si ((__v8si)__src,
1612 : __base,
1613 : (__v8si)__index,
1614 : (__v8si)__mask,
1615 : __scale);
1616 : }
1617 :
1618 : extern __inline __m128i
1619 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1620 : _mm_i64gather_epi32 (int const *__base, __m128i __index, const int __scale)
1621 : {
1622 : __v4si __src = __extension__ (__v4si){ 0, 0, 0, 0 };
1623 : __v4si __mask = __extension__ (__v4si){ ~0, ~0, ~0, ~0 };
1624 :
1625 : return (__m128i) __builtin_ia32_gatherdiv4si (__src,
1626 : __base,
1627 : (__v2di)__index,
1628 : __mask,
1629 : __scale);
1630 : }
1631 :
1632 : extern __inline __m128i
1633 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1634 : _mm_mask_i64gather_epi32 (__m128i __src, int const *__base, __m128i __index,
1635 : __m128i __mask, const int __scale)
1636 : {
1637 : return (__m128i) __builtin_ia32_gatherdiv4si ((__v4si)__src,
1638 : __base,
1639 : (__v2di)__index,
1640 : (__v4si)__mask,
1641 : __scale);
1642 : }
1643 :
1644 : extern __inline __m128i
1645 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1646 : _mm256_i64gather_epi32 (int const *__base, __m256i __index, const int __scale)
1647 : {
1648 : __v4si __src = __extension__ (__v4si){ 0, 0, 0, 0 };
1649 : __v4si __mask = __extension__ (__v4si){ ~0, ~0, ~0, ~0 };
1650 :
1651 : return (__m128i) __builtin_ia32_gatherdiv4si256 (__src,
1652 : __base,
1653 : (__v4di)__index,
1654 : __mask,
1655 : __scale);
1656 : }
1657 :
1658 : extern __inline __m128i
1659 : __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
1660 : _mm256_mask_i64gather_epi32 (__m128i __src, int const *__base,
1661 : __m256i __index, __m128i __mask,
1662 : const int __scale)
1663 : {
1664 : return (__m128i) __builtin_ia32_gatherdiv4si256 ((__v4si)__src,
1665 : __base,
1666 : (__v4di)__index,
1667 : (__v4si)__mask,
1668 : __scale);
1669 : }
1670 : #else /* __OPTIMIZE__ */
1671 : #define _mm_i32gather_pd(BASE, INDEX, SCALE) \
1672 : (__m128d) __builtin_ia32_gathersiv2df ((__v2df) _mm_setzero_pd (), \
1673 : (double const *)BASE, \
1674 : (__v4si)(__m128i)INDEX, \
1675 : (__v2df)_mm_set1_pd( \
1676 : (double)(long long int) -1), \
1677 : (int)SCALE)
1678 :
1679 : #define _mm_mask_i32gather_pd(SRC, BASE, INDEX, MASK, SCALE) \
1680 : (__m128d) __builtin_ia32_gathersiv2df ((__v2df)(__m128d)SRC, \
1681 : (double const *)BASE, \
1682 : (__v4si)(__m128i)INDEX, \
1683 : (__v2df)(__m128d)MASK, \
1684 : (int)SCALE)
1685 :
1686 : #define _mm256_i32gather_pd(BASE, INDEX, SCALE) \
1687 : (__m256d) __builtin_ia32_gathersiv4df ((__v4df) _mm256_setzero_pd (), \
1688 : (double const *)BASE, \
1689 : (__v4si)(__m128i)INDEX, \
1690 : (__v4df)_mm256_set1_pd( \
1691 : (double)(long long int) -1), \
1692 : (int)SCALE)
1693 :
1694 : #define _mm256_mask_i32gather_pd(SRC, BASE, INDEX, MASK, SCALE) \
1695 : (__m256d) __builtin_ia32_gathersiv4df ((__v4df)(__m256d)SRC, \
1696 : (double const *)BASE, \
1697 : (__v4si)(__m128i)INDEX, \
1698 : (__v4df)(__m256d)MASK, \
1699 : (int)SCALE)
1700 :
1701 : #define _mm_i64gather_pd(BASE, INDEX, SCALE) \
1702 : (__m128d) __builtin_ia32_gatherdiv2df ((__v2df) _mm_setzero_pd (), \
1703 : (double const *)BASE, \
1704 : (__v2di)(__m128i)INDEX, \
1705 : (__v2df)_mm_set1_pd( \
1706 : (double)(long long int) -1), \
1707 : (int)SCALE)
1708 :
1709 : #define _mm_mask_i64gather_pd(SRC, BASE, INDEX, MASK, SCALE) \
1710 : (__m128d) __builtin_ia32_gatherdiv2df ((__v2df)(__m128d)SRC, \
1711 : (double const *)BASE, \
1712 : (__v2di)(__m128i)INDEX, \
1713 : (__v2df)(__m128d)MASK, \
1714 : (int)SCALE)
1715 :
1716 : #define _mm256_i64gather_pd(BASE, INDEX, SCALE) \
1717 : (__m256d) __builtin_ia32_gatherdiv4df ((__v4df) _mm256_setzero_pd (), \
1718 : (double const *)BASE, \
1719 : (__v4di)(__m256i)INDEX, \
1720 : (__v4df)_mm256_set1_pd( \
1721 : (double)(long long int) -1), \
1722 : (int)SCALE)
1723 :
1724 : #define _mm256_mask_i64gather_pd(SRC, BASE, INDEX, MASK, SCALE) \
1725 : (__m256d) __builtin_ia32_gatherdiv4df ((__v4df)(__m256d)SRC, \
1726 : (double const *)BASE, \
1727 : (__v4di)(__m256i)INDEX, \
1728 : (__v4df)(__m256d)MASK, \
1729 : (int)SCALE)
1730 :
1731 : #define _mm_i32gather_ps(BASE, INDEX, SCALE) \
1732 : (__m128) __builtin_ia32_gathersiv4sf ((__v4sf) _mm_setzero_ps (), \
1733 : (float const *)BASE, \
1734 : (__v4si)(__m128i)INDEX, \
1735 : _mm_set1_ps ((float)(int) -1), \
1736 : (int)SCALE)
1737 :
1738 : #define _mm_mask_i32gather_ps(SRC, BASE, INDEX, MASK, SCALE) \
1739 : (__m128) __builtin_ia32_gathersiv4sf ((__v4sf)(__m128d)SRC, \
1740 : (float const *)BASE, \
1741 : (__v4si)(__m128i)INDEX, \
1742 : (__v4sf)(__m128d)MASK, \
1743 : (int)SCALE)
1744 :
1745 : #define _mm256_i32gather_ps(BASE, INDEX, SCALE) \
1746 : (__m256) __builtin_ia32_gathersiv8sf ((__v8sf) _mm256_setzero_ps (), \
1747 : (float const *)BASE, \
1748 : (__v8si)(__m256i)INDEX, \
1749 : (__v8sf)_mm256_set1_ps ( \
1750 : (float)(int) -1), \
1751 : (int)SCALE)
1752 :
1753 : #define _mm256_mask_i32gather_ps(SRC, BASE, INDEX, MASK, SCALE) \
1754 : (__m256) __builtin_ia32_gathersiv8sf ((__v8sf)(__m256)SRC, \
1755 : (float const *)BASE, \
1756 : (__v8si)(__m256i)INDEX, \
1757 : (__v8sf)(__m256d)MASK, \
1758 : (int)SCALE)
1759 :
1760 : #define _mm_i64gather_ps(BASE, INDEX, SCALE) \
1761 : (__m128) __builtin_ia32_gatherdiv4sf ((__v4sf) _mm_setzero_pd (), \
1762 : (float const *)BASE, \
1763 : (__v2di)(__m128i)INDEX, \
1764 : (__v4sf)_mm_set1_ps ( \
1765 : (float)(int) -1), \
1766 : (int)SCALE)
1767 :
1768 : #define _mm_mask_i64gather_ps(SRC, BASE, INDEX, MASK, SCALE) \
1769 : (__m128) __builtin_ia32_gatherdiv4sf ((__v4sf)(__m128)SRC, \
1770 : (float const *)BASE, \
1771 : (__v2di)(__m128i)INDEX, \
1772 : (__v4sf)(__m128d)MASK, \
1773 : (int)SCALE)
1774 :
1775 : #define _mm256_i64gather_ps(BASE, INDEX, SCALE) \
1776 : (__m128) __builtin_ia32_gatherdiv4sf256 ((__v4sf) _mm_setzero_ps (), \
1777 : (float const *)BASE, \
1778 : (__v4di)(__m256i)INDEX, \
1779 : (__v4sf)_mm_set1_ps( \
1780 : (float)(int) -1), \
1781 : (int)SCALE)
1782 :
1783 : #define _mm256_mask_i64gather_ps(SRC, BASE, INDEX, MASK, SCALE) \
1784 : (__m128) __builtin_ia32_gatherdiv4sf256 ((__v4sf)(__m128)SRC, \
1785 : (float const *)BASE, \
1786 : (__v4di)(__m256i)INDEX, \
1787 : (__v4sf)(__m128)MASK, \
1788 : (int)SCALE)
1789 :
1790 : #define _mm_i32gather_epi64(BASE, INDEX, SCALE) \
1791 : (__m128i) __builtin_ia32_gathersiv2di ((__v2di) _mm_setzero_si128 (), \
1792 : (long long const *)BASE, \
1793 : (__v4si)(__m128i)INDEX, \
1794 : (__v2di)_mm_set1_epi64x (-1), \
1795 : (int)SCALE)
1796 :
1797 : #define _mm_mask_i32gather_epi64(SRC, BASE, INDEX, MASK, SCALE) \
1798 : (__m128i) __builtin_ia32_gathersiv2di ((__v2di)(__m128i)SRC, \
1799 : (long long const *)BASE, \
1800 : (__v4si)(__m128i)INDEX, \
1801 : (__v2di)(__m128i)MASK, \
1802 : (int)SCALE)
1803 :
1804 : #define _mm256_i32gather_epi64(BASE, INDEX, SCALE) \
1805 : (__m256i) __builtin_ia32_gathersiv4di ((__v4di) _mm256_setzero_si256 (), \
1806 : (long long const *)BASE, \
1807 : (__v4si)(__m128i)INDEX, \
1808 : (__v4di)_mm256_set1_epi64x (-1), \
1809 : (int)SCALE)
1810 :
1811 : #define _mm256_mask_i32gather_epi64(SRC, BASE, INDEX, MASK, SCALE) \
1812 : (__m256i) __builtin_ia32_gathersiv4di ((__v4di)(__m256i)SRC, \
1813 : (long long const *)BASE, \
1814 : (__v4si)(__m128i)INDEX, \
1815 : (__v4di)(__m256i)MASK, \
1816 : (int)SCALE)
1817 :
1818 : #define _mm_i64gather_epi64(BASE, INDEX, SCALE) \
1819 : (__m128i) __builtin_ia32_gatherdiv2di ((__v2di) _mm_setzero_si128 (), \
1820 : (long long const *)BASE, \
1821 : (__v2di)(__m128i)INDEX, \
1822 : (__v2di)_mm_set1_epi64x (-1), \
1823 : (int)SCALE)
1824 :
1825 : #define _mm_mask_i64gather_epi64(SRC, BASE, INDEX, MASK, SCALE) \
1826 : (__m128i) __builtin_ia32_gatherdiv2di ((__v2di)(__m128i)SRC, \
1827 : (long long const *)BASE, \
1828 : (__v2di)(__m128i)INDEX, \
1829 : (__v2di)(__m128i)MASK, \
1830 : (int)SCALE)
1831 :
1832 : #define _mm256_i64gather_epi64(BASE, INDEX, SCALE) \
1833 : (__m256i) __builtin_ia32_gatherdiv4di ((__v4di) _mm256_setzero_si256 (), \
1834 : (long long const *)BASE, \
1835 : (__v4di)(__m256i)INDEX, \
1836 : (__v4di)_mm256_set1_epi64x (-1), \
1837 : (int)SCALE)
1838 :
1839 : #define _mm256_mask_i64gather_epi64(SRC, BASE, INDEX, MASK, SCALE) \
1840 : (__m256i) __builtin_ia32_gatherdiv4di ((__v4di)(__m256i)SRC, \
1841 : (long long const *)BASE, \
1842 : (__v4di)(__m256i)INDEX, \
1843 : (__v4di)(__m256i)MASK, \
1844 : (int)SCALE)
1845 :
1846 : #define _mm_i32gather_epi32(BASE, INDEX, SCALE) \
1847 : (__m128i) __builtin_ia32_gathersiv4si ((__v4si) _mm_setzero_si128 (), \
1848 : (int const *)BASE, \
1849 : (__v4si)(__m128i)INDEX, \
1850 : (__v4si)_mm_set1_epi32 (-1), \
1851 : (int)SCALE)
1852 :
1853 : #define _mm_mask_i32gather_epi32(SRC, BASE, INDEX, MASK, SCALE) \
1854 : (__m128i) __builtin_ia32_gathersiv4si ((__v4si)(__m128i)SRC, \
1855 : (int const *)BASE, \
1856 : (__v4si)(__m128i)INDEX, \
1857 : (__v4si)(__m128i)MASK, \
1858 : (int)SCALE)
1859 :
1860 : #define _mm256_i32gather_epi32(BASE, INDEX, SCALE) \
1861 : (__m256i) __builtin_ia32_gathersiv8si ((__v8si) _mm256_setzero_si256 (), \
1862 : (int const *)BASE, \
1863 : (__v8si)(__m256i)INDEX, \
1864 : (__v8si)_mm256_set1_epi32 (-1), \
1865 : (int)SCALE)
1866 :
1867 : #define _mm256_mask_i32gather_epi32(SRC, BASE, INDEX, MASK, SCALE) \
1868 : (__m256i) __builtin_ia32_gathersiv8si ((__v8si)(__m256i)SRC, \
1869 : (int const *)BASE, \
1870 : (__v8si)(__m256i)INDEX, \
1871 : (__v8si)(__m256i)MASK, \
1872 : (int)SCALE)
1873 :
1874 : #define _mm_i64gather_epi32(BASE, INDEX, SCALE) \
1875 : (__m128i) __builtin_ia32_gatherdiv4si ((__v4si) _mm_setzero_si128 (), \
1876 : (int const *)BASE, \
1877 : (__v2di)(__m128i)INDEX, \
1878 : (__v4si)_mm_set1_epi32 (-1), \
1879 : (int)SCALE)
1880 :
1881 : #define _mm_mask_i64gather_epi32(SRC, BASE, INDEX, MASK, SCALE) \
1882 : (__m128i) __builtin_ia32_gatherdiv4si ((__v4si)(__m128i)SRC, \
1883 : (int const *)BASE, \
1884 : (__v2di)(__m128i)INDEX, \
1885 : (__v4si)(__m128i)MASK, \
1886 : (int)SCALE)
1887 :
1888 : #define _mm256_i64gather_epi32(BASE, INDEX, SCALE) \
1889 : (__m128i) __builtin_ia32_gatherdiv4si256 ((__v4si) _mm_setzero_si128 (), \
1890 : (int const *)BASE, \
1891 : (__v4di)(__m256i)INDEX, \
1892 : (__v4si)_mm_set1_epi32(-1), \
1893 : (int)SCALE)
1894 :
1895 : #define _mm256_mask_i64gather_epi32(SRC, BASE, INDEX, MASK, SCALE) \
1896 : (__m128i) __builtin_ia32_gatherdiv4si256 ((__v4si)(__m128i)SRC, \
1897 : (int const *)BASE, \
1898 : (__v4di)(__m256i)INDEX, \
1899 : (__v4si)(__m128i)MASK, \
1900 : (int)SCALE)
1901 : #endif /* __OPTIMIZE__ */
1902 :
1903 : #ifdef __DISABLE_AVX2__
1904 : #undef __DISABLE_AVX2__
1905 : #pragma GCC pop_options
1906 : #endif /* __DISABLE_AVX2__ */
1907 :
1908 : #endif /* _AVX2INTRIN_H_INCLUDED */
|