blob: b2a92f12b0f93ef6e23a25cfe64afb4dcd8bbbaf [file] [log] [blame]
Craig Topperdec792e2011-12-19 05:04:33 +00001/*===---- avx2intrin.h - AVX2 intrinsics -----------------------------------===
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 * THE SOFTWARE.
20 *
21 *===-----------------------------------------------------------------------===
22 */
23
24#ifndef __IMMINTRIN_H
25#error "Never use <avx2intrin.h> directly; include <immintrin.h> instead."
26#endif
27
Richard Smith49e56442013-07-14 05:41:45 +000028#ifndef __AVX2INTRIN_H
29#define __AVX2INTRIN_H
30
Eric Christopher4d1851682015-06-17 07:09:20 +000031/* Define the default attributes for the functions in this file. */
Michael Kupersteine45af542015-06-30 13:36:19 +000032#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx2")))
Eric Christopher4d1851682015-06-17 07:09:20 +000033
Craig Topperdec792e2011-12-19 05:04:33 +000034/* SSE4 Multiple Packed Sums of Absolute Difference. */
35#define _mm256_mpsadbw_epu8(X, Y, M) __builtin_ia32_mpsadbw256((X), (Y), (M))
36
Michael Kupersteine45af542015-06-30 13:36:19 +000037static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000038_mm256_abs_epi8(__m256i __a)
Craig Topperdec792e2011-12-19 05:04:33 +000039{
David Blaikie3302f2b2013-01-16 23:08:36 +000040 return (__m256i)__builtin_ia32_pabsb256((__v32qi)__a);
Craig Topperdec792e2011-12-19 05:04:33 +000041}
42
Michael Kupersteine45af542015-06-30 13:36:19 +000043static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000044_mm256_abs_epi16(__m256i __a)
Craig Topperdec792e2011-12-19 05:04:33 +000045{
David Blaikie3302f2b2013-01-16 23:08:36 +000046 return (__m256i)__builtin_ia32_pabsw256((__v16hi)__a);
Craig Topperdec792e2011-12-19 05:04:33 +000047}
48
Michael Kupersteine45af542015-06-30 13:36:19 +000049static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000050_mm256_abs_epi32(__m256i __a)
Craig Topperdec792e2011-12-19 05:04:33 +000051{
David Blaikie3302f2b2013-01-16 23:08:36 +000052 return (__m256i)__builtin_ia32_pabsd256((__v8si)__a);
Craig Topperdec792e2011-12-19 05:04:33 +000053}
54
Michael Kupersteine45af542015-06-30 13:36:19 +000055static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000056_mm256_packs_epi16(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +000057{
David Blaikie3302f2b2013-01-16 23:08:36 +000058 return (__m256i)__builtin_ia32_packsswb256((__v16hi)__a, (__v16hi)__b);
Craig Topperdec792e2011-12-19 05:04:33 +000059}
60
Michael Kupersteine45af542015-06-30 13:36:19 +000061static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000062_mm256_packs_epi32(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +000063{
David Blaikie3302f2b2013-01-16 23:08:36 +000064 return (__m256i)__builtin_ia32_packssdw256((__v8si)__a, (__v8si)__b);
Craig Topperdec792e2011-12-19 05:04:33 +000065}
66
Michael Kupersteine45af542015-06-30 13:36:19 +000067static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000068_mm256_packus_epi16(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +000069{
David Blaikie3302f2b2013-01-16 23:08:36 +000070 return (__m256i)__builtin_ia32_packuswb256((__v16hi)__a, (__v16hi)__b);
Craig Topperdec792e2011-12-19 05:04:33 +000071}
72
Michael Kupersteine45af542015-06-30 13:36:19 +000073static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topperdec792e2011-12-19 05:04:33 +000074_mm256_packus_epi32(__m256i __V1, __m256i __V2)
75{
76 return (__m256i) __builtin_ia32_packusdw256((__v8si)__V1, (__v8si)__V2);
77}
78
Michael Kupersteine45af542015-06-30 13:36:19 +000079static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000080_mm256_add_epi8(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +000081{
David Blaikie3302f2b2013-01-16 23:08:36 +000082 return (__m256i)((__v32qi)__a + (__v32qi)__b);
Craig Topperdec792e2011-12-19 05:04:33 +000083}
84
Michael Kupersteine45af542015-06-30 13:36:19 +000085static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000086_mm256_add_epi16(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +000087{
David Blaikie3302f2b2013-01-16 23:08:36 +000088 return (__m256i)((__v16hi)__a + (__v16hi)__b);
Craig Topperdec792e2011-12-19 05:04:33 +000089}
90
Michael Kupersteine45af542015-06-30 13:36:19 +000091static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000092_mm256_add_epi32(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +000093{
David Blaikie3302f2b2013-01-16 23:08:36 +000094 return (__m256i)((__v8si)__a + (__v8si)__b);
Craig Topperdec792e2011-12-19 05:04:33 +000095}
96
Michael Kupersteine45af542015-06-30 13:36:19 +000097static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000098_mm256_add_epi64(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +000099{
David Blaikie3302f2b2013-01-16 23:08:36 +0000100 return __a + __b;
Craig Topperdec792e2011-12-19 05:04:33 +0000101}
102
Michael Kupersteine45af542015-06-30 13:36:19 +0000103static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000104_mm256_adds_epi8(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000105{
David Blaikie3302f2b2013-01-16 23:08:36 +0000106 return (__m256i)__builtin_ia32_paddsb256((__v32qi)__a, (__v32qi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000107}
108
Michael Kupersteine45af542015-06-30 13:36:19 +0000109static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000110_mm256_adds_epi16(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000111{
David Blaikie3302f2b2013-01-16 23:08:36 +0000112 return (__m256i)__builtin_ia32_paddsw256((__v16hi)__a, (__v16hi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000113}
114
Michael Kupersteine45af542015-06-30 13:36:19 +0000115static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000116_mm256_adds_epu8(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000117{
David Blaikie3302f2b2013-01-16 23:08:36 +0000118 return (__m256i)__builtin_ia32_paddusb256((__v32qi)__a, (__v32qi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000119}
120
Michael Kupersteine45af542015-06-30 13:36:19 +0000121static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000122_mm256_adds_epu16(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000123{
David Blaikie3302f2b2013-01-16 23:08:36 +0000124 return (__m256i)__builtin_ia32_paddusw256((__v16hi)__a, (__v16hi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000125}
126
127#define _mm256_alignr_epi8(a, b, n) __extension__ ({ \
128 __m256i __a = (a); \
129 __m256i __b = (b); \
130 (__m256i)__builtin_ia32_palignr256((__v32qi)__a, (__v32qi)__b, (n)); })
131
Michael Kupersteine45af542015-06-30 13:36:19 +0000132static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000133_mm256_and_si256(__m256i __a, __m256i __b)
Craig Toppera557e1c2011-12-19 09:03:48 +0000134{
David Blaikie3302f2b2013-01-16 23:08:36 +0000135 return __a & __b;
Craig Toppera557e1c2011-12-19 09:03:48 +0000136}
137
Michael Kupersteine45af542015-06-30 13:36:19 +0000138static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000139_mm256_andnot_si256(__m256i __a, __m256i __b)
Craig Toppera557e1c2011-12-19 09:03:48 +0000140{
David Blaikie3302f2b2013-01-16 23:08:36 +0000141 return ~__a & __b;
Craig Toppera557e1c2011-12-19 09:03:48 +0000142}
143
Michael Kupersteine45af542015-06-30 13:36:19 +0000144static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000145_mm256_avg_epu8(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000146{
David Blaikie3302f2b2013-01-16 23:08:36 +0000147 return (__m256i)__builtin_ia32_pavgb256((__v32qi)__a, (__v32qi)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000148}
149
Michael Kupersteine45af542015-06-30 13:36:19 +0000150static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000151_mm256_avg_epu16(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000152{
David Blaikie3302f2b2013-01-16 23:08:36 +0000153 return (__m256i)__builtin_ia32_pavgw256((__v16hi)__a, (__v16hi)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000154}
155
Michael Kupersteine45af542015-06-30 13:36:19 +0000156static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Toppera89747d2011-12-20 09:55:26 +0000157_mm256_blendv_epi8(__m256i __V1, __m256i __V2, __m256i __M)
158{
159 return (__m256i)__builtin_ia32_pblendvb256((__v32qi)__V1, (__v32qi)__V2,
160 (__v32qi)__M);
161}
162
163#define _mm256_blend_epi16(V1, V2, M) __extension__ ({ \
164 __m256i __V1 = (V1); \
165 __m256i __V2 = (V2); \
Ekaterina Romanovab929ad72015-04-10 02:39:45 +0000166 (__m256i)__builtin_shufflevector((__v16hi)__V1, (__v16hi)__V2, \
Filipe Cabecinhas5d289b42014-05-13 02:37:02 +0000167 (((M) & 0x01) ? 16 : 0), \
168 (((M) & 0x02) ? 17 : 1), \
169 (((M) & 0x04) ? 18 : 2), \
170 (((M) & 0x08) ? 19 : 3), \
171 (((M) & 0x10) ? 20 : 4), \
172 (((M) & 0x20) ? 21 : 5), \
173 (((M) & 0x40) ? 22 : 6), \
174 (((M) & 0x80) ? 23 : 7), \
175 (((M) & 0x01) ? 24 : 8), \
176 (((M) & 0x02) ? 25 : 9), \
177 (((M) & 0x04) ? 26 : 10), \
178 (((M) & 0x08) ? 27 : 11), \
179 (((M) & 0x10) ? 28 : 12), \
180 (((M) & 0x20) ? 29 : 13), \
181 (((M) & 0x40) ? 30 : 14), \
182 (((M) & 0x80) ? 31 : 15)); })
Craig Toppera89747d2011-12-20 09:55:26 +0000183
Michael Kupersteine45af542015-06-30 13:36:19 +0000184static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000185_mm256_cmpeq_epi8(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000186{
David Blaikie3302f2b2013-01-16 23:08:36 +0000187 return (__m256i)((__v32qi)__a == (__v32qi)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000188}
189
Michael Kupersteine45af542015-06-30 13:36:19 +0000190static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000191_mm256_cmpeq_epi16(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000192{
David Blaikie3302f2b2013-01-16 23:08:36 +0000193 return (__m256i)((__v16hi)__a == (__v16hi)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000194}
195
Michael Kupersteine45af542015-06-30 13:36:19 +0000196static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000197_mm256_cmpeq_epi32(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000198{
David Blaikie3302f2b2013-01-16 23:08:36 +0000199 return (__m256i)((__v8si)__a == (__v8si)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000200}
201
Michael Kupersteine45af542015-06-30 13:36:19 +0000202static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000203_mm256_cmpeq_epi64(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000204{
David Blaikie3302f2b2013-01-16 23:08:36 +0000205 return (__m256i)(__a == __b);
Craig Toppera89747d2011-12-20 09:55:26 +0000206}
207
Michael Kupersteine45af542015-06-30 13:36:19 +0000208static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000209_mm256_cmpgt_epi8(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000210{
Chandler Carruthcbe64112015-10-01 23:40:12 +0000211 /* This function always performs a signed comparison, but __v32qi is a char
212 which may be signed or unsigned, so use __v32qs. */
213 return (__m256i)((__v32qs)__a > (__v32qs)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000214}
215
Michael Kupersteine45af542015-06-30 13:36:19 +0000216static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000217_mm256_cmpgt_epi16(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000218{
David Blaikie3302f2b2013-01-16 23:08:36 +0000219 return (__m256i)((__v16hi)__a > (__v16hi)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000220}
221
Michael Kupersteine45af542015-06-30 13:36:19 +0000222static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000223_mm256_cmpgt_epi32(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000224{
David Blaikie3302f2b2013-01-16 23:08:36 +0000225 return (__m256i)((__v8si)__a > (__v8si)__b);
Craig Toppera89747d2011-12-20 09:55:26 +0000226}
227
Michael Kupersteine45af542015-06-30 13:36:19 +0000228static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000229_mm256_cmpgt_epi64(__m256i __a, __m256i __b)
Craig Toppera89747d2011-12-20 09:55:26 +0000230{
David Blaikie3302f2b2013-01-16 23:08:36 +0000231 return (__m256i)(__a > __b);
Craig Toppera89747d2011-12-20 09:55:26 +0000232}
233
Michael Kupersteine45af542015-06-30 13:36:19 +0000234static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000235_mm256_hadd_epi16(__m256i __a, __m256i __b)
Craig Topper3fe5ac42011-12-21 08:17:40 +0000236{
David Blaikie3302f2b2013-01-16 23:08:36 +0000237 return (__m256i)__builtin_ia32_phaddw256((__v16hi)__a, (__v16hi)__b);
Craig Topper3fe5ac42011-12-21 08:17:40 +0000238}
239
Michael Kupersteine45af542015-06-30 13:36:19 +0000240static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000241_mm256_hadd_epi32(__m256i __a, __m256i __b)
Craig Topper3fe5ac42011-12-21 08:17:40 +0000242{
David Blaikie3302f2b2013-01-16 23:08:36 +0000243 return (__m256i)__builtin_ia32_phaddd256((__v8si)__a, (__v8si)__b);
Craig Topper3fe5ac42011-12-21 08:17:40 +0000244}
245
Michael Kupersteine45af542015-06-30 13:36:19 +0000246static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000247_mm256_hadds_epi16(__m256i __a, __m256i __b)
Craig Topper3fe5ac42011-12-21 08:17:40 +0000248{
David Blaikie3302f2b2013-01-16 23:08:36 +0000249 return (__m256i)__builtin_ia32_phaddsw256((__v16hi)__a, (__v16hi)__b);
Craig Topper3fe5ac42011-12-21 08:17:40 +0000250}
251
Michael Kupersteine45af542015-06-30 13:36:19 +0000252static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000253_mm256_hsub_epi16(__m256i __a, __m256i __b)
Craig Topper3fe5ac42011-12-21 08:17:40 +0000254{
David Blaikie3302f2b2013-01-16 23:08:36 +0000255 return (__m256i)__builtin_ia32_phsubw256((__v16hi)__a, (__v16hi)__b);
Craig Topper3fe5ac42011-12-21 08:17:40 +0000256}
257
Michael Kupersteine45af542015-06-30 13:36:19 +0000258static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000259_mm256_hsub_epi32(__m256i __a, __m256i __b)
Craig Topper3fe5ac42011-12-21 08:17:40 +0000260{
David Blaikie3302f2b2013-01-16 23:08:36 +0000261 return (__m256i)__builtin_ia32_phsubd256((__v8si)__a, (__v8si)__b);
Craig Topper3fe5ac42011-12-21 08:17:40 +0000262}
263
Michael Kupersteine45af542015-06-30 13:36:19 +0000264static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000265_mm256_hsubs_epi16(__m256i __a, __m256i __b)
Craig Topper3fe5ac42011-12-21 08:17:40 +0000266{
David Blaikie3302f2b2013-01-16 23:08:36 +0000267 return (__m256i)__builtin_ia32_phsubsw256((__v16hi)__a, (__v16hi)__b);
Craig Topper3fe5ac42011-12-21 08:17:40 +0000268}
269
Michael Kupersteine45af542015-06-30 13:36:19 +0000270static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000271_mm256_maddubs_epi16(__m256i __a, __m256i __b)
Craig Toppera73baa82011-12-21 08:35:05 +0000272{
David Blaikie3302f2b2013-01-16 23:08:36 +0000273 return (__m256i)__builtin_ia32_pmaddubsw256((__v32qi)__a, (__v32qi)__b);
Craig Toppera73baa82011-12-21 08:35:05 +0000274}
275
Michael Kupersteine45af542015-06-30 13:36:19 +0000276static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000277_mm256_madd_epi16(__m256i __a, __m256i __b)
Craig Toppera73baa82011-12-21 08:35:05 +0000278{
David Blaikie3302f2b2013-01-16 23:08:36 +0000279 return (__m256i)__builtin_ia32_pmaddwd256((__v16hi)__a, (__v16hi)__b);
Craig Toppera73baa82011-12-21 08:35:05 +0000280}
281
Michael Kupersteine45af542015-06-30 13:36:19 +0000282static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000283_mm256_max_epi8(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000284{
David Blaikie3302f2b2013-01-16 23:08:36 +0000285 return (__m256i)__builtin_ia32_pmaxsb256((__v32qi)__a, (__v32qi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000286}
287
Michael Kupersteine45af542015-06-30 13:36:19 +0000288static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000289_mm256_max_epi16(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000290{
David Blaikie3302f2b2013-01-16 23:08:36 +0000291 return (__m256i)__builtin_ia32_pmaxsw256((__v16hi)__a, (__v16hi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000292}
293
Michael Kupersteine45af542015-06-30 13:36:19 +0000294static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000295_mm256_max_epi32(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000296{
David Blaikie3302f2b2013-01-16 23:08:36 +0000297 return (__m256i)__builtin_ia32_pmaxsd256((__v8si)__a, (__v8si)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000298}
299
Michael Kupersteine45af542015-06-30 13:36:19 +0000300static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000301_mm256_max_epu8(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000302{
David Blaikie3302f2b2013-01-16 23:08:36 +0000303 return (__m256i)__builtin_ia32_pmaxub256((__v32qi)__a, (__v32qi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000304}
305
Michael Kupersteine45af542015-06-30 13:36:19 +0000306static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000307_mm256_max_epu16(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000308{
David Blaikie3302f2b2013-01-16 23:08:36 +0000309 return (__m256i)__builtin_ia32_pmaxuw256((__v16hi)__a, (__v16hi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000310}
311
Michael Kupersteine45af542015-06-30 13:36:19 +0000312static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000313_mm256_max_epu32(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000314{
David Blaikie3302f2b2013-01-16 23:08:36 +0000315 return (__m256i)__builtin_ia32_pmaxud256((__v8si)__a, (__v8si)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000316}
317
Michael Kupersteine45af542015-06-30 13:36:19 +0000318static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000319_mm256_min_epi8(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000320{
David Blaikie3302f2b2013-01-16 23:08:36 +0000321 return (__m256i)__builtin_ia32_pminsb256((__v32qi)__a, (__v32qi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000322}
323
Michael Kupersteine45af542015-06-30 13:36:19 +0000324static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000325_mm256_min_epi16(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000326{
David Blaikie3302f2b2013-01-16 23:08:36 +0000327 return (__m256i)__builtin_ia32_pminsw256((__v16hi)__a, (__v16hi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000328}
329
Michael Kupersteine45af542015-06-30 13:36:19 +0000330static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000331_mm256_min_epi32(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000332{
David Blaikie3302f2b2013-01-16 23:08:36 +0000333 return (__m256i)__builtin_ia32_pminsd256((__v8si)__a, (__v8si)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000334}
335
Michael Kupersteine45af542015-06-30 13:36:19 +0000336static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000337_mm256_min_epu8(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000338{
David Blaikie3302f2b2013-01-16 23:08:36 +0000339 return (__m256i)__builtin_ia32_pminub256((__v32qi)__a, (__v32qi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000340}
341
Michael Kupersteine45af542015-06-30 13:36:19 +0000342static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000343_mm256_min_epu16(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000344{
David Blaikie3302f2b2013-01-16 23:08:36 +0000345 return (__m256i)__builtin_ia32_pminuw256 ((__v16hi)__a, (__v16hi)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000346}
347
Michael Kupersteine45af542015-06-30 13:36:19 +0000348static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000349_mm256_min_epu32(__m256i __a, __m256i __b)
Craig Topper1f2460a2011-12-22 09:18:58 +0000350{
David Blaikie3302f2b2013-01-16 23:08:36 +0000351 return (__m256i)__builtin_ia32_pminud256((__v8si)__a, (__v8si)__b);
Craig Topper1f2460a2011-12-22 09:18:58 +0000352}
353
Michael Kupersteine45af542015-06-30 13:36:19 +0000354static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000355_mm256_movemask_epi8(__m256i __a)
Craig Topper1f2460a2011-12-22 09:18:58 +0000356{
David Blaikie3302f2b2013-01-16 23:08:36 +0000357 return __builtin_ia32_pmovmskb256((__v32qi)__a);
Craig Topper1f2460a2011-12-22 09:18:58 +0000358}
359
Michael Kupersteine45af542015-06-30 13:36:19 +0000360static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000361_mm256_cvtepi8_epi16(__m128i __V)
362{
363 return (__m256i)__builtin_ia32_pmovsxbw256((__v16qi)__V);
364}
365
Michael Kupersteine45af542015-06-30 13:36:19 +0000366static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000367_mm256_cvtepi8_epi32(__m128i __V)
368{
369 return (__m256i)__builtin_ia32_pmovsxbd256((__v16qi)__V);
370}
371
Michael Kupersteine45af542015-06-30 13:36:19 +0000372static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000373_mm256_cvtepi8_epi64(__m128i __V)
374{
375 return (__m256i)__builtin_ia32_pmovsxbq256((__v16qi)__V);
376}
377
Michael Kupersteine45af542015-06-30 13:36:19 +0000378static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000379_mm256_cvtepi16_epi32(__m128i __V)
380{
381 return (__m256i)__builtin_ia32_pmovsxwd256((__v8hi)__V);
382}
383
Michael Kupersteine45af542015-06-30 13:36:19 +0000384static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000385_mm256_cvtepi16_epi64(__m128i __V)
386{
387 return (__m256i)__builtin_ia32_pmovsxwq256((__v8hi)__V);
388}
389
Michael Kupersteine45af542015-06-30 13:36:19 +0000390static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000391_mm256_cvtepi32_epi64(__m128i __V)
392{
393 return (__m256i)__builtin_ia32_pmovsxdq256((__v4si)__V);
394}
395
Michael Kupersteine45af542015-06-30 13:36:19 +0000396static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000397_mm256_cvtepu8_epi16(__m128i __V)
398{
399 return (__m256i)__builtin_ia32_pmovzxbw256((__v16qi)__V);
400}
401
Michael Kupersteine45af542015-06-30 13:36:19 +0000402static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000403_mm256_cvtepu8_epi32(__m128i __V)
404{
405 return (__m256i)__builtin_ia32_pmovzxbd256((__v16qi)__V);
406}
407
Michael Kupersteine45af542015-06-30 13:36:19 +0000408static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000409_mm256_cvtepu8_epi64(__m128i __V)
410{
411 return (__m256i)__builtin_ia32_pmovzxbq256((__v16qi)__V);
412}
413
Michael Kupersteine45af542015-06-30 13:36:19 +0000414static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000415_mm256_cvtepu16_epi32(__m128i __V)
416{
417 return (__m256i)__builtin_ia32_pmovzxwd256((__v8hi)__V);
418}
419
Michael Kupersteine45af542015-06-30 13:36:19 +0000420static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000421_mm256_cvtepu16_epi64(__m128i __V)
422{
423 return (__m256i)__builtin_ia32_pmovzxwq256((__v8hi)__V);
424}
425
Michael Kupersteine45af542015-06-30 13:36:19 +0000426static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper1f2460a2011-12-22 09:18:58 +0000427_mm256_cvtepu32_epi64(__m128i __V)
428{
429 return (__m256i)__builtin_ia32_pmovzxdq256((__v4si)__V);
430}
431
Michael Kupersteine45af542015-06-30 13:36:19 +0000432static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000433_mm256_mul_epi32(__m256i __a, __m256i __b)
Craig Topper235a3652011-12-23 08:31:16 +0000434{
David Blaikie3302f2b2013-01-16 23:08:36 +0000435 return (__m256i)__builtin_ia32_pmuldq256((__v8si)__a, (__v8si)__b);
Craig Topper235a3652011-12-23 08:31:16 +0000436}
437
Michael Kupersteine45af542015-06-30 13:36:19 +0000438static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000439_mm256_mulhrs_epi16(__m256i __a, __m256i __b)
Craig Topper235a3652011-12-23 08:31:16 +0000440{
David Blaikie3302f2b2013-01-16 23:08:36 +0000441 return (__m256i)__builtin_ia32_pmulhrsw256((__v16hi)__a, (__v16hi)__b);
Craig Topper235a3652011-12-23 08:31:16 +0000442}
443
Michael Kupersteine45af542015-06-30 13:36:19 +0000444static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000445_mm256_mulhi_epu16(__m256i __a, __m256i __b)
Craig Topper235a3652011-12-23 08:31:16 +0000446{
David Blaikie3302f2b2013-01-16 23:08:36 +0000447 return (__m256i)__builtin_ia32_pmulhuw256((__v16hi)__a, (__v16hi)__b);
Craig Topper235a3652011-12-23 08:31:16 +0000448}
449
Michael Kupersteine45af542015-06-30 13:36:19 +0000450static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000451_mm256_mulhi_epi16(__m256i __a, __m256i __b)
Craig Topper235a3652011-12-23 08:31:16 +0000452{
David Blaikie3302f2b2013-01-16 23:08:36 +0000453 return (__m256i)__builtin_ia32_pmulhw256((__v16hi)__a, (__v16hi)__b);
Craig Topper235a3652011-12-23 08:31:16 +0000454}
455
Michael Kupersteine45af542015-06-30 13:36:19 +0000456static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000457_mm256_mullo_epi16(__m256i __a, __m256i __b)
Craig Topper235a3652011-12-23 08:31:16 +0000458{
David Blaikie3302f2b2013-01-16 23:08:36 +0000459 return (__m256i)((__v16hi)__a * (__v16hi)__b);
Craig Topper235a3652011-12-23 08:31:16 +0000460}
461
Michael Kupersteine45af542015-06-30 13:36:19 +0000462static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000463_mm256_mullo_epi32 (__m256i __a, __m256i __b)
Craig Topper235a3652011-12-23 08:31:16 +0000464{
David Blaikie3302f2b2013-01-16 23:08:36 +0000465 return (__m256i)((__v8si)__a * (__v8si)__b);
Craig Topper235a3652011-12-23 08:31:16 +0000466}
467
Michael Kupersteine45af542015-06-30 13:36:19 +0000468static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000469_mm256_mul_epu32(__m256i __a, __m256i __b)
Craig Topper235a3652011-12-23 08:31:16 +0000470{
David Blaikie3302f2b2013-01-16 23:08:36 +0000471 return __builtin_ia32_pmuludq256((__v8si)__a, (__v8si)__b);
Craig Topper235a3652011-12-23 08:31:16 +0000472}
473
Michael Kupersteine45af542015-06-30 13:36:19 +0000474static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000475_mm256_or_si256(__m256i __a, __m256i __b)
Craig Toppera557e1c2011-12-19 09:03:48 +0000476{
David Blaikie3302f2b2013-01-16 23:08:36 +0000477 return __a | __b;
Craig Toppera557e1c2011-12-19 09:03:48 +0000478}
479
Michael Kupersteine45af542015-06-30 13:36:19 +0000480static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000481_mm256_sad_epu8(__m256i __a, __m256i __b)
Craig Topperf4bb9522011-12-24 03:28:57 +0000482{
David Blaikie3302f2b2013-01-16 23:08:36 +0000483 return __builtin_ia32_psadbw256((__v32qi)__a, (__v32qi)__b);
Craig Topperf4bb9522011-12-24 03:28:57 +0000484}
485
Michael Kupersteine45af542015-06-30 13:36:19 +0000486static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000487_mm256_shuffle_epi8(__m256i __a, __m256i __b)
Craig Topperf4bb9522011-12-24 03:28:57 +0000488{
David Blaikie3302f2b2013-01-16 23:08:36 +0000489 return (__m256i)__builtin_ia32_pshufb256((__v32qi)__a, (__v32qi)__b);
Craig Topperf4bb9522011-12-24 03:28:57 +0000490}
491
492#define _mm256_shuffle_epi32(a, imm) __extension__ ({ \
493 __m256i __a = (a); \
494 (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)_mm256_set1_epi32(0), \
495 (imm) & 0x3, ((imm) & 0xc) >> 2, \
496 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \
497 4 + (((imm) & 0x03) >> 0), \
498 4 + (((imm) & 0x0c) >> 2), \
499 4 + (((imm) & 0x30) >> 4), \
500 4 + (((imm) & 0xc0) >> 6)); })
501
502#define _mm256_shufflehi_epi16(a, imm) __extension__ ({ \
503 __m256i __a = (a); \
504 (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)_mm256_set1_epi16(0), \
505 0, 1, 2, 3, \
506 4 + (((imm) & 0x03) >> 0), \
507 4 + (((imm) & 0x0c) >> 2), \
508 4 + (((imm) & 0x30) >> 4), \
509 4 + (((imm) & 0xc0) >> 6), \
510 8, 9, 10, 11, \
511 12 + (((imm) & 0x03) >> 0), \
512 12 + (((imm) & 0x0c) >> 2), \
513 12 + (((imm) & 0x30) >> 4), \
514 12 + (((imm) & 0xc0) >> 6)); })
515
516#define _mm256_shufflelo_epi16(a, imm) __extension__ ({ \
517 __m256i __a = (a); \
518 (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)_mm256_set1_epi16(0), \
519 (imm) & 0x3,((imm) & 0xc) >> 2, \
520 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \
521 4, 5, 6, 7, \
522 8 + (((imm) & 0x03) >> 0), \
523 8 + (((imm) & 0x0c) >> 2), \
524 8 + (((imm) & 0x30) >> 4), \
525 8 + (((imm) & 0xc0) >> 6), \
526 12, 13, 14, 15); })
527
Michael Kupersteine45af542015-06-30 13:36:19 +0000528static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000529_mm256_sign_epi8(__m256i __a, __m256i __b)
Craig Topperf4bb9522011-12-24 03:28:57 +0000530{
David Blaikie3302f2b2013-01-16 23:08:36 +0000531 return (__m256i)__builtin_ia32_psignb256((__v32qi)__a, (__v32qi)__b);
Craig Topperf4bb9522011-12-24 03:28:57 +0000532}
533
Michael Kupersteine45af542015-06-30 13:36:19 +0000534static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000535_mm256_sign_epi16(__m256i __a, __m256i __b)
Craig Topperf4bb9522011-12-24 03:28:57 +0000536{
David Blaikie3302f2b2013-01-16 23:08:36 +0000537 return (__m256i)__builtin_ia32_psignw256((__v16hi)__a, (__v16hi)__b);
Craig Topperf4bb9522011-12-24 03:28:57 +0000538}
539
Michael Kupersteine45af542015-06-30 13:36:19 +0000540static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000541_mm256_sign_epi32(__m256i __a, __m256i __b)
Craig Topperf4bb9522011-12-24 03:28:57 +0000542{
David Blaikie3302f2b2013-01-16 23:08:36 +0000543 return (__m256i)__builtin_ia32_psignd256((__v8si)__a, (__v8si)__b);
Craig Topperf4bb9522011-12-24 03:28:57 +0000544}
545
546#define _mm256_slli_si256(a, count) __extension__ ({ \
547 __m256i __a = (a); \
548 (__m256i)__builtin_ia32_pslldqi256(__a, (count)*8); })
549
Michael Kuperstein61681832015-05-19 13:05:46 +0000550#define _mm256_bslli_epi128(a, count) _mm256_slli_si256((a), (count))
551
Michael Kupersteine45af542015-06-30 13:36:19 +0000552static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000553_mm256_slli_epi16(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000554{
David Blaikie3302f2b2013-01-16 23:08:36 +0000555 return (__m256i)__builtin_ia32_psllwi256((__v16hi)__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000556}
557
Michael Kupersteine45af542015-06-30 13:36:19 +0000558static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000559_mm256_sll_epi16(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000560{
David Blaikie3302f2b2013-01-16 23:08:36 +0000561 return (__m256i)__builtin_ia32_psllw256((__v16hi)__a, (__v8hi)__count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000562}
563
Michael Kupersteine45af542015-06-30 13:36:19 +0000564static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000565_mm256_slli_epi32(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000566{
David Blaikie3302f2b2013-01-16 23:08:36 +0000567 return (__m256i)__builtin_ia32_pslldi256((__v8si)__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000568}
569
Michael Kupersteine45af542015-06-30 13:36:19 +0000570static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000571_mm256_sll_epi32(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000572{
David Blaikie3302f2b2013-01-16 23:08:36 +0000573 return (__m256i)__builtin_ia32_pslld256((__v8si)__a, (__v4si)__count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000574}
575
Michael Kupersteine45af542015-06-30 13:36:19 +0000576static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000577_mm256_slli_epi64(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000578{
David Blaikie3302f2b2013-01-16 23:08:36 +0000579 return __builtin_ia32_psllqi256(__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000580}
581
Michael Kupersteine45af542015-06-30 13:36:19 +0000582static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000583_mm256_sll_epi64(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000584{
David Blaikie3302f2b2013-01-16 23:08:36 +0000585 return __builtin_ia32_psllq256(__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000586}
587
Michael Kupersteine45af542015-06-30 13:36:19 +0000588static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000589_mm256_srai_epi16(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000590{
David Blaikie3302f2b2013-01-16 23:08:36 +0000591 return (__m256i)__builtin_ia32_psrawi256((__v16hi)__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000592}
593
Michael Kupersteine45af542015-06-30 13:36:19 +0000594static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000595_mm256_sra_epi16(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000596{
David Blaikie3302f2b2013-01-16 23:08:36 +0000597 return (__m256i)__builtin_ia32_psraw256((__v16hi)__a, (__v8hi)__count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000598}
599
Michael Kupersteine45af542015-06-30 13:36:19 +0000600static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000601_mm256_srai_epi32(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000602{
David Blaikie3302f2b2013-01-16 23:08:36 +0000603 return (__m256i)__builtin_ia32_psradi256((__v8si)__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000604}
605
Michael Kupersteine45af542015-06-30 13:36:19 +0000606static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000607_mm256_sra_epi32(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000608{
David Blaikie3302f2b2013-01-16 23:08:36 +0000609 return (__m256i)__builtin_ia32_psrad256((__v8si)__a, (__v4si)__count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000610}
611
612#define _mm256_srli_si256(a, count) __extension__ ({ \
613 __m256i __a = (a); \
614 (__m256i)__builtin_ia32_psrldqi256(__a, (count)*8); })
615
Michael Kuperstein61681832015-05-19 13:05:46 +0000616#define _mm256_bsrli_epi128(a, count) _mm256_srli_si256((a), (count))
617
Michael Kupersteine45af542015-06-30 13:36:19 +0000618static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000619_mm256_srli_epi16(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000620{
David Blaikie3302f2b2013-01-16 23:08:36 +0000621 return (__m256i)__builtin_ia32_psrlwi256((__v16hi)__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000622}
623
Michael Kupersteine45af542015-06-30 13:36:19 +0000624static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000625_mm256_srl_epi16(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000626{
David Blaikie3302f2b2013-01-16 23:08:36 +0000627 return (__m256i)__builtin_ia32_psrlw256((__v16hi)__a, (__v8hi)__count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000628}
629
Michael Kupersteine45af542015-06-30 13:36:19 +0000630static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000631_mm256_srli_epi32(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000632{
David Blaikie3302f2b2013-01-16 23:08:36 +0000633 return (__m256i)__builtin_ia32_psrldi256((__v8si)__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000634}
635
Michael Kupersteine45af542015-06-30 13:36:19 +0000636static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000637_mm256_srl_epi32(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000638{
David Blaikie3302f2b2013-01-16 23:08:36 +0000639 return (__m256i)__builtin_ia32_psrld256((__v8si)__a, (__v4si)__count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000640}
641
Michael Kupersteine45af542015-06-30 13:36:19 +0000642static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000643_mm256_srli_epi64(__m256i __a, int __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000644{
David Blaikie3302f2b2013-01-16 23:08:36 +0000645 return __builtin_ia32_psrlqi256(__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000646}
647
Michael Kupersteine45af542015-06-30 13:36:19 +0000648static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000649_mm256_srl_epi64(__m256i __a, __m128i __count)
Craig Topperf4bb9522011-12-24 03:28:57 +0000650{
David Blaikie3302f2b2013-01-16 23:08:36 +0000651 return __builtin_ia32_psrlq256(__a, __count);
Craig Topperf4bb9522011-12-24 03:28:57 +0000652}
653
Michael Kupersteine45af542015-06-30 13:36:19 +0000654static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000655_mm256_sub_epi8(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +0000656{
David Blaikie3302f2b2013-01-16 23:08:36 +0000657 return (__m256i)((__v32qi)__a - (__v32qi)__b);
Craig Topperdec792e2011-12-19 05:04:33 +0000658}
659
Michael Kupersteine45af542015-06-30 13:36:19 +0000660static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000661_mm256_sub_epi16(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +0000662{
David Blaikie3302f2b2013-01-16 23:08:36 +0000663 return (__m256i)((__v16hi)__a - (__v16hi)__b);
Craig Topperdec792e2011-12-19 05:04:33 +0000664}
665
Michael Kupersteine45af542015-06-30 13:36:19 +0000666static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000667_mm256_sub_epi32(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +0000668{
David Blaikie3302f2b2013-01-16 23:08:36 +0000669 return (__m256i)((__v8si)__a - (__v8si)__b);
Craig Topperdec792e2011-12-19 05:04:33 +0000670}
671
Michael Kupersteine45af542015-06-30 13:36:19 +0000672static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000673_mm256_sub_epi64(__m256i __a, __m256i __b)
Craig Topperdec792e2011-12-19 05:04:33 +0000674{
David Blaikie3302f2b2013-01-16 23:08:36 +0000675 return __a - __b;
Craig Topperdec792e2011-12-19 05:04:33 +0000676}
Craig Topper94aba2c2011-12-19 07:03:25 +0000677
Michael Kupersteine45af542015-06-30 13:36:19 +0000678static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000679_mm256_subs_epi8(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000680{
David Blaikie3302f2b2013-01-16 23:08:36 +0000681 return (__m256i)__builtin_ia32_psubsb256((__v32qi)__a, (__v32qi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000682}
683
Michael Kupersteine45af542015-06-30 13:36:19 +0000684static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000685_mm256_subs_epi16(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000686{
David Blaikie3302f2b2013-01-16 23:08:36 +0000687 return (__m256i)__builtin_ia32_psubsw256((__v16hi)__a, (__v16hi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000688}
689
Michael Kupersteine45af542015-06-30 13:36:19 +0000690static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000691_mm256_subs_epu8(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000692{
David Blaikie3302f2b2013-01-16 23:08:36 +0000693 return (__m256i)__builtin_ia32_psubusb256((__v32qi)__a, (__v32qi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000694}
695
Michael Kupersteine45af542015-06-30 13:36:19 +0000696static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000697_mm256_subs_epu16(__m256i __a, __m256i __b)
Craig Topper94aba2c2011-12-19 07:03:25 +0000698{
David Blaikie3302f2b2013-01-16 23:08:36 +0000699 return (__m256i)__builtin_ia32_psubusw256((__v16hi)__a, (__v16hi)__b);
Craig Topper94aba2c2011-12-19 07:03:25 +0000700}
701
Michael Kupersteine45af542015-06-30 13:36:19 +0000702static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000703_mm256_unpackhi_epi8(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000704{
David Blaikie3302f2b2013-01-16 23:08:36 +0000705 return (__m256i)__builtin_shufflevector((__v32qi)__a, (__v32qi)__b, 8, 32+8, 9, 32+9, 10, 32+10, 11, 32+11, 12, 32+12, 13, 32+13, 14, 32+14, 15, 32+15, 24, 32+24, 25, 32+25, 26, 32+26, 27, 32+27, 28, 32+28, 29, 32+29, 30, 32+30, 31, 32+31);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000706}
707
Michael Kupersteine45af542015-06-30 13:36:19 +0000708static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000709_mm256_unpackhi_epi16(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000710{
David Blaikie3302f2b2013-01-16 23:08:36 +0000711 return (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)__b, 4, 16+4, 5, 16+5, 6, 16+6, 7, 16+7, 12, 16+12, 13, 16+13, 14, 16+14, 15, 16+15);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000712}
713
Michael Kupersteine45af542015-06-30 13:36:19 +0000714static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000715_mm256_unpackhi_epi32(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000716{
David Blaikie3302f2b2013-01-16 23:08:36 +0000717 return (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)__b, 2, 8+2, 3, 8+3, 6, 8+6, 7, 8+7);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000718}
719
Michael Kupersteine45af542015-06-30 13:36:19 +0000720static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000721_mm256_unpackhi_epi64(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000722{
David Blaikie3302f2b2013-01-16 23:08:36 +0000723 return (__m256i)__builtin_shufflevector(__a, __b, 1, 4+1, 3, 4+3);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000724}
725
Michael Kupersteine45af542015-06-30 13:36:19 +0000726static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000727_mm256_unpacklo_epi8(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000728{
David Blaikie3302f2b2013-01-16 23:08:36 +0000729 return (__m256i)__builtin_shufflevector((__v32qi)__a, (__v32qi)__b, 0, 32+0, 1, 32+1, 2, 32+2, 3, 32+3, 4, 32+4, 5, 32+5, 6, 32+6, 7, 32+7, 16, 32+16, 17, 32+17, 18, 32+18, 19, 32+19, 20, 32+20, 21, 32+21, 22, 32+22, 23, 32+23);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000730}
731
Michael Kupersteine45af542015-06-30 13:36:19 +0000732static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000733_mm256_unpacklo_epi16(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000734{
David Blaikie3302f2b2013-01-16 23:08:36 +0000735 return (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)__b, 0, 16+0, 1, 16+1, 2, 16+2, 3, 16+3, 8, 16+8, 9, 16+9, 10, 16+10, 11, 16+11);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000736}
737
Michael Kupersteine45af542015-06-30 13:36:19 +0000738static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000739_mm256_unpacklo_epi32(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000740{
David Blaikie3302f2b2013-01-16 23:08:36 +0000741 return (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)__b, 0, 8+0, 1, 8+1, 4, 8+4, 5, 8+5);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000742}
743
Michael Kupersteine45af542015-06-30 13:36:19 +0000744static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000745_mm256_unpacklo_epi64(__m256i __a, __m256i __b)
Craig Toppera6fdbd12011-12-24 03:58:43 +0000746{
David Blaikie3302f2b2013-01-16 23:08:36 +0000747 return (__m256i)__builtin_shufflevector(__a, __b, 0, 4+0, 2, 4+2);
Craig Toppera6fdbd12011-12-24 03:58:43 +0000748}
749
Michael Kupersteine45af542015-06-30 13:36:19 +0000750static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000751_mm256_xor_si256(__m256i __a, __m256i __b)
Craig Toppera557e1c2011-12-19 09:03:48 +0000752{
David Blaikie3302f2b2013-01-16 23:08:36 +0000753 return __a ^ __b;
Craig Toppera557e1c2011-12-19 09:03:48 +0000754}
Craig Topper94798952011-12-24 05:19:29 +0000755
Michael Kupersteine45af542015-06-30 13:36:19 +0000756static __inline__ __m256i __DEFAULT_FN_ATTRS
Ahmed Bougacha7dfaaf32015-10-02 23:29:26 +0000757_mm256_stream_load_si256(__m256i const *__V)
Craig Topper94798952011-12-24 05:19:29 +0000758{
Ahmed Bougacha7dfaaf32015-10-02 23:29:26 +0000759 return (__m256i)__builtin_ia32_movntdqa256((const __v4di *)__V);
Craig Topper94798952011-12-24 05:19:29 +0000760}
761
Michael Kupersteine45af542015-06-30 13:36:19 +0000762static __inline__ __m128 __DEFAULT_FN_ATTRS
Craig Topper94798952011-12-24 05:19:29 +0000763_mm_broadcastss_ps(__m128 __X)
764{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000765 return (__m128)__builtin_shufflevector((__v4sf)__X, (__v4sf)__X, 0, 0, 0, 0);
Craig Topper94798952011-12-24 05:19:29 +0000766}
767
Michael Kupersteine45af542015-06-30 13:36:19 +0000768static __inline__ __m128d __DEFAULT_FN_ATTRS
Michael Kuperstein877f3cb2015-05-19 14:49:14 +0000769_mm_broadcastsd_pd(__m128d __a)
770{
771 return __builtin_shufflevector(__a, __a, 0, 0);
772}
773
Michael Kupersteine45af542015-06-30 13:36:19 +0000774static __inline__ __m256 __DEFAULT_FN_ATTRS
Craig Topper94798952011-12-24 05:19:29 +0000775_mm256_broadcastss_ps(__m128 __X)
776{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000777 return (__m256)__builtin_shufflevector((__v4sf)__X, (__v4sf)__X, 0, 0, 0, 0, 0, 0, 0, 0);
Craig Topper94798952011-12-24 05:19:29 +0000778}
779
Michael Kupersteine45af542015-06-30 13:36:19 +0000780static __inline__ __m256d __DEFAULT_FN_ATTRS
Craig Topper94798952011-12-24 05:19:29 +0000781_mm256_broadcastsd_pd(__m128d __X)
782{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000783 return (__m256d)__builtin_shufflevector((__v2df)__X, (__v2df)__X, 0, 0, 0, 0);
Craig Topper94798952011-12-24 05:19:29 +0000784}
785
Michael Kupersteine45af542015-06-30 13:36:19 +0000786static __inline__ __m256i __DEFAULT_FN_ATTRS
Juergen Ributzka2c2dbf42013-08-17 16:40:09 +0000787_mm256_broadcastsi128_si256(__m128i __X)
Craig Topper94798952011-12-24 05:19:29 +0000788{
Juergen Ributzka9baa03f2015-03-03 17:22:53 +0000789 return (__m256i)__builtin_shufflevector(__X, __X, 0, 1, 0, 1);
Craig Topper94798952011-12-24 05:19:29 +0000790}
791
792#define _mm_blend_epi32(V1, V2, M) __extension__ ({ \
793 __m128i __V1 = (V1); \
794 __m128i __V2 = (V2); \
Filipe Cabecinhas5d289b42014-05-13 02:37:02 +0000795 (__m128i)__builtin_shufflevector((__v4si)__V1, (__v4si)__V2, \
796 (((M) & 0x01) ? 4 : 0), \
797 (((M) & 0x02) ? 5 : 1), \
798 (((M) & 0x04) ? 6 : 2), \
799 (((M) & 0x08) ? 7 : 3)); })
Craig Topper94798952011-12-24 05:19:29 +0000800
801#define _mm256_blend_epi32(V1, V2, M) __extension__ ({ \
802 __m256i __V1 = (V1); \
803 __m256i __V2 = (V2); \
Filipe Cabecinhas5d289b42014-05-13 02:37:02 +0000804 (__m256i)__builtin_shufflevector((__v8si)__V1, (__v8si)__V2, \
805 (((M) & 0x01) ? 8 : 0), \
806 (((M) & 0x02) ? 9 : 1), \
807 (((M) & 0x04) ? 10 : 2), \
808 (((M) & 0x08) ? 11 : 3), \
809 (((M) & 0x10) ? 12 : 4), \
810 (((M) & 0x20) ? 13 : 5), \
811 (((M) & 0x40) ? 14 : 6), \
812 (((M) & 0x80) ? 15 : 7)); })
Craig Topper9f009482011-12-24 07:55:14 +0000813
Michael Kupersteine45af542015-06-30 13:36:19 +0000814static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000815_mm256_broadcastb_epi8(__m128i __X)
816{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000817 return (__m256i)__builtin_shufflevector((__v16qi)__X, (__v16qi)__X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000818}
819
Michael Kupersteine45af542015-06-30 13:36:19 +0000820static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000821_mm256_broadcastw_epi16(__m128i __X)
822{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000823 return (__m256i)__builtin_shufflevector((__v8hi)__X, (__v8hi)__X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000824}
825
Michael Kupersteine45af542015-06-30 13:36:19 +0000826static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000827_mm256_broadcastd_epi32(__m128i __X)
828{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000829 return (__m256i)__builtin_shufflevector((__v4si)__X, (__v4si)__X, 0, 0, 0, 0, 0, 0, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000830}
831
Michael Kupersteine45af542015-06-30 13:36:19 +0000832static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000833_mm256_broadcastq_epi64(__m128i __X)
834{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000835 return (__m256i)__builtin_shufflevector(__X, __X, 0, 0, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000836}
837
Michael Kupersteine45af542015-06-30 13:36:19 +0000838static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000839_mm_broadcastb_epi8(__m128i __X)
840{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000841 return (__m128i)__builtin_shufflevector((__v16qi)__X, (__v16qi)__X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000842}
843
Michael Kupersteine45af542015-06-30 13:36:19 +0000844static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000845_mm_broadcastw_epi16(__m128i __X)
846{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000847 return (__m128i)__builtin_shufflevector((__v8hi)__X, (__v8hi)__X, 0, 0, 0, 0, 0, 0, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000848}
849
850
Michael Kupersteine45af542015-06-30 13:36:19 +0000851static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000852_mm_broadcastd_epi32(__m128i __X)
853{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000854 return (__m128i)__builtin_shufflevector((__v4si)__X, (__v4si)__X, 0, 0, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000855}
856
Michael Kupersteine45af542015-06-30 13:36:19 +0000857static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper9f009482011-12-24 07:55:14 +0000858_mm_broadcastq_epi64(__m128i __X)
859{
Ahmed Bougacha5e354cb2015-08-20 20:27:21 +0000860 return (__m128i)__builtin_shufflevector(__X, __X, 0, 0);
Craig Topper9f009482011-12-24 07:55:14 +0000861}
862
Michael Kupersteine45af542015-06-30 13:36:19 +0000863static __inline__ __m256i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000864_mm256_permutevar8x32_epi32(__m256i __a, __m256i __b)
Craig Topper9f009482011-12-24 07:55:14 +0000865{
David Blaikie3302f2b2013-01-16 23:08:36 +0000866 return (__m256i)__builtin_ia32_permvarsi256((__v8si)__a, (__v8si)__b);
Craig Topper9f009482011-12-24 07:55:14 +0000867}
868
869#define _mm256_permute4x64_pd(V, M) __extension__ ({ \
870 __m256d __V = (V); \
Craig Topper8e578552012-04-15 22:18:10 +0000871 (__m256d)__builtin_shufflevector((__v4df)__V, (__v4df) _mm256_setzero_pd(), \
872 (M) & 0x3, ((M) & 0xc) >> 2, \
873 ((M) & 0x30) >> 4, ((M) & 0xc0) >> 6); })
Craig Topper9f009482011-12-24 07:55:14 +0000874
Michael Kupersteine45af542015-06-30 13:36:19 +0000875static __inline__ __m256 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000876_mm256_permutevar8x32_ps(__m256 __a, __m256 __b)
Craig Topper9f009482011-12-24 07:55:14 +0000877{
David Blaikie3302f2b2013-01-16 23:08:36 +0000878 return (__m256)__builtin_ia32_permvarsf256((__v8sf)__a, (__v8sf)__b);
Craig Topper9f009482011-12-24 07:55:14 +0000879}
880
881#define _mm256_permute4x64_epi64(V, M) __extension__ ({ \
882 __m256i __V = (V); \
Craig Topper8e578552012-04-15 22:18:10 +0000883 (__m256i)__builtin_shufflevector((__v4di)__V, (__v4di) _mm256_setzero_si256(), \
884 (M) & 0x3, ((M) & 0xc) >> 2, \
885 ((M) & 0x30) >> 4, ((M) & 0xc0) >> 6); })
Craig Topper9f009482011-12-24 07:55:14 +0000886
887#define _mm256_permute2x128_si256(V1, V2, M) __extension__ ({ \
888 __m256i __V1 = (V1); \
889 __m256i __V2 = (V2); \
Craig Topper26e74e52012-04-17 05:16:56 +0000890 (__m256i)__builtin_ia32_permti256(__V1, __V2, (M)); })
Craig Topper175543a2011-12-24 17:20:15 +0000891
Sanjay Patel0a6da5d2015-03-12 21:54:24 +0000892#define _mm256_extracti128_si256(V, M) __extension__ ({ \
893 (__m128i)__builtin_shufflevector( \
894 (__v4di)(V), \
895 (__v4di)(_mm256_setzero_si256()), \
896 (((M) & 1) ? 2 : 0), \
897 (((M) & 1) ? 3 : 1) );})
Craig Topper175543a2011-12-24 17:20:15 +0000898
Sanjay Patel0a6da5d2015-03-12 21:54:24 +0000899#define _mm256_inserti128_si256(V1, V2, M) __extension__ ({ \
900 (__m256i)__builtin_shufflevector( \
901 (__v4di)(V1), \
902 (__v4di)_mm256_castsi128_si256((__m128i)(V2)), \
903 (((M) & 1) ? 0 : 4), \
904 (((M) & 1) ? 1 : 5), \
905 (((M) & 1) ? 4 : 2), \
906 (((M) & 1) ? 5 : 3) );})
Craig Topper175543a2011-12-24 17:20:15 +0000907
Michael Kupersteine45af542015-06-30 13:36:19 +0000908static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000909_mm256_maskload_epi32(int const *__X, __m256i __M)
910{
911 return (__m256i)__builtin_ia32_maskloadd256((const __v8si *)__X, (__v8si)__M);
912}
913
Michael Kupersteine45af542015-06-30 13:36:19 +0000914static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000915_mm256_maskload_epi64(long long const *__X, __m256i __M)
916{
917 return (__m256i)__builtin_ia32_maskloadq256((const __v4di *)__X, __M);
918}
919
Michael Kupersteine45af542015-06-30 13:36:19 +0000920static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000921_mm_maskload_epi32(int const *__X, __m128i __M)
922{
923 return (__m128i)__builtin_ia32_maskloadd((const __v4si *)__X, (__v4si)__M);
924}
925
Michael Kupersteine45af542015-06-30 13:36:19 +0000926static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000927_mm_maskload_epi64(long long const *__X, __m128i __M)
928{
929 return (__m128i)__builtin_ia32_maskloadq((const __v2di *)__X, (__v2di)__M);
930}
931
Michael Kupersteine45af542015-06-30 13:36:19 +0000932static __inline__ void __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000933_mm256_maskstore_epi32(int *__X, __m256i __M, __m256i __Y)
934{
935 __builtin_ia32_maskstored256((__v8si *)__X, (__v8si)__M, (__v8si)__Y);
936}
937
Michael Kupersteine45af542015-06-30 13:36:19 +0000938static __inline__ void __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000939_mm256_maskstore_epi64(long long *__X, __m256i __M, __m256i __Y)
940{
941 __builtin_ia32_maskstoreq256((__v4di *)__X, __M, __Y);
942}
943
Michael Kupersteine45af542015-06-30 13:36:19 +0000944static __inline__ void __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000945_mm_maskstore_epi32(int *__X, __m128i __M, __m128i __Y)
946{
947 __builtin_ia32_maskstored((__v4si *)__X, (__v4si)__M, (__v4si)__Y);
948}
949
Michael Kupersteine45af542015-06-30 13:36:19 +0000950static __inline__ void __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000951_mm_maskstore_epi64(long long *__X, __m128i __M, __m128i __Y)
952{
953 __builtin_ia32_maskstoreq(( __v2di *)__X, __M, __Y);
954}
955
Michael Kupersteine45af542015-06-30 13:36:19 +0000956static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000957_mm256_sllv_epi32(__m256i __X, __m256i __Y)
958{
959 return (__m256i)__builtin_ia32_psllv8si((__v8si)__X, (__v8si)__Y);
960}
961
Michael Kupersteine45af542015-06-30 13:36:19 +0000962static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000963_mm_sllv_epi32(__m128i __X, __m128i __Y)
964{
965 return (__m128i)__builtin_ia32_psllv4si((__v4si)__X, (__v4si)__Y);
966}
967
Michael Kupersteine45af542015-06-30 13:36:19 +0000968static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000969_mm256_sllv_epi64(__m256i __X, __m256i __Y)
970{
971 return (__m256i)__builtin_ia32_psllv4di(__X, __Y);
972}
973
Michael Kupersteine45af542015-06-30 13:36:19 +0000974static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000975_mm_sllv_epi64(__m128i __X, __m128i __Y)
976{
977 return (__m128i)__builtin_ia32_psllv2di(__X, __Y);
978}
979
Michael Kupersteine45af542015-06-30 13:36:19 +0000980static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000981_mm256_srav_epi32(__m256i __X, __m256i __Y)
982{
983 return (__m256i)__builtin_ia32_psrav8si((__v8si)__X, (__v8si)__Y);
984}
985
Michael Kupersteine45af542015-06-30 13:36:19 +0000986static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000987_mm_srav_epi32(__m128i __X, __m128i __Y)
988{
989 return (__m128i)__builtin_ia32_psrav4si((__v4si)__X, (__v4si)__Y);
990}
991
Michael Kupersteine45af542015-06-30 13:36:19 +0000992static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000993_mm256_srlv_epi32(__m256i __X, __m256i __Y)
994{
995 return (__m256i)__builtin_ia32_psrlv8si((__v8si)__X, (__v8si)__Y);
996}
997
Michael Kupersteine45af542015-06-30 13:36:19 +0000998static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +0000999_mm_srlv_epi32(__m128i __X, __m128i __Y)
1000{
1001 return (__m128i)__builtin_ia32_psrlv4si((__v4si)__X, (__v4si)__Y);
1002}
1003
Michael Kupersteine45af542015-06-30 13:36:19 +00001004static __inline__ __m256i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +00001005_mm256_srlv_epi64(__m256i __X, __m256i __Y)
1006{
1007 return (__m256i)__builtin_ia32_psrlv4di(__X, __Y);
1008}
1009
Michael Kupersteine45af542015-06-30 13:36:19 +00001010static __inline__ __m128i __DEFAULT_FN_ATTRS
Craig Topper175543a2011-12-24 17:20:15 +00001011_mm_srlv_epi64(__m128i __X, __m128i __Y)
1012{
1013 return (__m128i)__builtin_ia32_psrlv2di(__X, __Y);
1014}
Manman Renadd5e9e2012-06-26 19:55:09 +00001015
1016#define _mm_mask_i32gather_pd(a, m, i, mask, s) __extension__ ({ \
1017 __m128d __a = (a); \
1018 double const *__m = (m); \
1019 __m128i __i = (i); \
1020 __m128d __mask = (mask); \
1021 (__m128d)__builtin_ia32_gatherd_pd((__v2df)__a, (const __v2df *)__m, \
1022 (__v4si)__i, (__v2df)__mask, (s)); })
1023
1024#define _mm256_mask_i32gather_pd(a, m, i, mask, s) __extension__ ({ \
1025 __m256d __a = (a); \
1026 double const *__m = (m); \
Manman Ren86c32502012-06-29 00:54:35 +00001027 __m128i __i = (i); \
Manman Renadd5e9e2012-06-26 19:55:09 +00001028 __m256d __mask = (mask); \
1029 (__m256d)__builtin_ia32_gatherd_pd256((__v4df)__a, (const __v4df *)__m, \
Manman Ren86c32502012-06-29 00:54:35 +00001030 (__v4si)__i, (__v4df)__mask, (s)); })
Manman Renadd5e9e2012-06-26 19:55:09 +00001031
1032#define _mm_mask_i64gather_pd(a, m, i, mask, s) __extension__ ({ \
1033 __m128d __a = (a); \
1034 double const *__m = (m); \
1035 __m128i __i = (i); \
1036 __m128d __mask = (mask); \
1037 (__m128d)__builtin_ia32_gatherq_pd((__v2df)__a, (const __v2df *)__m, \
1038 (__v2di)__i, (__v2df)__mask, (s)); })
1039
1040#define _mm256_mask_i64gather_pd(a, m, i, mask, s) __extension__ ({ \
1041 __m256d __a = (a); \
1042 double const *__m = (m); \
1043 __m256i __i = (i); \
1044 __m256d __mask = (mask); \
1045 (__m256d)__builtin_ia32_gatherq_pd256((__v4df)__a, (const __v4df *)__m, \
1046 (__v4di)__i, (__v4df)__mask, (s)); })
1047
1048#define _mm_mask_i32gather_ps(a, m, i, mask, s) __extension__ ({ \
1049 __m128 __a = (a); \
1050 float const *__m = (m); \
1051 __m128i __i = (i); \
1052 __m128 __mask = (mask); \
1053 (__m128)__builtin_ia32_gatherd_ps((__v4sf)__a, (const __v4sf *)__m, \
1054 (__v4si)__i, (__v4sf)__mask, (s)); })
1055
1056#define _mm256_mask_i32gather_ps(a, m, i, mask, s) __extension__ ({ \
1057 __m256 __a = (a); \
1058 float const *__m = (m); \
1059 __m256i __i = (i); \
1060 __m256 __mask = (mask); \
1061 (__m256)__builtin_ia32_gatherd_ps256((__v8sf)__a, (const __v8sf *)__m, \
1062 (__v8si)__i, (__v8sf)__mask, (s)); })
1063
1064#define _mm_mask_i64gather_ps(a, m, i, mask, s) __extension__ ({ \
1065 __m128 __a = (a); \
1066 float const *__m = (m); \
1067 __m128i __i = (i); \
1068 __m128 __mask = (mask); \
1069 (__m128)__builtin_ia32_gatherq_ps((__v4sf)__a, (const __v4sf *)__m, \
1070 (__v2di)__i, (__v4sf)__mask, (s)); })
1071
1072#define _mm256_mask_i64gather_ps(a, m, i, mask, s) __extension__ ({ \
Manman Ren86c32502012-06-29 00:54:35 +00001073 __m128 __a = (a); \
Manman Renadd5e9e2012-06-26 19:55:09 +00001074 float const *__m = (m); \
1075 __m256i __i = (i); \
Manman Ren86c32502012-06-29 00:54:35 +00001076 __m128 __mask = (mask); \
1077 (__m128)__builtin_ia32_gatherq_ps256((__v4sf)__a, (const __v4sf *)__m, \
1078 (__v4di)__i, (__v4sf)__mask, (s)); })
1079
1080#define _mm_mask_i32gather_epi32(a, m, i, mask, s) __extension__ ({ \
1081 __m128i __a = (a); \
1082 int const *__m = (m); \
1083 __m128i __i = (i); \
1084 __m128i __mask = (mask); \
1085 (__m128i)__builtin_ia32_gatherd_d((__v4si)__a, (const __v4si *)__m, \
1086 (__v4si)__i, (__v4si)__mask, (s)); })
1087
1088#define _mm256_mask_i32gather_epi32(a, m, i, mask, s) __extension__ ({ \
1089 __m256i __a = (a); \
1090 int const *__m = (m); \
1091 __m256i __i = (i); \
1092 __m256i __mask = (mask); \
1093 (__m256i)__builtin_ia32_gatherd_d256((__v8si)__a, (const __v8si *)__m, \
1094 (__v8si)__i, (__v8si)__mask, (s)); })
1095
1096#define _mm_mask_i64gather_epi32(a, m, i, mask, s) __extension__ ({ \
1097 __m128i __a = (a); \
1098 int const *__m = (m); \
1099 __m128i __i = (i); \
1100 __m128i __mask = (mask); \
1101 (__m128i)__builtin_ia32_gatherq_d((__v4si)__a, (const __v4si *)__m, \
1102 (__v2di)__i, (__v4si)__mask, (s)); })
1103
1104#define _mm256_mask_i64gather_epi32(a, m, i, mask, s) __extension__ ({ \
1105 __m128i __a = (a); \
1106 int const *__m = (m); \
1107 __m256i __i = (i); \
1108 __m128i __mask = (mask); \
1109 (__m128i)__builtin_ia32_gatherq_d256((__v4si)__a, (const __v4si *)__m, \
1110 (__v4di)__i, (__v4si)__mask, (s)); })
1111
1112#define _mm_mask_i32gather_epi64(a, m, i, mask, s) __extension__ ({ \
1113 __m128i __a = (a); \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001114 long long const *__m = (m); \
Manman Ren86c32502012-06-29 00:54:35 +00001115 __m128i __i = (i); \
1116 __m128i __mask = (mask); \
1117 (__m128i)__builtin_ia32_gatherd_q((__v2di)__a, (const __v2di *)__m, \
1118 (__v4si)__i, (__v2di)__mask, (s)); })
1119
1120#define _mm256_mask_i32gather_epi64(a, m, i, mask, s) __extension__ ({ \
1121 __m256i __a = (a); \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001122 long long const *__m = (m); \
Manman Ren86c32502012-06-29 00:54:35 +00001123 __m128i __i = (i); \
1124 __m256i __mask = (mask); \
1125 (__m256i)__builtin_ia32_gatherd_q256((__v4di)__a, (const __v4di *)__m, \
1126 (__v4si)__i, (__v4di)__mask, (s)); })
1127
1128#define _mm_mask_i64gather_epi64(a, m, i, mask, s) __extension__ ({ \
1129 __m128i __a = (a); \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001130 long long const *__m = (m); \
Manman Ren86c32502012-06-29 00:54:35 +00001131 __m128i __i = (i); \
1132 __m128i __mask = (mask); \
1133 (__m128i)__builtin_ia32_gatherq_q((__v2di)__a, (const __v2di *)__m, \
1134 (__v2di)__i, (__v2di)__mask, (s)); })
1135
1136#define _mm256_mask_i64gather_epi64(a, m, i, mask, s) __extension__ ({ \
1137 __m256i __a = (a); \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001138 long long const *__m = (m); \
Manman Ren86c32502012-06-29 00:54:35 +00001139 __m256i __i = (i); \
1140 __m256i __mask = (mask); \
1141 (__m256i)__builtin_ia32_gatherq_q256((__v4di)__a, (const __v4di *)__m, \
1142 (__v4di)__i, (__v4di)__mask, (s)); })
Manman Renf865ba02012-06-29 05:19:13 +00001143
1144#define _mm_i32gather_pd(m, i, s) __extension__ ({ \
1145 double const *__m = (m); \
1146 __m128i __i = (i); \
1147 (__m128d)__builtin_ia32_gatherd_pd((__v2df)_mm_setzero_pd(), \
1148 (const __v2df *)__m, (__v4si)__i, \
1149 (__v2df)_mm_set1_pd((double)(long long int)-1), (s)); })
1150
1151#define _mm256_i32gather_pd(m, i, s) __extension__ ({ \
1152 double const *__m = (m); \
1153 __m128i __i = (i); \
1154 (__m256d)__builtin_ia32_gatherd_pd256((__v4df)_mm256_setzero_pd(), \
1155 (const __v4df *)__m, (__v4si)__i, \
1156 (__v4df)_mm256_set1_pd((double)(long long int)-1), (s)); })
1157
1158#define _mm_i64gather_pd(m, i, s) __extension__ ({ \
1159 double const *__m = (m); \
1160 __m128i __i = (i); \
1161 (__m128d)__builtin_ia32_gatherq_pd((__v2df)_mm_setzero_pd(), \
1162 (const __v2df *)__m, (__v2di)__i, \
1163 (__v2df)_mm_set1_pd((double)(long long int)-1), (s)); })
1164
1165#define _mm256_i64gather_pd(m, i, s) __extension__ ({ \
1166 double const *__m = (m); \
1167 __m256i __i = (i); \
1168 (__m256d)__builtin_ia32_gatherq_pd256((__v4df)_mm256_setzero_pd(), \
1169 (const __v4df *)__m, (__v4di)__i, \
1170 (__v4df)_mm256_set1_pd((double)(long long int)-1), (s)); })
1171
1172#define _mm_i32gather_ps(m, i, s) __extension__ ({ \
1173 float const *__m = (m); \
1174 __m128i __i = (i); \
1175 (__m128)__builtin_ia32_gatherd_ps((__v4sf)_mm_setzero_ps(), \
1176 (const __v4sf *)__m, (__v4si)__i, \
1177 (__v4sf)_mm_set1_ps((float)(int)-1), (s)); })
1178
1179#define _mm256_i32gather_ps(m, i, s) __extension__ ({ \
1180 float const *__m = (m); \
1181 __m256i __i = (i); \
1182 (__m256)__builtin_ia32_gatherd_ps256((__v8sf)_mm256_setzero_ps(), \
1183 (const __v8sf *)__m, (__v8si)__i, \
1184 (__v8sf)_mm256_set1_ps((float)(int)-1), (s)); })
1185
1186#define _mm_i64gather_ps(m, i, s) __extension__ ({ \
1187 float const *__m = (m); \
1188 __m128i __i = (i); \
1189 (__m128)__builtin_ia32_gatherq_ps((__v4sf)_mm_setzero_ps(), \
1190 (const __v4sf *)__m, (__v2di)__i, \
1191 (__v4sf)_mm_set1_ps((float)(int)-1), (s)); })
1192
1193#define _mm256_i64gather_ps(m, i, s) __extension__ ({ \
1194 float const *__m = (m); \
1195 __m256i __i = (i); \
1196 (__m128)__builtin_ia32_gatherq_ps256((__v4sf)_mm_setzero_ps(), \
1197 (const __v4sf *)__m, (__v4di)__i, \
1198 (__v4sf)_mm_set1_ps((float)(int)-1), (s)); })
1199
1200#define _mm_i32gather_epi32(m, i, s) __extension__ ({ \
1201 int const *__m = (m); \
1202 __m128i __i = (i); \
1203 (__m128i)__builtin_ia32_gatherd_d((__v4si)_mm_setzero_si128(), \
1204 (const __v4si *)__m, (__v4si)__i, \
1205 (__v4si)_mm_set1_epi32(-1), (s)); })
1206
1207#define _mm256_i32gather_epi32(m, i, s) __extension__ ({ \
1208 int const *__m = (m); \
1209 __m256i __i = (i); \
1210 (__m256i)__builtin_ia32_gatherd_d256((__v8si)_mm256_setzero_si256(), \
1211 (const __v8si *)__m, (__v8si)__i, \
1212 (__v8si)_mm256_set1_epi32(-1), (s)); })
1213
1214#define _mm_i64gather_epi32(m, i, s) __extension__ ({ \
1215 int const *__m = (m); \
1216 __m128i __i = (i); \
1217 (__m128i)__builtin_ia32_gatherq_d((__v4si)_mm_setzero_si128(), \
1218 (const __v4si *)__m, (__v2di)__i, \
1219 (__v4si)_mm_set1_epi32(-1), (s)); })
1220
1221#define _mm256_i64gather_epi32(m, i, s) __extension__ ({ \
1222 int const *__m = (m); \
1223 __m256i __i = (i); \
1224 (__m128i)__builtin_ia32_gatherq_d256((__v4si)_mm_setzero_si128(), \
1225 (const __v4si *)__m, (__v4di)__i, \
1226 (__v4si)_mm_set1_epi32(-1), (s)); })
1227
1228#define _mm_i32gather_epi64(m, i, s) __extension__ ({ \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001229 long long const *__m = (m); \
Manman Renf865ba02012-06-29 05:19:13 +00001230 __m128i __i = (i); \
1231 (__m128i)__builtin_ia32_gatherd_q((__v2di)_mm_setzero_si128(), \
1232 (const __v2di *)__m, (__v4si)__i, \
1233 (__v2di)_mm_set1_epi64x(-1), (s)); })
1234
1235#define _mm256_i32gather_epi64(m, i, s) __extension__ ({ \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001236 long long const *__m = (m); \
Manman Renf865ba02012-06-29 05:19:13 +00001237 __m128i __i = (i); \
1238 (__m256i)__builtin_ia32_gatherd_q256((__v4di)_mm256_setzero_si256(), \
1239 (const __v4di *)__m, (__v4si)__i, \
1240 (__v4di)_mm256_set1_epi64x(-1), (s)); })
1241
1242#define _mm_i64gather_epi64(m, i, s) __extension__ ({ \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001243 long long const *__m = (m); \
Manman Renf865ba02012-06-29 05:19:13 +00001244 __m128i __i = (i); \
1245 (__m128i)__builtin_ia32_gatherq_q((__v2di)_mm_setzero_si128(), \
1246 (const __v2di *)__m, (__v2di)__i, \
1247 (__v2di)_mm_set1_epi64x(-1), (s)); })
1248
1249#define _mm256_i64gather_epi64(m, i, s) __extension__ ({ \
Eli Friedman3cd55f42013-09-23 23:52:04 +00001250 long long const *__m = (m); \
Manman Renf865ba02012-06-29 05:19:13 +00001251 __m256i __i = (i); \
1252 (__m256i)__builtin_ia32_gatherq_q256((__v4di)_mm256_setzero_si256(), \
1253 (const __v4di *)__m, (__v4di)__i, \
1254 (__v4di)_mm256_set1_epi64x(-1), (s)); })
Richard Smith49e56442013-07-14 05:41:45 +00001255
Michael Kupersteine45af542015-06-30 13:36:19 +00001256#undef __DEFAULT_FN_ATTRS
Eric Christopher4d1851682015-06-17 07:09:20 +00001257
Richard Smith49e56442013-07-14 05:41:45 +00001258#endif /* __AVX2INTRIN_H */