avx2intrin.h revision 231f793326e3a3ad6e07949adb776f45c07f0f7b
1925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper/*===---- avx2intrin.h - AVX2 intrinsics -----------------------------------===
2925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper *
3925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * Permission is hereby granted, free of charge, to any person obtaining a copy
4925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * of this software and associated documentation files (the "Software"), to deal
5925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * in the Software without restriction, including without limitation the rights
6925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * copies of the Software, and to permit persons to whom the Software is
8925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * furnished to do so, subject to the following conditions:
9925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper *
10925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * The above copyright notice and this permission notice shall be included in
11925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * all copies or substantial portions of the Software.
12925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper *
13925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper * THE SOFTWARE.
20925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper *
21925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper *===-----------------------------------------------------------------------===
22925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper */
23925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
24925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper#ifndef __IMMINTRIN_H
25925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper#error "Never use <avx2intrin.h> directly; include <immintrin.h> instead."
26925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper#endif
27925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
28925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper/* SSE4 Multiple Packed Sums of Absolute Difference.  */
29925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper#define _mm256_mpsadbw_epu8(X, Y, M) __builtin_ia32_mpsadbw256((X), (Y), (M))
30925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
31925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
32925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_abs_epi8(__m256i a)
33925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
34925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper    return (__m256i)__builtin_ia32_pabsb256((__v32qi)a);
35925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
36925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
37925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
38925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_abs_epi16(__m256i a)
39925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
40925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper    return (__m256i)__builtin_ia32_pabsw256((__v16hi)a);
41925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
42925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
43925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
44925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_abs_epi32(__m256i a)
45925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
46925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper    return (__m256i)__builtin_ia32_pabsd256((__v8si)a);
47925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
48925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
49925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
50925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_packs_epi16(__m256i a, __m256i b)
51925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
52925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)__builtin_ia32_packsswb256((__v16hi)a, (__v16hi)b);
53925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
54925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
55925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
56925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_packs_epi32(__m256i a, __m256i b)
57925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
58925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)__builtin_ia32_packssdw256((__v8si)a, (__v8si)b);
59925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
60925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
61925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
62925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_packus_epi16(__m256i a, __m256i b)
63925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
64925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)__builtin_ia32_packuswb256((__v16hi)a, (__v16hi)b);
65925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
66925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
67925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
68925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_packus_epi32(__m256i __V1, __m256i __V2)
69925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
70925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i) __builtin_ia32_packusdw256((__v8si)__V1, (__v8si)__V2);
71925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
72925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
73925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
74925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_add_epi8(__m256i a, __m256i b)
75925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
76925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)((__v32qi)a + (__v32qi)b);
77925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
78925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
79925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
80925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_add_epi16(__m256i a, __m256i b)
81925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
82925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)((__v16hi)a + (__v16hi)b);
83925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
84925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
85925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
86925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_add_epi32(__m256i a, __m256i b)
87925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
88925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)((__v8si)a + (__v8si)b);
89925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
90925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
91925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
92925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_add_epi64(__m256i a, __m256i b)
93925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
94925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return a + b;
95925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
96925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
97925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
989c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_adds_epi8(__m256i a, __m256i b)
999c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
1009c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_paddsb256((__v32qi)a, (__v32qi)b);
1019c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1029c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1039c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1049c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_adds_epi16(__m256i a, __m256i b)
1059c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
1069c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_paddsw256((__v16hi)a, (__v16hi)b);
1079c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1089c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1099c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1109c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_adds_epu8(__m256i a, __m256i b)
1119c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
1129c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_paddusb256((__v32qi)a, (__v32qi)b);
1139c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1149c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1159c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1169c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_adds_epu16(__m256i a, __m256i b)
1179c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
1189c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_paddusw256((__v16hi)a, (__v16hi)b);
1199c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
1209c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1219c2ffd803af03f1728423d0d73ff87d988642633Craig Topper#define _mm256_alignr_epi8(a, b, n) __extension__ ({ \
1229c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  __m256i __a = (a); \
1239c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  __m256i __b = (b); \
1249c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  (__m256i)__builtin_ia32_palignr256((__v32qi)__a, (__v32qi)__b, (n)); })
1259c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
1269c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
127735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper_mm256_and_si256(__m256i a, __m256i b)
128735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper{
129735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return a & b;
130735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
131735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
132735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
133735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper_mm256_andnot_si256(__m256i a, __m256i b)
134735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper{
135735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return ~a & b;
136735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
137735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
138735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1394c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_avg_epu8(__m256i a, __m256i b)
1404c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1414c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)__builtin_ia32_pavgb256((__v32qi)a, (__v32qi)b);
1424c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1434c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1444c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1454c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_avg_epu16(__m256i a, __m256i b)
1464c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1474c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)__builtin_ia32_pavgw256((__v16hi)a, (__v16hi)b);
1484c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1494c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1504c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1514c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_blendv_epi8(__m256i __V1, __m256i __V2, __m256i __M)
1524c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1534c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)__builtin_ia32_pblendvb256((__v32qi)__V1, (__v32qi)__V2,
1544c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper                                              (__v32qi)__M);
1554c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1564c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1574c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper#define _mm256_blend_epi16(V1, V2, M) __extension__ ({ \
1584c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  __m256i __V1 = (V1); \
1594c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  __m256i __V2 = (V2); \
1604c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  (__m256i)__builtin_ia32_pblendw256((__v16hi)__V1, (__v16hi)__V2, M); })
1614c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1624c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1634c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpeq_epi8(__m256i a, __m256i b)
1644c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1654c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v32qi)a == (__v32qi)b);
1664c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1674c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1684c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1694c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpeq_epi16(__m256i a, __m256i b)
1704c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1714c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v16hi)a == (__v16hi)b);
1724c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1734c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1744c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1754c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpeq_epi32(__m256i a, __m256i b)
1764c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1774c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v8si)a == (__v8si)b);
1784c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1794c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1804c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1814c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpeq_epi64(__m256i a, __m256i b)
1824c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1834c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v4di)a == (__v4di)b);
1844c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1854c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1864c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1874c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpgt_epi8(__m256i a, __m256i b)
1884c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1894c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v32qi)a > (__v32qi)b);
1904c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1914c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1924c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1934c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpgt_epi16(__m256i a, __m256i b)
1944c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
1954c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v16hi)a > (__v16hi)b);
1964c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
1974c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
1984c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
1994c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpgt_epi32(__m256i a, __m256i b)
2004c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
2014c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v8si)a > (__v8si)b);
2024c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2034c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
2044c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
2054c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper_mm256_cmpgt_epi64(__m256i a, __m256i b)
2064c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper{
2074c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper  return (__m256i)((__v4di)a > (__v4di)b);
2084c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper}
2094c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topper
2104c07c5dfebd270b2f0660e86f056eeafdb26a4fbCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
211318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper_mm256_hadd_epi16(__m256i a, __m256i b)
212318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper{
213318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper    return (__m256i)__builtin_ia32_phaddw256((__v16hi)a, (__v16hi)b);
214318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
215318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
216318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
217318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper_mm256_hadd_epi32(__m256i a, __m256i b)
218318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper{
219318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper    return (__m256i)__builtin_ia32_phaddd256((__v8si)a, (__v8si)b);
220318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
221318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
222318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
223318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper_mm256_hadds_epi16(__m256i a, __m256i b)
224318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper{
225318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper    return (__m256i)__builtin_ia32_phaddsw256((__v16hi)a, (__v16hi)b);
226318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
227318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
228318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
229318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper_mm256_hsub_epi16(__m256i a, __m256i b)
230318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper{
231318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper    return (__m256i)__builtin_ia32_phsubw256((__v16hi)a, (__v16hi)b);
232318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
233318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
234318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
235318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper_mm256_hsub_epi32(__m256i a, __m256i b)
236318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper{
237318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper    return (__m256i)__builtin_ia32_phsubd256((__v8si)a, (__v8si)b);
238318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
239318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
240318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
241318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper_mm256_hsubs_epi16(__m256i a, __m256i b)
242318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper{
243318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper    return (__m256i)__builtin_ia32_phsubsw256((__v16hi)a, (__v16hi)b);
244318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper}
245318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topper
246318e460ada6e589bd864d9ecb86053cc6852cabfCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
2474a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper_mm256_maddubs_epi16(__m256i a, __m256i b)
2484a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper{
2494a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper    return (__m256i)__builtin_ia32_pmaddubsw256((__v32qi)a, (__v32qi)b);
2504a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper}
2514a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper
2524a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
2534a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper_mm256_madd_epi16(__m256i a, __m256i b)
2544a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper{
2554a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper  return (__m256i)__builtin_ia32_pmaddwd256((__v16hi)a, (__v16hi)b);
2564a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper}
2574a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topper
2584a4f25a5a80dd594acf68c882bcdbf1a38468a45Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
259231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_max_epi8(__m256i a, __m256i b)
260231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
261231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmaxsb256((__v32qi)a, (__v32qi)b);
262231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
263231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
264231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
265231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_max_epi16(__m256i a, __m256i b)
266231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
267231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmaxsw256((__v16hi)a, (__v16hi)b);
268231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
269231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
270231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
271231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_max_epi32(__m256i a, __m256i b)
272231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
273231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmaxsd256((__v8si)a, (__v8si)b);
274231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
275231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
276231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
277231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_max_epu8(__m256i a, __m256i b)
278231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
279231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmaxub256((__v32qi)a, (__v32qi)b);
280231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
281231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
282231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
283231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_max_epu16(__m256i a, __m256i b)
284231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
285231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmaxuw256((__v16hi)a, (__v16hi)b);
286231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
287231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
288231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
289231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_max_epu32(__m256i a, __m256i b)
290231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
291231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmaxud256((__v8si)a, (__v8si)b);
292231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
293231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
294231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
295231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_min_epi8(__m256i a, __m256i b)
296231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
297231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pminsb256((__v32qi)a, (__v32qi)b);
298231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
299231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
300231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
301231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_min_epi16(__m256i a, __m256i b)
302231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
303231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pminsw256((__v16hi)a, (__v16hi)b);
304231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
305231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
306231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
307231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_min_epi32(__m256i a, __m256i b)
308231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
309231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pminsd256((__v8si)a, (__v8si)b);
310231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
311231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
312231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
313231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_min_epu8(__m256i a, __m256i b)
314231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
315231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pminub256((__v32qi)a, (__v32qi)b);
316231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
317231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
318231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
319231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_min_epu16(__m256i a, __m256i b)
320231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
321231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pminuw256 ((__v16hi)a, (__v16hi)b);
322231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
323231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
324231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
325231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_min_epu32(__m256i a, __m256i b)
326231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
327231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pminud256((__v8si)a, (__v8si)b);
328231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
329231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
330231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ int __attribute__((__always_inline__, __nodebug__))
331231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_movemask_epi8(__m256i a)
332231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
333231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return __builtin_ia32_pmovmskb256((__v32qi)a);
334231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
335231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
336231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
337231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepi8_epi16(__m128i __V)
338231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
339231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovsxbw256((__v16qi)__V);
340231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
341231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
342231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
343231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepi8_epi32(__m128i __V)
344231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
345231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovsxbd256((__v16qi)__V);
346231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
347231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
348231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
349231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepi8_epi64(__m128i __V)
350231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
351231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovsxbq256((__v16qi)__V);
352231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
353231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
354231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
355231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepi16_epi32(__m128i __V)
356231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
357231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovsxwd256((__v8hi)__V);
358231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
359231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
360231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
361231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepi16_epi64(__m128i __V)
362231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
363231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovsxwq256((__v8hi)__V);
364231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
365231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
366231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
367231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepi32_epi64(__m128i __V)
368231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
369231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovsxdq256((__v4si)__V);
370231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
371231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
372231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
373231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepu8_epi16(__m128i __V)
374231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
375231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovzxbw256((__v16qi)__V);
376231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
377231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
378231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
379231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepu8_epi32(__m128i __V)
380231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
381231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovzxbd256((__v16qi)__V);
382231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
383231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
384231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
385231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepu8_epi64(__m128i __V)
386231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
387231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovzxbq256((__v16qi)__V);
388231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
389231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
390231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
391231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepu16_epi32(__m128i __V)
392231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
393231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovzxwd256((__v8hi)__V);
394231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
395231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
396231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
397231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepu16_epi64(__m128i __V)
398231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
399231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovzxwq256((__v8hi)__V);
400231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
401231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
402231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
403231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper_mm256_cvtepu32_epi64(__m128i __V)
404231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper{
405231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper  return (__m256i)__builtin_ia32_pmovzxdq256((__v4si)__V);
406231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper}
407231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topper
408231f793326e3a3ad6e07949adb776f45c07f0f7bCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
409735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper_mm256_or_si256(__m256i a, __m256i b)
410735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper{
411735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return a | b;
412735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
413735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper
414735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
415925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_sub_epi8(__m256i a, __m256i b)
416925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
417925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)((__v32qi)a - (__v32qi)b);
418925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
419925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
420925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
421925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_sub_epi16(__m256i a, __m256i b)
422925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
423925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)((__v16hi)a - (__v16hi)b);
424925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
425925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
426925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
427925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_sub_epi32(__m256i a, __m256i b)
428925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
429925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return (__m256i)((__v8si)a - (__v8si)b);
430925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
431925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper
432925be547b163675b312e3cac0cc7f37f31d787c1Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
433925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper_mm256_sub_epi64(__m256i a, __m256i b)
434925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper{
435925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper  return a - b;
436925be547b163675b312e3cac0cc7f37f31d787c1Craig Topper}
4379c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
4389c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
4399c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_subs_epi8(__m256i a, __m256i b)
4409c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
4419c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_psubsb256((__v32qi)a, (__v32qi)b);
4429c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
4439c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
4449c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
4459c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_subs_epi16(__m256i a, __m256i b)
4469c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
4479c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_psubsw256((__v16hi)a, (__v16hi)b);
4489c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
4499c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
4509c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
4519c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_subs_epu8(__m256i a, __m256i b)
4529c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
4539c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_psubusb256((__v32qi)a, (__v32qi)b);
4549c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
4559c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
4569c2ffd803af03f1728423d0d73ff87d988642633Craig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
4579c2ffd803af03f1728423d0d73ff87d988642633Craig Topper_mm256_subs_epu16(__m256i a, __m256i b)
4589c2ffd803af03f1728423d0d73ff87d988642633Craig Topper{
4599c2ffd803af03f1728423d0d73ff87d988642633Craig Topper  return (__m256i)__builtin_ia32_psubusw256((__v16hi)a, (__v16hi)b);
4609c2ffd803af03f1728423d0d73ff87d988642633Craig Topper}
4619c2ffd803af03f1728423d0d73ff87d988642633Craig Topper
462735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topperstatic __inline__ __m256i __attribute__((__always_inline__, __nodebug__))
463735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper_mm256_xor_si256(__m256i a, __m256i b)
464735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper{
465735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper  return a ^ b;
466735ceaa4ccb60df5993245e645f7127bf4a4325fCraig Topper}
467