blob: e22ffaf19240ae0e6d797ce9b80fa82db5cbb90b [file] [log] [blame]
Benjamin Kramerae8ea1f2010-08-20 16:47:17 +00001/*===---- emmintrin.h - SSE2 intrinsics ------------------------------------===
Anders Carlssonf15e71d2008-12-24 01:45:22 +00002 *
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 */
Benjamin Kramerae8ea1f2010-08-20 16:47:17 +000023
Anders Carlssonf15e71d2008-12-24 01:45:22 +000024#ifndef __EMMINTRIN_H
25#define __EMMINTRIN_H
26
Anders Carlssonf15e71d2008-12-24 01:45:22 +000027#include <xmmintrin.h>
28
29typedef double __m128d __attribute__((__vector_size__(16)));
30typedef long long __m128i __attribute__((__vector_size__(16)));
31
Eric Christopher2a9898f2010-08-26 02:09:25 +000032/* Type defines. */
33typedef double __v2df __attribute__ ((__vector_size__ (16)));
34typedef long long __v2di __attribute__ ((__vector_size__ (16)));
Anders Carlssona283f912008-12-24 02:41:00 +000035typedef short __v8hi __attribute__((__vector_size__(16)));
Anders Carlsson327c8df2009-09-18 19:18:19 +000036typedef char __v16qi __attribute__((__vector_size__(16)));
Anders Carlssonf15e71d2008-12-24 01:45:22 +000037
Eric Christopher4d1851682015-06-17 07:09:20 +000038/* Define the default attributes for the functions in this file. */
Michael Kupersteine45af542015-06-30 13:36:19 +000039#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse2")))
Eric Christopher4d1851682015-06-17 07:09:20 +000040
Michael Kupersteine45af542015-06-30 13:36:19 +000041static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000042_mm_add_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000043{
David Blaikie3302f2b2013-01-16 23:08:36 +000044 __a[0] += __b[0];
45 return __a;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000046}
47
Michael Kupersteine45af542015-06-30 13:36:19 +000048static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000049_mm_add_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000050{
David Blaikie3302f2b2013-01-16 23:08:36 +000051 return __a + __b;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000052}
53
Michael Kupersteine45af542015-06-30 13:36:19 +000054static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000055_mm_sub_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000056{
David Blaikie3302f2b2013-01-16 23:08:36 +000057 __a[0] -= __b[0];
58 return __a;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000059}
60
Michael Kupersteine45af542015-06-30 13:36:19 +000061static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000062_mm_sub_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000063{
David Blaikie3302f2b2013-01-16 23:08:36 +000064 return __a - __b;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000065}
66
Michael Kupersteine45af542015-06-30 13:36:19 +000067static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000068_mm_mul_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000069{
David Blaikie3302f2b2013-01-16 23:08:36 +000070 __a[0] *= __b[0];
71 return __a;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000072}
73
Michael Kupersteine45af542015-06-30 13:36:19 +000074static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000075_mm_mul_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000076{
David Blaikie3302f2b2013-01-16 23:08:36 +000077 return __a * __b;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000078}
79
Michael Kupersteine45af542015-06-30 13:36:19 +000080static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000081_mm_div_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000082{
David Blaikie3302f2b2013-01-16 23:08:36 +000083 __a[0] /= __b[0];
84 return __a;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000085}
86
Michael Kupersteine45af542015-06-30 13:36:19 +000087static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000088_mm_div_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000089{
David Blaikie3302f2b2013-01-16 23:08:36 +000090 return __a / __b;
Anders Carlssonf15e71d2008-12-24 01:45:22 +000091}
92
Michael Kupersteine45af542015-06-30 13:36:19 +000093static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +000094_mm_sqrt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +000095{
David Blaikie3302f2b2013-01-16 23:08:36 +000096 __m128d __c = __builtin_ia32_sqrtsd(__b);
97 return (__m128d) { __c[0], __a[1] };
Anders Carlssonf15e71d2008-12-24 01:45:22 +000098}
99
Michael Kupersteine45af542015-06-30 13:36:19 +0000100static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000101_mm_sqrt_pd(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000102{
David Blaikie3302f2b2013-01-16 23:08:36 +0000103 return __builtin_ia32_sqrtpd(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000104}
105
Michael Kupersteine45af542015-06-30 13:36:19 +0000106static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000107_mm_min_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000108{
David Blaikie3302f2b2013-01-16 23:08:36 +0000109 return __builtin_ia32_minsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000110}
111
Michael Kupersteine45af542015-06-30 13:36:19 +0000112static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000113_mm_min_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000114{
David Blaikie3302f2b2013-01-16 23:08:36 +0000115 return __builtin_ia32_minpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000116}
117
Michael Kupersteine45af542015-06-30 13:36:19 +0000118static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000119_mm_max_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000120{
David Blaikie3302f2b2013-01-16 23:08:36 +0000121 return __builtin_ia32_maxsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000122}
123
Michael Kupersteine45af542015-06-30 13:36:19 +0000124static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000125_mm_max_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000126{
David Blaikie3302f2b2013-01-16 23:08:36 +0000127 return __builtin_ia32_maxpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000128}
129
Michael Kupersteine45af542015-06-30 13:36:19 +0000130static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000131_mm_and_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000132{
David Blaikie3302f2b2013-01-16 23:08:36 +0000133 return (__m128d)((__v4si)__a & (__v4si)__b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000134}
135
Michael Kupersteine45af542015-06-30 13:36:19 +0000136static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000137_mm_andnot_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000138{
David Blaikie3302f2b2013-01-16 23:08:36 +0000139 return (__m128d)(~(__v4si)__a & (__v4si)__b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000140}
141
Michael Kupersteine45af542015-06-30 13:36:19 +0000142static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000143_mm_or_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000144{
David Blaikie3302f2b2013-01-16 23:08:36 +0000145 return (__m128d)((__v4si)__a | (__v4si)__b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000146}
147
Michael Kupersteine45af542015-06-30 13:36:19 +0000148static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000149_mm_xor_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000150{
David Blaikie3302f2b2013-01-16 23:08:36 +0000151 return (__m128d)((__v4si)__a ^ (__v4si)__b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000152}
153
Michael Kupersteine45af542015-06-30 13:36:19 +0000154static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000155_mm_cmpeq_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000156{
Craig Topper2094d8f2014-12-27 06:59:57 +0000157 return (__m128d)__builtin_ia32_cmpeqpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000158}
159
Michael Kupersteine45af542015-06-30 13:36:19 +0000160static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000161_mm_cmplt_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000162{
Craig Topper2094d8f2014-12-27 06:59:57 +0000163 return (__m128d)__builtin_ia32_cmpltpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000164}
165
Michael Kupersteine45af542015-06-30 13:36:19 +0000166static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000167_mm_cmple_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000168{
Craig Topper2094d8f2014-12-27 06:59:57 +0000169 return (__m128d)__builtin_ia32_cmplepd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000170}
171
Michael Kupersteine45af542015-06-30 13:36:19 +0000172static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000173_mm_cmpgt_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000174{
Craig Topper2094d8f2014-12-27 06:59:57 +0000175 return (__m128d)__builtin_ia32_cmpltpd(__b, __a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000176}
177
Michael Kupersteine45af542015-06-30 13:36:19 +0000178static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000179_mm_cmpge_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000180{
Craig Topper2094d8f2014-12-27 06:59:57 +0000181 return (__m128d)__builtin_ia32_cmplepd(__b, __a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000182}
183
Michael Kupersteine45af542015-06-30 13:36:19 +0000184static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000185_mm_cmpord_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000186{
Craig Topper2094d8f2014-12-27 06:59:57 +0000187 return (__m128d)__builtin_ia32_cmpordpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000188}
189
Michael Kupersteine45af542015-06-30 13:36:19 +0000190static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000191_mm_cmpunord_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000192{
Craig Topper2094d8f2014-12-27 06:59:57 +0000193 return (__m128d)__builtin_ia32_cmpunordpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000194}
195
Michael Kupersteine45af542015-06-30 13:36:19 +0000196static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000197_mm_cmpneq_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000198{
Craig Topper2094d8f2014-12-27 06:59:57 +0000199 return (__m128d)__builtin_ia32_cmpneqpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000200}
201
Michael Kupersteine45af542015-06-30 13:36:19 +0000202static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000203_mm_cmpnlt_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000204{
Craig Topper2094d8f2014-12-27 06:59:57 +0000205 return (__m128d)__builtin_ia32_cmpnltpd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000206}
207
Michael Kupersteine45af542015-06-30 13:36:19 +0000208static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000209_mm_cmpnle_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000210{
Craig Topper2094d8f2014-12-27 06:59:57 +0000211 return (__m128d)__builtin_ia32_cmpnlepd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000212}
213
Michael Kupersteine45af542015-06-30 13:36:19 +0000214static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000215_mm_cmpngt_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000216{
Craig Topper2094d8f2014-12-27 06:59:57 +0000217 return (__m128d)__builtin_ia32_cmpnltpd(__b, __a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000218}
219
Michael Kupersteine45af542015-06-30 13:36:19 +0000220static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000221_mm_cmpnge_pd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000222{
Craig Topper2094d8f2014-12-27 06:59:57 +0000223 return (__m128d)__builtin_ia32_cmpnlepd(__b, __a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000224}
225
Michael Kupersteine45af542015-06-30 13:36:19 +0000226static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000227_mm_cmpeq_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000228{
Craig Topper2094d8f2014-12-27 06:59:57 +0000229 return (__m128d)__builtin_ia32_cmpeqsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000230}
231
Michael Kupersteine45af542015-06-30 13:36:19 +0000232static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000233_mm_cmplt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000234{
Craig Topper2094d8f2014-12-27 06:59:57 +0000235 return (__m128d)__builtin_ia32_cmpltsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000236}
237
Michael Kupersteine45af542015-06-30 13:36:19 +0000238static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000239_mm_cmple_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000240{
Craig Topper2094d8f2014-12-27 06:59:57 +0000241 return (__m128d)__builtin_ia32_cmplesd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000242}
243
Michael Kupersteine45af542015-06-30 13:36:19 +0000244static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000245_mm_cmpgt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000246{
Craig Topper2094d8f2014-12-27 06:59:57 +0000247 __m128d __c = __builtin_ia32_cmpltsd(__b, __a);
Manman Ren9bb34d62013-06-17 19:42:49 +0000248 return (__m128d) { __c[0], __a[1] };
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000249}
250
Michael Kupersteine45af542015-06-30 13:36:19 +0000251static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000252_mm_cmpge_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000253{
Craig Topper2094d8f2014-12-27 06:59:57 +0000254 __m128d __c = __builtin_ia32_cmplesd(__b, __a);
Manman Ren9bb34d62013-06-17 19:42:49 +0000255 return (__m128d) { __c[0], __a[1] };
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000256}
257
Michael Kupersteine45af542015-06-30 13:36:19 +0000258static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000259_mm_cmpord_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000260{
Craig Topper2094d8f2014-12-27 06:59:57 +0000261 return (__m128d)__builtin_ia32_cmpordsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000262}
263
Michael Kupersteine45af542015-06-30 13:36:19 +0000264static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000265_mm_cmpunord_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000266{
Craig Topper2094d8f2014-12-27 06:59:57 +0000267 return (__m128d)__builtin_ia32_cmpunordsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000268}
269
Michael Kupersteine45af542015-06-30 13:36:19 +0000270static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000271_mm_cmpneq_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000272{
Craig Topper2094d8f2014-12-27 06:59:57 +0000273 return (__m128d)__builtin_ia32_cmpneqsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000274}
275
Michael Kupersteine45af542015-06-30 13:36:19 +0000276static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000277_mm_cmpnlt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000278{
Craig Topper2094d8f2014-12-27 06:59:57 +0000279 return (__m128d)__builtin_ia32_cmpnltsd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000280}
281
Michael Kupersteine45af542015-06-30 13:36:19 +0000282static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000283_mm_cmpnle_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000284{
Craig Topper2094d8f2014-12-27 06:59:57 +0000285 return (__m128d)__builtin_ia32_cmpnlesd(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000286}
287
Michael Kupersteine45af542015-06-30 13:36:19 +0000288static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000289_mm_cmpngt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000290{
Craig Topper2094d8f2014-12-27 06:59:57 +0000291 __m128d __c = __builtin_ia32_cmpnltsd(__b, __a);
Manman Ren9bb34d62013-06-17 19:42:49 +0000292 return (__m128d) { __c[0], __a[1] };
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000293}
294
Michael Kupersteine45af542015-06-30 13:36:19 +0000295static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000296_mm_cmpnge_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000297{
Craig Topper2094d8f2014-12-27 06:59:57 +0000298 __m128d __c = __builtin_ia32_cmpnlesd(__b, __a);
Manman Ren9bb34d62013-06-17 19:42:49 +0000299 return (__m128d) { __c[0], __a[1] };
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000300}
301
Michael Kupersteine45af542015-06-30 13:36:19 +0000302static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000303_mm_comieq_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000304{
David Blaikie3302f2b2013-01-16 23:08:36 +0000305 return __builtin_ia32_comisdeq(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000306}
307
Michael Kupersteine45af542015-06-30 13:36:19 +0000308static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000309_mm_comilt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000310{
David Blaikie3302f2b2013-01-16 23:08:36 +0000311 return __builtin_ia32_comisdlt(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000312}
313
Michael Kupersteine45af542015-06-30 13:36:19 +0000314static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000315_mm_comile_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000316{
David Blaikie3302f2b2013-01-16 23:08:36 +0000317 return __builtin_ia32_comisdle(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000318}
319
Michael Kupersteine45af542015-06-30 13:36:19 +0000320static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000321_mm_comigt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000322{
David Blaikie3302f2b2013-01-16 23:08:36 +0000323 return __builtin_ia32_comisdgt(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000324}
325
Michael Kupersteine45af542015-06-30 13:36:19 +0000326static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000327_mm_comige_sd(__m128d __a, __m128d __b)
Eli Friedman89c11332011-10-06 20:31:50 +0000328{
David Blaikie3302f2b2013-01-16 23:08:36 +0000329 return __builtin_ia32_comisdge(__a, __b);
Eli Friedman89c11332011-10-06 20:31:50 +0000330}
331
Michael Kupersteine45af542015-06-30 13:36:19 +0000332static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000333_mm_comineq_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000334{
David Blaikie3302f2b2013-01-16 23:08:36 +0000335 return __builtin_ia32_comisdneq(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000336}
337
Michael Kupersteine45af542015-06-30 13:36:19 +0000338static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000339_mm_ucomieq_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000340{
David Blaikie3302f2b2013-01-16 23:08:36 +0000341 return __builtin_ia32_ucomisdeq(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000342}
343
Michael Kupersteine45af542015-06-30 13:36:19 +0000344static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000345_mm_ucomilt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000346{
David Blaikie3302f2b2013-01-16 23:08:36 +0000347 return __builtin_ia32_ucomisdlt(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000348}
349
Michael Kupersteine45af542015-06-30 13:36:19 +0000350static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000351_mm_ucomile_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000352{
David Blaikie3302f2b2013-01-16 23:08:36 +0000353 return __builtin_ia32_ucomisdle(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000354}
355
Michael Kupersteine45af542015-06-30 13:36:19 +0000356static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000357_mm_ucomigt_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000358{
David Blaikie3302f2b2013-01-16 23:08:36 +0000359 return __builtin_ia32_ucomisdgt(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000360}
361
Michael Kupersteine45af542015-06-30 13:36:19 +0000362static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000363_mm_ucomige_sd(__m128d __a, __m128d __b)
Eli Friedmanf8cb4802011-08-29 21:26:24 +0000364{
David Blaikie3302f2b2013-01-16 23:08:36 +0000365 return __builtin_ia32_ucomisdge(__a, __b);
Eli Friedmanf8cb4802011-08-29 21:26:24 +0000366}
367
Michael Kupersteine45af542015-06-30 13:36:19 +0000368static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000369_mm_ucomineq_sd(__m128d __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000370{
David Blaikie3302f2b2013-01-16 23:08:36 +0000371 return __builtin_ia32_ucomisdneq(__a, __b);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000372}
373
Michael Kupersteine45af542015-06-30 13:36:19 +0000374static __inline__ __m128 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000375_mm_cvtpd_ps(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000376{
David Blaikie3302f2b2013-01-16 23:08:36 +0000377 return __builtin_ia32_cvtpd2ps(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000378}
379
Michael Kupersteine45af542015-06-30 13:36:19 +0000380static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000381_mm_cvtps_pd(__m128 __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000382{
David Blaikie3302f2b2013-01-16 23:08:36 +0000383 return __builtin_ia32_cvtps2pd(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000384}
385
Michael Kupersteine45af542015-06-30 13:36:19 +0000386static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000387_mm_cvtepi32_pd(__m128i __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000388{
David Blaikie3302f2b2013-01-16 23:08:36 +0000389 return __builtin_ia32_cvtdq2pd((__v4si)__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000390}
391
Michael Kupersteine45af542015-06-30 13:36:19 +0000392static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000393_mm_cvtpd_epi32(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000394{
David Blaikie3302f2b2013-01-16 23:08:36 +0000395 return __builtin_ia32_cvtpd2dq(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000396}
397
Michael Kupersteine45af542015-06-30 13:36:19 +0000398static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000399_mm_cvtsd_si32(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000400{
David Blaikie3302f2b2013-01-16 23:08:36 +0000401 return __builtin_ia32_cvtsd2si(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000402}
403
Michael Kupersteine45af542015-06-30 13:36:19 +0000404static __inline__ __m128 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000405_mm_cvtsd_ss(__m128 __a, __m128d __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000406{
David Blaikie3302f2b2013-01-16 23:08:36 +0000407 __a[0] = __b[0];
408 return __a;
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000409}
410
Michael Kupersteine45af542015-06-30 13:36:19 +0000411static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000412_mm_cvtsi32_sd(__m128d __a, int __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000413{
David Blaikie3302f2b2013-01-16 23:08:36 +0000414 __a[0] = __b;
415 return __a;
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000416}
417
Michael Kupersteine45af542015-06-30 13:36:19 +0000418static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000419_mm_cvtss_sd(__m128d __a, __m128 __b)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000420{
David Blaikie3302f2b2013-01-16 23:08:36 +0000421 __a[0] = __b[0];
422 return __a;
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000423}
424
Michael Kupersteine45af542015-06-30 13:36:19 +0000425static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000426_mm_cvttpd_epi32(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000427{
David Blaikie3302f2b2013-01-16 23:08:36 +0000428 return (__m128i)__builtin_ia32_cvttpd2dq(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000429}
430
Michael Kupersteine45af542015-06-30 13:36:19 +0000431static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000432_mm_cvttsd_si32(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000433{
David Blaikie3302f2b2013-01-16 23:08:36 +0000434 return __a[0];
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000435}
436
Michael Kupersteine45af542015-06-30 13:36:19 +0000437static __inline__ __m64 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000438_mm_cvtpd_pi32(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000439{
David Blaikie3302f2b2013-01-16 23:08:36 +0000440 return (__m64)__builtin_ia32_cvtpd2pi(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000441}
442
Michael Kupersteine45af542015-06-30 13:36:19 +0000443static __inline__ __m64 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000444_mm_cvttpd_pi32(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000445{
David Blaikie3302f2b2013-01-16 23:08:36 +0000446 return (__m64)__builtin_ia32_cvttpd2pi(__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000447}
448
Michael Kupersteine45af542015-06-30 13:36:19 +0000449static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000450_mm_cvtpi32_pd(__m64 __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000451{
David Blaikie3302f2b2013-01-16 23:08:36 +0000452 return __builtin_ia32_cvtpi2pd((__v2si)__a);
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000453}
454
Michael Kupersteine45af542015-06-30 13:36:19 +0000455static __inline__ double __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000456_mm_cvtsd_f64(__m128d __a)
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000457{
David Blaikie3302f2b2013-01-16 23:08:36 +0000458 return __a[0];
Anders Carlssonf15e71d2008-12-24 01:45:22 +0000459}
460
Michael Kupersteine45af542015-06-30 13:36:19 +0000461static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000462_mm_load_pd(double const *__dp)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000463{
David Blaikie3302f2b2013-01-16 23:08:36 +0000464 return *(__m128d*)__dp;
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000465}
466
Michael Kupersteine45af542015-06-30 13:36:19 +0000467static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000468_mm_load1_pd(double const *__dp)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000469{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000470 struct __mm_load1_pd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000471 double __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000472 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000473 double __u = ((struct __mm_load1_pd_struct*)__dp)->__u;
474 return (__m128d){ __u, __u };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000475}
476
Eli Friedmanf83c2582009-06-02 05:55:48 +0000477#define _mm_load_pd1(dp) _mm_load1_pd(dp)
478
Michael Kupersteine45af542015-06-30 13:36:19 +0000479static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000480_mm_loadr_pd(double const *__dp)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000481{
David Blaikie3302f2b2013-01-16 23:08:36 +0000482 __m128d __u = *(__m128d*)__dp;
483 return __builtin_shufflevector(__u, __u, 1, 0);
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000484}
485
Michael Kupersteine45af542015-06-30 13:36:19 +0000486static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000487_mm_loadu_pd(double const *__dp)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000488{
Bill Wendling502931f2011-05-13 00:11:39 +0000489 struct __loadu_pd {
David Blaikie3302f2b2013-01-16 23:08:36 +0000490 __m128d __v;
David Majnemer1cf22e62015-02-04 00:26:10 +0000491 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000492 return ((struct __loadu_pd*)__dp)->__v;
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000493}
494
Michael Kupersteine45af542015-06-30 13:36:19 +0000495static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000496_mm_load_sd(double const *__dp)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000497{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000498 struct __mm_load_sd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000499 double __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000500 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000501 double __u = ((struct __mm_load_sd_struct*)__dp)->__u;
502 return (__m128d){ __u, 0 };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000503}
504
Michael Kupersteine45af542015-06-30 13:36:19 +0000505static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000506_mm_loadh_pd(__m128d __a, double const *__dp)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000507{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000508 struct __mm_loadh_pd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000509 double __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000510 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000511 double __u = ((struct __mm_loadh_pd_struct*)__dp)->__u;
512 return (__m128d){ __a[0], __u };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000513}
514
Michael Kupersteine45af542015-06-30 13:36:19 +0000515static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000516_mm_loadl_pd(__m128d __a, double const *__dp)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000517{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000518 struct __mm_loadl_pd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000519 double __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000520 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000521 double __u = ((struct __mm_loadl_pd_struct*)__dp)->__u;
522 return (__m128d){ __u, __a[1] };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000523}
524
Michael Kupersteine45af542015-06-30 13:36:19 +0000525static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000526_mm_set_sd(double __w)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000527{
David Blaikie3302f2b2013-01-16 23:08:36 +0000528 return (__m128d){ __w, 0 };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000529}
530
Michael Kupersteine45af542015-06-30 13:36:19 +0000531static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000532_mm_set1_pd(double __w)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000533{
David Blaikie3302f2b2013-01-16 23:08:36 +0000534 return (__m128d){ __w, __w };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000535}
536
Michael Kupersteine45af542015-06-30 13:36:19 +0000537static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000538_mm_set_pd(double __w, double __x)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000539{
David Blaikie3302f2b2013-01-16 23:08:36 +0000540 return (__m128d){ __x, __w };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000541}
542
Michael Kupersteine45af542015-06-30 13:36:19 +0000543static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000544_mm_setr_pd(double __w, double __x)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000545{
David Blaikie3302f2b2013-01-16 23:08:36 +0000546 return (__m128d){ __w, __x };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000547}
548
Michael Kupersteine45af542015-06-30 13:36:19 +0000549static __inline__ __m128d __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +0000550_mm_setzero_pd(void)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000551{
552 return (__m128d){ 0, 0 };
553}
554
Michael Kupersteine45af542015-06-30 13:36:19 +0000555static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000556_mm_move_sd(__m128d __a, __m128d __b)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000557{
David Blaikie3302f2b2013-01-16 23:08:36 +0000558 return (__m128d){ __b[0], __a[1] };
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000559}
560
Michael Kupersteine45af542015-06-30 13:36:19 +0000561static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000562_mm_store_sd(double *__dp, __m128d __a)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000563{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000564 struct __mm_store_sd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000565 double __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000566 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000567 ((struct __mm_store_sd_struct*)__dp)->__u = __a[0];
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000568}
569
Michael Kupersteine45af542015-06-30 13:36:19 +0000570static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000571_mm_store1_pd(double *__dp, __m128d __a)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000572{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000573 struct __mm_store1_pd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000574 double __u[2];
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000575 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000576 ((struct __mm_store1_pd_struct*)__dp)->__u[0] = __a[0];
577 ((struct __mm_store1_pd_struct*)__dp)->__u[1] = __a[0];
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000578}
579
Michael Kupersteine45af542015-06-30 13:36:19 +0000580static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000581_mm_store_pd(double *__dp, __m128d __a)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000582{
David Blaikie3302f2b2013-01-16 23:08:36 +0000583 *(__m128d *)__dp = __a;
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000584}
585
Michael Kupersteine45af542015-06-30 13:36:19 +0000586static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000587_mm_storeu_pd(double *__dp, __m128d __a)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000588{
David Blaikie3302f2b2013-01-16 23:08:36 +0000589 __builtin_ia32_storeupd(__dp, __a);
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000590}
591
Michael Kupersteine45af542015-06-30 13:36:19 +0000592static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000593_mm_storer_pd(double *__dp, __m128d __a)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000594{
David Blaikie3302f2b2013-01-16 23:08:36 +0000595 __a = __builtin_shufflevector(__a, __a, 1, 0);
596 *(__m128d *)__dp = __a;
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000597}
598
Michael Kupersteine45af542015-06-30 13:36:19 +0000599static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000600_mm_storeh_pd(double *__dp, __m128d __a)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000601{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000602 struct __mm_storeh_pd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000603 double __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000604 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000605 ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[1];
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000606}
607
Michael Kupersteine45af542015-06-30 13:36:19 +0000608static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000609_mm_storel_pd(double *__dp, __m128d __a)
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000610{
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000611 struct __mm_storeh_pd_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +0000612 double __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +0000613 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +0000614 ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[0];
Anders Carlssonb08ac0b2008-12-24 02:11:54 +0000615}
616
Michael Kupersteine45af542015-06-30 13:36:19 +0000617static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000618_mm_add_epi8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000619{
David Blaikie3302f2b2013-01-16 23:08:36 +0000620 return (__m128i)((__v16qi)__a + (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000621}
622
Michael Kupersteine45af542015-06-30 13:36:19 +0000623static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000624_mm_add_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000625{
David Blaikie3302f2b2013-01-16 23:08:36 +0000626 return (__m128i)((__v8hi)__a + (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000627}
628
Michael Kupersteine45af542015-06-30 13:36:19 +0000629static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000630_mm_add_epi32(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000631{
David Blaikie3302f2b2013-01-16 23:08:36 +0000632 return (__m128i)((__v4si)__a + (__v4si)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000633}
634
Michael Kupersteine45af542015-06-30 13:36:19 +0000635static __inline__ __m64 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000636_mm_add_si64(__m64 __a, __m64 __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000637{
David Blaikie3302f2b2013-01-16 23:08:36 +0000638 return __a + __b;
Anders Carlssona283f912008-12-24 02:41:00 +0000639}
640
Michael Kupersteine45af542015-06-30 13:36:19 +0000641static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000642_mm_add_epi64(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000643{
David Blaikie3302f2b2013-01-16 23:08:36 +0000644 return __a + __b;
Anders Carlssona283f912008-12-24 02:41:00 +0000645}
646
Michael Kupersteine45af542015-06-30 13:36:19 +0000647static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000648_mm_adds_epi8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000649{
David Blaikie3302f2b2013-01-16 23:08:36 +0000650 return (__m128i)__builtin_ia32_paddsb128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000651}
652
Michael Kupersteine45af542015-06-30 13:36:19 +0000653static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000654_mm_adds_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000655{
David Blaikie3302f2b2013-01-16 23:08:36 +0000656 return (__m128i)__builtin_ia32_paddsw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000657}
658
Michael Kupersteine45af542015-06-30 13:36:19 +0000659static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000660_mm_adds_epu8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000661{
David Blaikie3302f2b2013-01-16 23:08:36 +0000662 return (__m128i)__builtin_ia32_paddusb128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000663}
664
Michael Kupersteine45af542015-06-30 13:36:19 +0000665static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000666_mm_adds_epu16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000667{
David Blaikie3302f2b2013-01-16 23:08:36 +0000668 return (__m128i)__builtin_ia32_paddusw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000669}
670
Michael Kupersteine45af542015-06-30 13:36:19 +0000671static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000672_mm_avg_epu8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000673{
David Blaikie3302f2b2013-01-16 23:08:36 +0000674 return (__m128i)__builtin_ia32_pavgb128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000675}
676
Michael Kupersteine45af542015-06-30 13:36:19 +0000677static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000678_mm_avg_epu16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000679{
David Blaikie3302f2b2013-01-16 23:08:36 +0000680 return (__m128i)__builtin_ia32_pavgw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000681}
682
Michael Kupersteine45af542015-06-30 13:36:19 +0000683static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000684_mm_madd_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000685{
David Blaikie3302f2b2013-01-16 23:08:36 +0000686 return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000687}
688
Michael Kupersteine45af542015-06-30 13:36:19 +0000689static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000690_mm_max_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000691{
David Blaikie3302f2b2013-01-16 23:08:36 +0000692 return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000693}
694
Michael Kupersteine45af542015-06-30 13:36:19 +0000695static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000696_mm_max_epu8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000697{
David Blaikie3302f2b2013-01-16 23:08:36 +0000698 return (__m128i)__builtin_ia32_pmaxub128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000699}
700
Michael Kupersteine45af542015-06-30 13:36:19 +0000701static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000702_mm_min_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000703{
David Blaikie3302f2b2013-01-16 23:08:36 +0000704 return (__m128i)__builtin_ia32_pminsw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000705}
706
Michael Kupersteine45af542015-06-30 13:36:19 +0000707static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000708_mm_min_epu8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000709{
David Blaikie3302f2b2013-01-16 23:08:36 +0000710 return (__m128i)__builtin_ia32_pminub128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000711}
712
Michael Kupersteine45af542015-06-30 13:36:19 +0000713static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000714_mm_mulhi_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000715{
David Blaikie3302f2b2013-01-16 23:08:36 +0000716 return (__m128i)__builtin_ia32_pmulhw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000717}
718
Michael Kupersteine45af542015-06-30 13:36:19 +0000719static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000720_mm_mulhi_epu16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000721{
David Blaikie3302f2b2013-01-16 23:08:36 +0000722 return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000723}
724
Michael Kupersteine45af542015-06-30 13:36:19 +0000725static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000726_mm_mullo_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000727{
David Blaikie3302f2b2013-01-16 23:08:36 +0000728 return (__m128i)((__v8hi)__a * (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000729}
730
Michael Kupersteine45af542015-06-30 13:36:19 +0000731static __inline__ __m64 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000732_mm_mul_su32(__m64 __a, __m64 __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000733{
David Blaikie3302f2b2013-01-16 23:08:36 +0000734 return __builtin_ia32_pmuludq((__v2si)__a, (__v2si)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000735}
736
Michael Kupersteine45af542015-06-30 13:36:19 +0000737static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000738_mm_mul_epu32(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000739{
David Blaikie3302f2b2013-01-16 23:08:36 +0000740 return __builtin_ia32_pmuludq128((__v4si)__a, (__v4si)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000741}
742
Michael Kupersteine45af542015-06-30 13:36:19 +0000743static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000744_mm_sad_epu8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000745{
David Blaikie3302f2b2013-01-16 23:08:36 +0000746 return __builtin_ia32_psadbw128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000747}
748
Michael Kupersteine45af542015-06-30 13:36:19 +0000749static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000750_mm_sub_epi8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000751{
David Blaikie3302f2b2013-01-16 23:08:36 +0000752 return (__m128i)((__v16qi)__a - (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000753}
754
Michael Kupersteine45af542015-06-30 13:36:19 +0000755static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000756_mm_sub_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000757{
David Blaikie3302f2b2013-01-16 23:08:36 +0000758 return (__m128i)((__v8hi)__a - (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000759}
760
Michael Kupersteine45af542015-06-30 13:36:19 +0000761static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000762_mm_sub_epi32(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000763{
David Blaikie3302f2b2013-01-16 23:08:36 +0000764 return (__m128i)((__v4si)__a - (__v4si)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000765}
766
Michael Kupersteine45af542015-06-30 13:36:19 +0000767static __inline__ __m64 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000768_mm_sub_si64(__m64 __a, __m64 __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000769{
David Blaikie3302f2b2013-01-16 23:08:36 +0000770 return __a - __b;
Anders Carlssona283f912008-12-24 02:41:00 +0000771}
772
Michael Kupersteine45af542015-06-30 13:36:19 +0000773static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000774_mm_sub_epi64(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000775{
David Blaikie3302f2b2013-01-16 23:08:36 +0000776 return __a - __b;
Anders Carlssona283f912008-12-24 02:41:00 +0000777}
778
Michael Kupersteine45af542015-06-30 13:36:19 +0000779static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000780_mm_subs_epi8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000781{
David Blaikie3302f2b2013-01-16 23:08:36 +0000782 return (__m128i)__builtin_ia32_psubsb128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000783}
784
Michael Kupersteine45af542015-06-30 13:36:19 +0000785static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000786_mm_subs_epi16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000787{
David Blaikie3302f2b2013-01-16 23:08:36 +0000788 return (__m128i)__builtin_ia32_psubsw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000789}
790
Michael Kupersteine45af542015-06-30 13:36:19 +0000791static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000792_mm_subs_epu8(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000793{
David Blaikie3302f2b2013-01-16 23:08:36 +0000794 return (__m128i)__builtin_ia32_psubusb128((__v16qi)__a, (__v16qi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000795}
796
Michael Kupersteine45af542015-06-30 13:36:19 +0000797static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000798_mm_subs_epu16(__m128i __a, __m128i __b)
Anders Carlssona283f912008-12-24 02:41:00 +0000799{
David Blaikie3302f2b2013-01-16 23:08:36 +0000800 return (__m128i)__builtin_ia32_psubusw128((__v8hi)__a, (__v8hi)__b);
Anders Carlssona283f912008-12-24 02:41:00 +0000801}
802
Michael Kupersteine45af542015-06-30 13:36:19 +0000803static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000804_mm_and_si128(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000805{
David Blaikie3302f2b2013-01-16 23:08:36 +0000806 return __a & __b;
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000807}
808
Michael Kupersteine45af542015-06-30 13:36:19 +0000809static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000810_mm_andnot_si128(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000811{
David Blaikie3302f2b2013-01-16 23:08:36 +0000812 return ~__a & __b;
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000813}
814
Michael Kupersteine45af542015-06-30 13:36:19 +0000815static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000816_mm_or_si128(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000817{
David Blaikie3302f2b2013-01-16 23:08:36 +0000818 return __a | __b;
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000819}
820
Michael Kupersteine45af542015-06-30 13:36:19 +0000821static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000822_mm_xor_si128(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000823{
David Blaikie3302f2b2013-01-16 23:08:36 +0000824 return __a ^ __b;
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000825}
826
Craig Topper51e47412015-02-13 06:04:43 +0000827#define _mm_slli_si128(a, imm) __extension__ ({ \
828 (__m128i)__builtin_shufflevector((__v16qi)_mm_setzero_si128(), \
829 (__v16qi)(__m128i)(a), \
830 ((imm)&0xF0) ? 0 : 16 - ((imm)&0xF), \
831 ((imm)&0xF0) ? 0 : 17 - ((imm)&0xF), \
832 ((imm)&0xF0) ? 0 : 18 - ((imm)&0xF), \
833 ((imm)&0xF0) ? 0 : 19 - ((imm)&0xF), \
834 ((imm)&0xF0) ? 0 : 20 - ((imm)&0xF), \
835 ((imm)&0xF0) ? 0 : 21 - ((imm)&0xF), \
836 ((imm)&0xF0) ? 0 : 22 - ((imm)&0xF), \
837 ((imm)&0xF0) ? 0 : 23 - ((imm)&0xF), \
838 ((imm)&0xF0) ? 0 : 24 - ((imm)&0xF), \
839 ((imm)&0xF0) ? 0 : 25 - ((imm)&0xF), \
840 ((imm)&0xF0) ? 0 : 26 - ((imm)&0xF), \
841 ((imm)&0xF0) ? 0 : 27 - ((imm)&0xF), \
842 ((imm)&0xF0) ? 0 : 28 - ((imm)&0xF), \
843 ((imm)&0xF0) ? 0 : 29 - ((imm)&0xF), \
844 ((imm)&0xF0) ? 0 : 30 - ((imm)&0xF), \
845 ((imm)&0xF0) ? 0 : 31 - ((imm)&0xF)); })
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000846
Craig Toppera4624822015-02-13 06:04:45 +0000847#define _mm_bslli_si128(a, imm) \
848 _mm_slli_si128((a), (imm))
849
Michael Kupersteine45af542015-06-30 13:36:19 +0000850static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000851_mm_slli_epi16(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000852{
David Blaikie3302f2b2013-01-16 23:08:36 +0000853 return (__m128i)__builtin_ia32_psllwi128((__v8hi)__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000854}
855
Michael Kupersteine45af542015-06-30 13:36:19 +0000856static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000857_mm_sll_epi16(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000858{
David Blaikie3302f2b2013-01-16 23:08:36 +0000859 return (__m128i)__builtin_ia32_psllw128((__v8hi)__a, (__v8hi)__count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000860}
861
Michael Kupersteine45af542015-06-30 13:36:19 +0000862static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000863_mm_slli_epi32(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000864{
David Blaikie3302f2b2013-01-16 23:08:36 +0000865 return (__m128i)__builtin_ia32_pslldi128((__v4si)__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000866}
867
Michael Kupersteine45af542015-06-30 13:36:19 +0000868static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000869_mm_sll_epi32(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000870{
David Blaikie3302f2b2013-01-16 23:08:36 +0000871 return (__m128i)__builtin_ia32_pslld128((__v4si)__a, (__v4si)__count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000872}
873
Michael Kupersteine45af542015-06-30 13:36:19 +0000874static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000875_mm_slli_epi64(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000876{
David Blaikie3302f2b2013-01-16 23:08:36 +0000877 return __builtin_ia32_psllqi128(__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000878}
879
Michael Kupersteine45af542015-06-30 13:36:19 +0000880static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000881_mm_sll_epi64(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000882{
David Blaikie3302f2b2013-01-16 23:08:36 +0000883 return __builtin_ia32_psllq128(__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000884}
885
Michael Kupersteine45af542015-06-30 13:36:19 +0000886static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000887_mm_srai_epi16(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000888{
David Blaikie3302f2b2013-01-16 23:08:36 +0000889 return (__m128i)__builtin_ia32_psrawi128((__v8hi)__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000890}
891
Michael Kupersteine45af542015-06-30 13:36:19 +0000892static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000893_mm_sra_epi16(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000894{
David Blaikie3302f2b2013-01-16 23:08:36 +0000895 return (__m128i)__builtin_ia32_psraw128((__v8hi)__a, (__v8hi)__count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000896}
897
Michael Kupersteine45af542015-06-30 13:36:19 +0000898static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000899_mm_srai_epi32(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000900{
David Blaikie3302f2b2013-01-16 23:08:36 +0000901 return (__m128i)__builtin_ia32_psradi128((__v4si)__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000902}
903
Michael Kupersteine45af542015-06-30 13:36:19 +0000904static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000905_mm_sra_epi32(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000906{
David Blaikie3302f2b2013-01-16 23:08:36 +0000907 return (__m128i)__builtin_ia32_psrad128((__v4si)__a, (__v4si)__count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000908}
909
Craig Topper51e47412015-02-13 06:04:43 +0000910#define _mm_srli_si128(a, imm) __extension__ ({ \
911 (__m128i)__builtin_shufflevector((__v16qi)(__m128i)(a), \
912 (__v16qi)_mm_setzero_si128(), \
913 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 0, \
914 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 1, \
915 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 2, \
916 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 3, \
917 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 4, \
918 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 5, \
919 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 6, \
920 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 7, \
921 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 8, \
922 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 9, \
923 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 10, \
924 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 11, \
925 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 12, \
926 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 13, \
927 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 14, \
928 ((imm)&0xF0) ? 16 : ((imm)&0xF) + 15); })
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000929
Craig Toppera4624822015-02-13 06:04:45 +0000930#define _mm_bsrli_si128(a, imm) \
931 _mm_srli_si128((a), (imm))
932
Michael Kupersteine45af542015-06-30 13:36:19 +0000933static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000934_mm_srli_epi16(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000935{
David Blaikie3302f2b2013-01-16 23:08:36 +0000936 return (__m128i)__builtin_ia32_psrlwi128((__v8hi)__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000937}
938
Michael Kupersteine45af542015-06-30 13:36:19 +0000939static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000940_mm_srl_epi16(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000941{
David Blaikie3302f2b2013-01-16 23:08:36 +0000942 return (__m128i)__builtin_ia32_psrlw128((__v8hi)__a, (__v8hi)__count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000943}
944
Michael Kupersteine45af542015-06-30 13:36:19 +0000945static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000946_mm_srli_epi32(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000947{
David Blaikie3302f2b2013-01-16 23:08:36 +0000948 return (__m128i)__builtin_ia32_psrldi128((__v4si)__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000949}
950
Michael Kupersteine45af542015-06-30 13:36:19 +0000951static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000952_mm_srl_epi32(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000953{
David Blaikie3302f2b2013-01-16 23:08:36 +0000954 return (__m128i)__builtin_ia32_psrld128((__v4si)__a, (__v4si)__count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000955}
956
Michael Kupersteine45af542015-06-30 13:36:19 +0000957static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000958_mm_srli_epi64(__m128i __a, int __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000959{
David Blaikie3302f2b2013-01-16 23:08:36 +0000960 return __builtin_ia32_psrlqi128(__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000961}
962
Michael Kupersteine45af542015-06-30 13:36:19 +0000963static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000964_mm_srl_epi64(__m128i __a, __m128i __count)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000965{
David Blaikie3302f2b2013-01-16 23:08:36 +0000966 return __builtin_ia32_psrlq128(__a, __count);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000967}
968
Michael Kupersteine45af542015-06-30 13:36:19 +0000969static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000970_mm_cmpeq_epi8(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000971{
David Blaikie3302f2b2013-01-16 23:08:36 +0000972 return (__m128i)((__v16qi)__a == (__v16qi)__b);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000973}
974
Michael Kupersteine45af542015-06-30 13:36:19 +0000975static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000976_mm_cmpeq_epi16(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000977{
David Blaikie3302f2b2013-01-16 23:08:36 +0000978 return (__m128i)((__v8hi)__a == (__v8hi)__b);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000979}
980
Michael Kupersteine45af542015-06-30 13:36:19 +0000981static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000982_mm_cmpeq_epi32(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000983{
David Blaikie3302f2b2013-01-16 23:08:36 +0000984 return (__m128i)((__v4si)__a == (__v4si)__b);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000985}
986
Michael Kupersteine45af542015-06-30 13:36:19 +0000987static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000988_mm_cmpgt_epi8(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000989{
Nick Lewyckyd0ba3792012-02-04 02:16:48 +0000990 /* This function always performs a signed comparison, but __v16qi is a char
991 which may be signed or unsigned. */
Nick Lewycky51a00902012-02-03 23:57:48 +0000992 typedef signed char __v16qs __attribute__((__vector_size__(16)));
David Blaikie3302f2b2013-01-16 23:08:36 +0000993 return (__m128i)((__v16qs)__a > (__v16qs)__b);
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000994}
995
Michael Kupersteine45af542015-06-30 13:36:19 +0000996static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +0000997_mm_cmpgt_epi16(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +0000998{
David Blaikie3302f2b2013-01-16 23:08:36 +0000999 return (__m128i)((__v8hi)__a > (__v8hi)__b);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001000}
1001
Michael Kupersteine45af542015-06-30 13:36:19 +00001002static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001003_mm_cmpgt_epi32(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001004{
David Blaikie3302f2b2013-01-16 23:08:36 +00001005 return (__m128i)((__v4si)__a > (__v4si)__b);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001006}
1007
Michael Kupersteine45af542015-06-30 13:36:19 +00001008static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001009_mm_cmplt_epi8(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001010{
David Blaikie3302f2b2013-01-16 23:08:36 +00001011 return _mm_cmpgt_epi8(__b, __a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001012}
1013
Michael Kupersteine45af542015-06-30 13:36:19 +00001014static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001015_mm_cmplt_epi16(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001016{
David Blaikie3302f2b2013-01-16 23:08:36 +00001017 return _mm_cmpgt_epi16(__b, __a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001018}
1019
Michael Kupersteine45af542015-06-30 13:36:19 +00001020static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001021_mm_cmplt_epi32(__m128i __a, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001022{
David Blaikie3302f2b2013-01-16 23:08:36 +00001023 return _mm_cmpgt_epi32(__b, __a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001024}
1025
1026#ifdef __x86_64__
Michael Kupersteine45af542015-06-30 13:36:19 +00001027static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001028_mm_cvtsi64_sd(__m128d __a, long long __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001029{
David Blaikie3302f2b2013-01-16 23:08:36 +00001030 __a[0] = __b;
1031 return __a;
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001032}
1033
Michael Kupersteine45af542015-06-30 13:36:19 +00001034static __inline__ long long __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001035_mm_cvtsd_si64(__m128d __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001036{
David Blaikie3302f2b2013-01-16 23:08:36 +00001037 return __builtin_ia32_cvtsd2si64(__a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001038}
1039
Michael Kupersteine45af542015-06-30 13:36:19 +00001040static __inline__ long long __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001041_mm_cvttsd_si64(__m128d __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001042{
David Blaikie3302f2b2013-01-16 23:08:36 +00001043 return __a[0];
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001044}
1045#endif
1046
Michael Kupersteine45af542015-06-30 13:36:19 +00001047static __inline__ __m128 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001048_mm_cvtepi32_ps(__m128i __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001049{
David Blaikie3302f2b2013-01-16 23:08:36 +00001050 return __builtin_ia32_cvtdq2ps((__v4si)__a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001051}
1052
Michael Kupersteine45af542015-06-30 13:36:19 +00001053static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001054_mm_cvtps_epi32(__m128 __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001055{
David Blaikie3302f2b2013-01-16 23:08:36 +00001056 return (__m128i)__builtin_ia32_cvtps2dq(__a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001057}
1058
Michael Kupersteine45af542015-06-30 13:36:19 +00001059static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001060_mm_cvttps_epi32(__m128 __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001061{
David Blaikie3302f2b2013-01-16 23:08:36 +00001062 return (__m128i)__builtin_ia32_cvttps2dq(__a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001063}
1064
Michael Kupersteine45af542015-06-30 13:36:19 +00001065static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001066_mm_cvtsi32_si128(int __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001067{
David Blaikie3302f2b2013-01-16 23:08:36 +00001068 return (__m128i)(__v4si){ __a, 0, 0, 0 };
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001069}
1070
1071#ifdef __x86_64__
Michael Kupersteine45af542015-06-30 13:36:19 +00001072static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001073_mm_cvtsi64_si128(long long __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001074{
David Blaikie3302f2b2013-01-16 23:08:36 +00001075 return (__m128i){ __a, 0 };
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001076}
1077#endif
1078
Michael Kupersteine45af542015-06-30 13:36:19 +00001079static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001080_mm_cvtsi128_si32(__m128i __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001081{
David Blaikie3302f2b2013-01-16 23:08:36 +00001082 __v4si __b = (__v4si)__a;
1083 return __b[0];
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001084}
1085
1086#ifdef __x86_64__
Michael Kupersteine45af542015-06-30 13:36:19 +00001087static __inline__ long long __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001088_mm_cvtsi128_si64(__m128i __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001089{
David Blaikie3302f2b2013-01-16 23:08:36 +00001090 return __a[0];
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001091}
1092#endif
1093
Michael Kupersteine45af542015-06-30 13:36:19 +00001094static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001095_mm_load_si128(__m128i const *__p)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001096{
David Blaikie3302f2b2013-01-16 23:08:36 +00001097 return *__p;
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001098}
1099
Michael Kupersteine45af542015-06-30 13:36:19 +00001100static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001101_mm_loadu_si128(__m128i const *__p)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001102{
Bill Wendling502931f2011-05-13 00:11:39 +00001103 struct __loadu_si128 {
David Blaikie3302f2b2013-01-16 23:08:36 +00001104 __m128i __v;
David Majnemer1cf22e62015-02-04 00:26:10 +00001105 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +00001106 return ((struct __loadu_si128*)__p)->__v;
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001107}
1108
Michael Kupersteine45af542015-06-30 13:36:19 +00001109static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001110_mm_loadl_epi64(__m128i const *__p)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001111{
Eli Friedman9bb51ad2011-09-15 23:15:27 +00001112 struct __mm_loadl_epi64_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +00001113 long long __u;
Eli Friedman9bb51ad2011-09-15 23:15:27 +00001114 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +00001115 return (__m128i) { ((struct __mm_loadl_epi64_struct*)__p)->__u, 0};
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001116}
1117
Michael Kupersteine45af542015-06-30 13:36:19 +00001118static __inline__ __m128i __DEFAULT_FN_ATTRS
Anders Carlssondfa31172009-09-18 17:03:55 +00001119_mm_set_epi64x(long long q1, long long q0)
1120{
1121 return (__m128i){ q0, q1 };
1122}
1123
Michael Kupersteine45af542015-06-30 13:36:19 +00001124static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001125_mm_set_epi64(__m64 q1, __m64 q0)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001126{
1127 return (__m128i){ (long long)q0, (long long)q1 };
1128}
1129
Michael Kupersteine45af542015-06-30 13:36:19 +00001130static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001131_mm_set_epi32(int i3, int i2, int i1, int i0)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001132{
1133 return (__m128i)(__v4si){ i0, i1, i2, i3};
1134}
1135
Michael Kupersteine45af542015-06-30 13:36:19 +00001136static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001137_mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001138{
1139 return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
1140}
1141
Michael Kupersteine45af542015-06-30 13:36:19 +00001142static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001143_mm_set_epi8(char b15, char b14, char b13, char b12, char b11, char b10, char b9, char b8, char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001144{
1145 return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
1146}
1147
Michael Kupersteine45af542015-06-30 13:36:19 +00001148static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001149_mm_set1_epi64x(long long __q)
Anders Carlssondfa31172009-09-18 17:03:55 +00001150{
David Blaikie3302f2b2013-01-16 23:08:36 +00001151 return (__m128i){ __q, __q };
Anders Carlssondfa31172009-09-18 17:03:55 +00001152}
1153
Michael Kupersteine45af542015-06-30 13:36:19 +00001154static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001155_mm_set1_epi64(__m64 __q)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001156{
David Blaikie3302f2b2013-01-16 23:08:36 +00001157 return (__m128i){ (long long)__q, (long long)__q };
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001158}
1159
Michael Kupersteine45af542015-06-30 13:36:19 +00001160static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001161_mm_set1_epi32(int __i)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001162{
David Blaikie3302f2b2013-01-16 23:08:36 +00001163 return (__m128i)(__v4si){ __i, __i, __i, __i };
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001164}
1165
Michael Kupersteine45af542015-06-30 13:36:19 +00001166static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001167_mm_set1_epi16(short __w)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001168{
David Blaikie3302f2b2013-01-16 23:08:36 +00001169 return (__m128i)(__v8hi){ __w, __w, __w, __w, __w, __w, __w, __w };
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001170}
1171
Michael Kupersteine45af542015-06-30 13:36:19 +00001172static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001173_mm_set1_epi8(char __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001174{
David Blaikie3302f2b2013-01-16 23:08:36 +00001175 return (__m128i)(__v16qi){ __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b };
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001176}
1177
Michael Kupersteine45af542015-06-30 13:36:19 +00001178static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001179_mm_setr_epi64(__m64 q0, __m64 q1)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001180{
1181 return (__m128i){ (long long)q0, (long long)q1 };
1182}
1183
Michael Kupersteine45af542015-06-30 13:36:19 +00001184static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001185_mm_setr_epi32(int i0, int i1, int i2, int i3)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001186{
1187 return (__m128i)(__v4si){ i0, i1, i2, i3};
1188}
1189
Michael Kupersteine45af542015-06-30 13:36:19 +00001190static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001191_mm_setr_epi16(short w0, short w1, short w2, short w3, short w4, short w5, short w6, short w7)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001192{
1193 return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 };
1194}
1195
Michael Kupersteine45af542015-06-30 13:36:19 +00001196static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001197_mm_setr_epi8(char b0, char b1, char b2, char b3, char b4, char b5, char b6, char b7, char b8, char b9, char b10, char b11, char b12, char b13, char b14, char b15)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001198{
1199 return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 };
1200}
1201
Michael Kupersteine45af542015-06-30 13:36:19 +00001202static __inline__ __m128i __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001203_mm_setzero_si128(void)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001204{
1205 return (__m128i){ 0LL, 0LL };
1206}
1207
Michael Kupersteine45af542015-06-30 13:36:19 +00001208static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001209_mm_store_si128(__m128i *__p, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001210{
David Blaikie3302f2b2013-01-16 23:08:36 +00001211 *__p = __b;
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001212}
1213
Michael Kupersteine45af542015-06-30 13:36:19 +00001214static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001215_mm_storeu_si128(__m128i *__p, __m128i __b)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001216{
David Blaikie3302f2b2013-01-16 23:08:36 +00001217 __builtin_ia32_storedqu((char *)__p, (__v16qi)__b);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001218}
1219
Michael Kupersteine45af542015-06-30 13:36:19 +00001220static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001221_mm_maskmoveu_si128(__m128i __d, __m128i __n, char *__p)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001222{
David Blaikie3302f2b2013-01-16 23:08:36 +00001223 __builtin_ia32_maskmovdqu((__v16qi)__d, (__v16qi)__n, __p);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001224}
1225
Michael Kupersteine45af542015-06-30 13:36:19 +00001226static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001227_mm_storel_epi64(__m128i *__p, __m128i __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001228{
Chad Rosier87622b82012-05-01 18:11:51 +00001229 struct __mm_storel_epi64_struct {
David Blaikie3302f2b2013-01-16 23:08:36 +00001230 long long __u;
Chad Rosier87622b82012-05-01 18:11:51 +00001231 } __attribute__((__packed__, __may_alias__));
David Blaikie3302f2b2013-01-16 23:08:36 +00001232 ((struct __mm_storel_epi64_struct*)__p)->__u = __a[0];
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001233}
1234
Michael Kupersteine45af542015-06-30 13:36:19 +00001235static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001236_mm_stream_pd(double *__p, __m128d __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001237{
David Blaikie3302f2b2013-01-16 23:08:36 +00001238 __builtin_ia32_movntpd(__p, __a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001239}
1240
Michael Kupersteine45af542015-06-30 13:36:19 +00001241static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001242_mm_stream_si128(__m128i *__p, __m128i __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001243{
David Blaikie3302f2b2013-01-16 23:08:36 +00001244 __builtin_ia32_movntdq(__p, __a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001245}
1246
Michael Kupersteine45af542015-06-30 13:36:19 +00001247static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001248_mm_stream_si32(int *__p, int __a)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001249{
David Blaikie3302f2b2013-01-16 23:08:36 +00001250 __builtin_ia32_movnti(__p, __a);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001251}
1252
Eli Friedmanf9d8c6c2013-09-23 23:38:39 +00001253#ifdef __x86_64__
Michael Kupersteine45af542015-06-30 13:36:19 +00001254static __inline__ void __DEFAULT_FN_ATTRS
Eli Friedmanf9d8c6c2013-09-23 23:38:39 +00001255_mm_stream_si64(long long *__p, long long __a)
1256{
1257 __builtin_ia32_movnti64(__p, __a);
1258}
1259#endif
1260
Michael Kupersteine45af542015-06-30 13:36:19 +00001261static __inline__ void __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001262_mm_clflush(void const *__p)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001263{
David Blaikie3302f2b2013-01-16 23:08:36 +00001264 __builtin_ia32_clflush(__p);
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001265}
1266
Michael Kupersteine45af542015-06-30 13:36:19 +00001267static __inline__ void __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001268_mm_lfence(void)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001269{
1270 __builtin_ia32_lfence();
1271}
1272
Michael Kupersteine45af542015-06-30 13:36:19 +00001273static __inline__ void __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001274_mm_mfence(void)
Anders Carlssona0d5ca22008-12-25 23:48:58 +00001275{
1276 __builtin_ia32_mfence();
1277}
1278
Michael Kupersteine45af542015-06-30 13:36:19 +00001279static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001280_mm_packs_epi16(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001281{
David Blaikie3302f2b2013-01-16 23:08:36 +00001282 return (__m128i)__builtin_ia32_packsswb128((__v8hi)__a, (__v8hi)__b);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001283}
1284
Michael Kupersteine45af542015-06-30 13:36:19 +00001285static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001286_mm_packs_epi32(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001287{
David Blaikie3302f2b2013-01-16 23:08:36 +00001288 return (__m128i)__builtin_ia32_packssdw128((__v4si)__a, (__v4si)__b);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001289}
1290
Michael Kupersteine45af542015-06-30 13:36:19 +00001291static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001292_mm_packus_epi16(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001293{
David Blaikie3302f2b2013-01-16 23:08:36 +00001294 return (__m128i)__builtin_ia32_packuswb128((__v8hi)__a, (__v8hi)__b);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001295}
1296
Michael Kupersteine45af542015-06-30 13:36:19 +00001297static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001298_mm_extract_epi16(__m128i __a, int __imm)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001299{
David Blaikie3302f2b2013-01-16 23:08:36 +00001300 __v8hi __b = (__v8hi)__a;
Manman Renbe38b9e2013-10-22 19:24:42 +00001301 return (unsigned short)__b[__imm & 7];
Anders Carlsson85eb1242008-12-26 00:45:50 +00001302}
1303
Michael Kupersteine45af542015-06-30 13:36:19 +00001304static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001305_mm_insert_epi16(__m128i __a, int __b, int __imm)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001306{
David Blaikie3302f2b2013-01-16 23:08:36 +00001307 __v8hi __c = (__v8hi)__a;
1308 __c[__imm & 7] = __b;
1309 return (__m128i)__c;
Anders Carlsson85eb1242008-12-26 00:45:50 +00001310}
1311
Michael Kupersteine45af542015-06-30 13:36:19 +00001312static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001313_mm_movemask_epi8(__m128i __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001314{
David Blaikie3302f2b2013-01-16 23:08:36 +00001315 return __builtin_ia32_pmovmskb128((__v16qi)__a);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001316}
1317
Bob Wilsonc9b97cc2011-11-05 06:08:06 +00001318#define _mm_shuffle_epi32(a, imm) __extension__ ({ \
Craig Topper51e47412015-02-13 06:04:43 +00001319 (__m128i)__builtin_shufflevector((__v4si)(__m128i)(a), \
1320 (__v4si)_mm_set1_epi32(0), \
Bob Wilsonc9b97cc2011-11-05 06:08:06 +00001321 (imm) & 0x3, ((imm) & 0xc) >> 2, \
1322 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6); })
Chris Lattnerf03406f2011-04-25 20:42:40 +00001323
Bob Wilsonc9b97cc2011-11-05 06:08:06 +00001324#define _mm_shufflelo_epi16(a, imm) __extension__ ({ \
Craig Topper51e47412015-02-13 06:04:43 +00001325 (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \
1326 (__v8hi)_mm_set1_epi16(0), \
Bob Wilsonc9b97cc2011-11-05 06:08:06 +00001327 (imm) & 0x3, ((imm) & 0xc) >> 2, \
1328 ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \
1329 4, 5, 6, 7); })
Chris Lattnerf03406f2011-04-25 20:42:40 +00001330
Bob Wilsonc9b97cc2011-11-05 06:08:06 +00001331#define _mm_shufflehi_epi16(a, imm) __extension__ ({ \
Craig Topper51e47412015-02-13 06:04:43 +00001332 (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \
1333 (__v8hi)_mm_set1_epi16(0), \
Bob Wilsonc9b97cc2011-11-05 06:08:06 +00001334 0, 1, 2, 3, \
1335 4 + (((imm) & 0x03) >> 0), \
1336 4 + (((imm) & 0x0c) >> 2), \
1337 4 + (((imm) & 0x30) >> 4), \
1338 4 + (((imm) & 0xc0) >> 6)); })
Anders Carlsson85eb1242008-12-26 00:45:50 +00001339
Michael Kupersteine45af542015-06-30 13:36:19 +00001340static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001341_mm_unpackhi_epi8(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001342{
David Blaikie3302f2b2013-01-16 23:08:36 +00001343 return (__m128i)__builtin_shufflevector((__v16qi)__a, (__v16qi)__b, 8, 16+8, 9, 16+9, 10, 16+10, 11, 16+11, 12, 16+12, 13, 16+13, 14, 16+14, 15, 16+15);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001344}
1345
Michael Kupersteine45af542015-06-30 13:36:19 +00001346static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001347_mm_unpackhi_epi16(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001348{
David Blaikie3302f2b2013-01-16 23:08:36 +00001349 return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001350}
1351
Michael Kupersteine45af542015-06-30 13:36:19 +00001352static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001353_mm_unpackhi_epi32(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001354{
David Blaikie3302f2b2013-01-16 23:08:36 +00001355 return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 2, 4+2, 3, 4+3);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001356}
1357
Michael Kupersteine45af542015-06-30 13:36:19 +00001358static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001359_mm_unpackhi_epi64(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001360{
David Blaikie3302f2b2013-01-16 23:08:36 +00001361 return (__m128i)__builtin_shufflevector(__a, __b, 1, 2+1);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001362}
1363
Michael Kupersteine45af542015-06-30 13:36:19 +00001364static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001365_mm_unpacklo_epi8(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001366{
David Blaikie3302f2b2013-01-16 23:08:36 +00001367 return (__m128i)__builtin_shufflevector((__v16qi)__a, (__v16qi)__b, 0, 16+0, 1, 16+1, 2, 16+2, 3, 16+3, 4, 16+4, 5, 16+5, 6, 16+6, 7, 16+7);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001368}
1369
Michael Kupersteine45af542015-06-30 13:36:19 +00001370static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001371_mm_unpacklo_epi16(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001372{
David Blaikie3302f2b2013-01-16 23:08:36 +00001373 return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001374}
1375
Michael Kupersteine45af542015-06-30 13:36:19 +00001376static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001377_mm_unpacklo_epi32(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001378{
David Blaikie3302f2b2013-01-16 23:08:36 +00001379 return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 0, 4+0, 1, 4+1);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001380}
1381
Michael Kupersteine45af542015-06-30 13:36:19 +00001382static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001383_mm_unpacklo_epi64(__m128i __a, __m128i __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001384{
David Blaikie3302f2b2013-01-16 23:08:36 +00001385 return (__m128i)__builtin_shufflevector(__a, __b, 0, 2+0);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001386}
1387
Michael Kupersteine45af542015-06-30 13:36:19 +00001388static __inline__ __m64 __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001389_mm_movepi64_pi64(__m128i __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001390{
David Blaikie3302f2b2013-01-16 23:08:36 +00001391 return (__m64)__a[0];
Anders Carlsson85eb1242008-12-26 00:45:50 +00001392}
1393
Michael Kupersteine45af542015-06-30 13:36:19 +00001394static __inline__ __m128i __DEFAULT_FN_ATTRS
Alp Tokerd480b1b2013-11-23 22:11:57 +00001395_mm_movpi64_epi64(__m64 __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001396{
David Blaikie3302f2b2013-01-16 23:08:36 +00001397 return (__m128i){ (long long)__a, 0 };
Anders Carlsson85eb1242008-12-26 00:45:50 +00001398}
1399
Michael Kupersteine45af542015-06-30 13:36:19 +00001400static __inline__ __m128i __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001401_mm_move_epi64(__m128i __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001402{
David Blaikie3302f2b2013-01-16 23:08:36 +00001403 return __builtin_shufflevector(__a, (__m128i){ 0 }, 0, 2);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001404}
1405
Michael Kupersteine45af542015-06-30 13:36:19 +00001406static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001407_mm_unpackhi_pd(__m128d __a, __m128d __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001408{
David Blaikie3302f2b2013-01-16 23:08:36 +00001409 return __builtin_shufflevector(__a, __b, 1, 2+1);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001410}
1411
Michael Kupersteine45af542015-06-30 13:36:19 +00001412static __inline__ __m128d __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001413_mm_unpacklo_pd(__m128d __a, __m128d __b)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001414{
David Blaikie3302f2b2013-01-16 23:08:36 +00001415 return __builtin_shufflevector(__a, __b, 0, 2+0);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001416}
1417
Michael Kupersteine45af542015-06-30 13:36:19 +00001418static __inline__ int __DEFAULT_FN_ATTRS
David Blaikie3302f2b2013-01-16 23:08:36 +00001419_mm_movemask_pd(__m128d __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001420{
David Blaikie3302f2b2013-01-16 23:08:36 +00001421 return __builtin_ia32_movmskpd(__a);
Anders Carlsson85eb1242008-12-26 00:45:50 +00001422}
1423
Bob Wilsonc9b97cc2011-11-05 06:08:06 +00001424#define _mm_shuffle_pd(a, b, i) __extension__ ({ \
Craig Topper51e47412015-02-13 06:04:43 +00001425 __builtin_shufflevector((__m128d)(a), (__m128d)(b), \
1426 (i) & 1, (((i) & 2) >> 1) + 2); })
Anders Carlsson85eb1242008-12-26 00:45:50 +00001427
Michael Kupersteine45af542015-06-30 13:36:19 +00001428static __inline__ __m128 __DEFAULT_FN_ATTRS
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001429_mm_castpd_ps(__m128d __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001430{
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001431 return (__m128)__a;
Anders Carlsson85eb1242008-12-26 00:45:50 +00001432}
1433
Michael Kupersteine45af542015-06-30 13:36:19 +00001434static __inline__ __m128i __DEFAULT_FN_ATTRS
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001435_mm_castpd_si128(__m128d __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001436{
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001437 return (__m128i)__a;
Anders Carlsson85eb1242008-12-26 00:45:50 +00001438}
1439
Michael Kupersteine45af542015-06-30 13:36:19 +00001440static __inline__ __m128d __DEFAULT_FN_ATTRS
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001441_mm_castps_pd(__m128 __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001442{
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001443 return (__m128d)__a;
Anders Carlsson85eb1242008-12-26 00:45:50 +00001444}
1445
Michael Kupersteine45af542015-06-30 13:36:19 +00001446static __inline__ __m128i __DEFAULT_FN_ATTRS
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001447_mm_castps_si128(__m128 __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001448{
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001449 return (__m128i)__a;
Anders Carlsson85eb1242008-12-26 00:45:50 +00001450}
1451
Michael Kupersteine45af542015-06-30 13:36:19 +00001452static __inline__ __m128 __DEFAULT_FN_ATTRS
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001453_mm_castsi128_ps(__m128i __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001454{
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001455 return (__m128)__a;
Anders Carlsson85eb1242008-12-26 00:45:50 +00001456}
1457
Michael Kupersteine45af542015-06-30 13:36:19 +00001458static __inline__ __m128d __DEFAULT_FN_ATTRS
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001459_mm_castsi128_pd(__m128i __a)
Anders Carlsson85eb1242008-12-26 00:45:50 +00001460{
Reid Kleckner7ab75b32013-04-19 17:00:14 +00001461 return (__m128d)__a;
Anders Carlsson85eb1242008-12-26 00:45:50 +00001462}
1463
Michael Kupersteine45af542015-06-30 13:36:19 +00001464static __inline__ void __DEFAULT_FN_ATTRS
Mike Stump5b31ed32009-02-13 14:24:50 +00001465_mm_pause(void)
Anders Carlsson37c23712008-12-26 00:49:43 +00001466{
Anders Carlsson88b53662008-12-26 02:22:10 +00001467 __asm__ volatile ("pause");
Anders Carlsson37c23712008-12-26 00:49:43 +00001468}
1469
Michael Kupersteine45af542015-06-30 13:36:19 +00001470#undef __DEFAULT_FN_ATTRS
Eric Christopher4d1851682015-06-17 07:09:20 +00001471
Anders Carlsson43c2bab2009-01-21 01:49:39 +00001472#define _MM_SHUFFLE2(x, y) (((x) << 1) | (y))
Anders Carlsson37c23712008-12-26 00:49:43 +00001473
Anders Carlssonf15e71d2008-12-24 01:45:22 +00001474#endif /* __EMMINTRIN_H */