1*344a7f5eSAndroid Build Coastguard Worker /*===---- emmintrin.h - SSE2 intrinsics ------------------------------------===
2*344a7f5eSAndroid Build Coastguard Worker *
3*344a7f5eSAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a copy
4*344a7f5eSAndroid Build Coastguard Worker * of this software and associated documentation files (the "Software"), to deal
5*344a7f5eSAndroid Build Coastguard Worker * in the Software without restriction, including without limitation the rights
6*344a7f5eSAndroid Build Coastguard Worker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7*344a7f5eSAndroid Build Coastguard Worker * copies of the Software, and to permit persons to whom the Software is
8*344a7f5eSAndroid Build Coastguard Worker * furnished to do so, subject to the following conditions:
9*344a7f5eSAndroid Build Coastguard Worker *
10*344a7f5eSAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in
11*344a7f5eSAndroid Build Coastguard Worker * all copies or substantial portions of the Software.
12*344a7f5eSAndroid Build Coastguard Worker *
13*344a7f5eSAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14*344a7f5eSAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15*344a7f5eSAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16*344a7f5eSAndroid Build Coastguard Worker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17*344a7f5eSAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18*344a7f5eSAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19*344a7f5eSAndroid Build Coastguard Worker * THE SOFTWARE.
20*344a7f5eSAndroid Build Coastguard Worker *
21*344a7f5eSAndroid Build Coastguard Worker *===-----------------------------------------------------------------------===
22*344a7f5eSAndroid Build Coastguard Worker */
23*344a7f5eSAndroid Build Coastguard Worker
24*344a7f5eSAndroid Build Coastguard Worker #ifndef __EMMINTRIN_H
25*344a7f5eSAndroid Build Coastguard Worker #define __EMMINTRIN_H
26*344a7f5eSAndroid Build Coastguard Worker
27*344a7f5eSAndroid Build Coastguard Worker #include <xmmintrin.h>
28*344a7f5eSAndroid Build Coastguard Worker
29*344a7f5eSAndroid Build Coastguard Worker typedef double __m128d __attribute__((__vector_size__(16)));
30*344a7f5eSAndroid Build Coastguard Worker typedef long long __m128i __attribute__((__vector_size__(16)));
31*344a7f5eSAndroid Build Coastguard Worker
32*344a7f5eSAndroid Build Coastguard Worker /* Type defines. */
33*344a7f5eSAndroid Build Coastguard Worker typedef double __v2df __attribute__ ((__vector_size__ (16)));
34*344a7f5eSAndroid Build Coastguard Worker typedef long long __v2di __attribute__ ((__vector_size__ (16)));
35*344a7f5eSAndroid Build Coastguard Worker typedef short __v8hi __attribute__((__vector_size__(16)));
36*344a7f5eSAndroid Build Coastguard Worker typedef char __v16qi __attribute__((__vector_size__(16)));
37*344a7f5eSAndroid Build Coastguard Worker
38*344a7f5eSAndroid Build Coastguard Worker /* Unsigned types */
39*344a7f5eSAndroid Build Coastguard Worker typedef unsigned long long __v2du __attribute__ ((__vector_size__ (16)));
40*344a7f5eSAndroid Build Coastguard Worker typedef unsigned short __v8hu __attribute__((__vector_size__(16)));
41*344a7f5eSAndroid Build Coastguard Worker typedef unsigned char __v16qu __attribute__((__vector_size__(16)));
42*344a7f5eSAndroid Build Coastguard Worker
43*344a7f5eSAndroid Build Coastguard Worker /* We need an explicitly signed variant for char. Note that this shouldn't
44*344a7f5eSAndroid Build Coastguard Worker * appear in the interface though. */
45*344a7f5eSAndroid Build Coastguard Worker typedef signed char __v16qs __attribute__((__vector_size__(16)));
46*344a7f5eSAndroid Build Coastguard Worker
47*344a7f5eSAndroid Build Coastguard Worker #include <f16cintrin.h>
48*344a7f5eSAndroid Build Coastguard Worker
49*344a7f5eSAndroid Build Coastguard Worker /* Define the default attributes for the functions in this file. */
50*344a7f5eSAndroid Build Coastguard Worker #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sse2")))
51*344a7f5eSAndroid Build Coastguard Worker
52*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_add_sd(__m128d __a,__m128d __b)53*344a7f5eSAndroid Build Coastguard Worker _mm_add_sd(__m128d __a, __m128d __b)
54*344a7f5eSAndroid Build Coastguard Worker {
55*344a7f5eSAndroid Build Coastguard Worker __a[0] += __b[0];
56*344a7f5eSAndroid Build Coastguard Worker return __a;
57*344a7f5eSAndroid Build Coastguard Worker }
58*344a7f5eSAndroid Build Coastguard Worker
59*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_add_pd(__m128d __a,__m128d __b)60*344a7f5eSAndroid Build Coastguard Worker _mm_add_pd(__m128d __a, __m128d __b)
61*344a7f5eSAndroid Build Coastguard Worker {
62*344a7f5eSAndroid Build Coastguard Worker return (__m128d)((__v2df)__a + (__v2df)__b);
63*344a7f5eSAndroid Build Coastguard Worker }
64*344a7f5eSAndroid Build Coastguard Worker
65*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_sub_sd(__m128d __a,__m128d __b)66*344a7f5eSAndroid Build Coastguard Worker _mm_sub_sd(__m128d __a, __m128d __b)
67*344a7f5eSAndroid Build Coastguard Worker {
68*344a7f5eSAndroid Build Coastguard Worker __a[0] -= __b[0];
69*344a7f5eSAndroid Build Coastguard Worker return __a;
70*344a7f5eSAndroid Build Coastguard Worker }
71*344a7f5eSAndroid Build Coastguard Worker
72*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_sub_pd(__m128d __a,__m128d __b)73*344a7f5eSAndroid Build Coastguard Worker _mm_sub_pd(__m128d __a, __m128d __b)
74*344a7f5eSAndroid Build Coastguard Worker {
75*344a7f5eSAndroid Build Coastguard Worker return (__m128d)((__v2df)__a - (__v2df)__b);
76*344a7f5eSAndroid Build Coastguard Worker }
77*344a7f5eSAndroid Build Coastguard Worker
78*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_mul_sd(__m128d __a,__m128d __b)79*344a7f5eSAndroid Build Coastguard Worker _mm_mul_sd(__m128d __a, __m128d __b)
80*344a7f5eSAndroid Build Coastguard Worker {
81*344a7f5eSAndroid Build Coastguard Worker __a[0] *= __b[0];
82*344a7f5eSAndroid Build Coastguard Worker return __a;
83*344a7f5eSAndroid Build Coastguard Worker }
84*344a7f5eSAndroid Build Coastguard Worker
85*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_mul_pd(__m128d __a,__m128d __b)86*344a7f5eSAndroid Build Coastguard Worker _mm_mul_pd(__m128d __a, __m128d __b)
87*344a7f5eSAndroid Build Coastguard Worker {
88*344a7f5eSAndroid Build Coastguard Worker return (__m128d)((__v2df)__a * (__v2df)__b);
89*344a7f5eSAndroid Build Coastguard Worker }
90*344a7f5eSAndroid Build Coastguard Worker
91*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_div_sd(__m128d __a,__m128d __b)92*344a7f5eSAndroid Build Coastguard Worker _mm_div_sd(__m128d __a, __m128d __b)
93*344a7f5eSAndroid Build Coastguard Worker {
94*344a7f5eSAndroid Build Coastguard Worker __a[0] /= __b[0];
95*344a7f5eSAndroid Build Coastguard Worker return __a;
96*344a7f5eSAndroid Build Coastguard Worker }
97*344a7f5eSAndroid Build Coastguard Worker
98*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_div_pd(__m128d __a,__m128d __b)99*344a7f5eSAndroid Build Coastguard Worker _mm_div_pd(__m128d __a, __m128d __b)
100*344a7f5eSAndroid Build Coastguard Worker {
101*344a7f5eSAndroid Build Coastguard Worker return (__m128d)((__v2df)__a / (__v2df)__b);
102*344a7f5eSAndroid Build Coastguard Worker }
103*344a7f5eSAndroid Build Coastguard Worker
104*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_sqrt_sd(__m128d __a,__m128d __b)105*344a7f5eSAndroid Build Coastguard Worker _mm_sqrt_sd(__m128d __a, __m128d __b)
106*344a7f5eSAndroid Build Coastguard Worker {
107*344a7f5eSAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_sqrtsd((__v2df)__b);
108*344a7f5eSAndroid Build Coastguard Worker return (__m128d) { __c[0], __a[1] };
109*344a7f5eSAndroid Build Coastguard Worker }
110*344a7f5eSAndroid Build Coastguard Worker
111*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_sqrt_pd(__m128d __a)112*344a7f5eSAndroid Build Coastguard Worker _mm_sqrt_pd(__m128d __a)
113*344a7f5eSAndroid Build Coastguard Worker {
114*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_sqrtpd((__v2df)__a);
115*344a7f5eSAndroid Build Coastguard Worker }
116*344a7f5eSAndroid Build Coastguard Worker
117*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_min_sd(__m128d __a,__m128d __b)118*344a7f5eSAndroid Build Coastguard Worker _mm_min_sd(__m128d __a, __m128d __b)
119*344a7f5eSAndroid Build Coastguard Worker {
120*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_minsd((__v2df)__a, (__v2df)__b);
121*344a7f5eSAndroid Build Coastguard Worker }
122*344a7f5eSAndroid Build Coastguard Worker
123*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_min_pd(__m128d __a,__m128d __b)124*344a7f5eSAndroid Build Coastguard Worker _mm_min_pd(__m128d __a, __m128d __b)
125*344a7f5eSAndroid Build Coastguard Worker {
126*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_minpd((__v2df)__a, (__v2df)__b);
127*344a7f5eSAndroid Build Coastguard Worker }
128*344a7f5eSAndroid Build Coastguard Worker
129*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_max_sd(__m128d __a,__m128d __b)130*344a7f5eSAndroid Build Coastguard Worker _mm_max_sd(__m128d __a, __m128d __b)
131*344a7f5eSAndroid Build Coastguard Worker {
132*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_maxsd((__v2df)__a, (__v2df)__b);
133*344a7f5eSAndroid Build Coastguard Worker }
134*344a7f5eSAndroid Build Coastguard Worker
135*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_max_pd(__m128d __a,__m128d __b)136*344a7f5eSAndroid Build Coastguard Worker _mm_max_pd(__m128d __a, __m128d __b)
137*344a7f5eSAndroid Build Coastguard Worker {
138*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_maxpd((__v2df)__a, (__v2df)__b);
139*344a7f5eSAndroid Build Coastguard Worker }
140*344a7f5eSAndroid Build Coastguard Worker
141*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_and_pd(__m128d __a,__m128d __b)142*344a7f5eSAndroid Build Coastguard Worker _mm_and_pd(__m128d __a, __m128d __b)
143*344a7f5eSAndroid Build Coastguard Worker {
144*344a7f5eSAndroid Build Coastguard Worker return (__m128d)((__v4su)__a & (__v4su)__b);
145*344a7f5eSAndroid Build Coastguard Worker }
146*344a7f5eSAndroid Build Coastguard Worker
147*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_andnot_pd(__m128d __a,__m128d __b)148*344a7f5eSAndroid Build Coastguard Worker _mm_andnot_pd(__m128d __a, __m128d __b)
149*344a7f5eSAndroid Build Coastguard Worker {
150*344a7f5eSAndroid Build Coastguard Worker return (__m128d)(~(__v4su)__a & (__v4su)__b);
151*344a7f5eSAndroid Build Coastguard Worker }
152*344a7f5eSAndroid Build Coastguard Worker
153*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_or_pd(__m128d __a,__m128d __b)154*344a7f5eSAndroid Build Coastguard Worker _mm_or_pd(__m128d __a, __m128d __b)
155*344a7f5eSAndroid Build Coastguard Worker {
156*344a7f5eSAndroid Build Coastguard Worker return (__m128d)((__v4su)__a | (__v4su)__b);
157*344a7f5eSAndroid Build Coastguard Worker }
158*344a7f5eSAndroid Build Coastguard Worker
159*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_xor_pd(__m128d __a,__m128d __b)160*344a7f5eSAndroid Build Coastguard Worker _mm_xor_pd(__m128d __a, __m128d __b)
161*344a7f5eSAndroid Build Coastguard Worker {
162*344a7f5eSAndroid Build Coastguard Worker return (__m128d)((__v4su)__a ^ (__v4su)__b);
163*344a7f5eSAndroid Build Coastguard Worker }
164*344a7f5eSAndroid Build Coastguard Worker
165*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpeq_pd(__m128d __a,__m128d __b)166*344a7f5eSAndroid Build Coastguard Worker _mm_cmpeq_pd(__m128d __a, __m128d __b)
167*344a7f5eSAndroid Build Coastguard Worker {
168*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpeqpd((__v2df)__a, (__v2df)__b);
169*344a7f5eSAndroid Build Coastguard Worker }
170*344a7f5eSAndroid Build Coastguard Worker
171*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmplt_pd(__m128d __a,__m128d __b)172*344a7f5eSAndroid Build Coastguard Worker _mm_cmplt_pd(__m128d __a, __m128d __b)
173*344a7f5eSAndroid Build Coastguard Worker {
174*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpltpd((__v2df)__a, (__v2df)__b);
175*344a7f5eSAndroid Build Coastguard Worker }
176*344a7f5eSAndroid Build Coastguard Worker
177*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmple_pd(__m128d __a,__m128d __b)178*344a7f5eSAndroid Build Coastguard Worker _mm_cmple_pd(__m128d __a, __m128d __b)
179*344a7f5eSAndroid Build Coastguard Worker {
180*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmplepd((__v2df)__a, (__v2df)__b);
181*344a7f5eSAndroid Build Coastguard Worker }
182*344a7f5eSAndroid Build Coastguard Worker
183*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpgt_pd(__m128d __a,__m128d __b)184*344a7f5eSAndroid Build Coastguard Worker _mm_cmpgt_pd(__m128d __a, __m128d __b)
185*344a7f5eSAndroid Build Coastguard Worker {
186*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpltpd((__v2df)__b, (__v2df)__a);
187*344a7f5eSAndroid Build Coastguard Worker }
188*344a7f5eSAndroid Build Coastguard Worker
189*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpge_pd(__m128d __a,__m128d __b)190*344a7f5eSAndroid Build Coastguard Worker _mm_cmpge_pd(__m128d __a, __m128d __b)
191*344a7f5eSAndroid Build Coastguard Worker {
192*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmplepd((__v2df)__b, (__v2df)__a);
193*344a7f5eSAndroid Build Coastguard Worker }
194*344a7f5eSAndroid Build Coastguard Worker
195*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpord_pd(__m128d __a,__m128d __b)196*344a7f5eSAndroid Build Coastguard Worker _mm_cmpord_pd(__m128d __a, __m128d __b)
197*344a7f5eSAndroid Build Coastguard Worker {
198*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpordpd((__v2df)__a, (__v2df)__b);
199*344a7f5eSAndroid Build Coastguard Worker }
200*344a7f5eSAndroid Build Coastguard Worker
201*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpunord_pd(__m128d __a,__m128d __b)202*344a7f5eSAndroid Build Coastguard Worker _mm_cmpunord_pd(__m128d __a, __m128d __b)
203*344a7f5eSAndroid Build Coastguard Worker {
204*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpunordpd((__v2df)__a, (__v2df)__b);
205*344a7f5eSAndroid Build Coastguard Worker }
206*344a7f5eSAndroid Build Coastguard Worker
207*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpneq_pd(__m128d __a,__m128d __b)208*344a7f5eSAndroid Build Coastguard Worker _mm_cmpneq_pd(__m128d __a, __m128d __b)
209*344a7f5eSAndroid Build Coastguard Worker {
210*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpneqpd((__v2df)__a, (__v2df)__b);
211*344a7f5eSAndroid Build Coastguard Worker }
212*344a7f5eSAndroid Build Coastguard Worker
213*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpnlt_pd(__m128d __a,__m128d __b)214*344a7f5eSAndroid Build Coastguard Worker _mm_cmpnlt_pd(__m128d __a, __m128d __b)
215*344a7f5eSAndroid Build Coastguard Worker {
216*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnltpd((__v2df)__a, (__v2df)__b);
217*344a7f5eSAndroid Build Coastguard Worker }
218*344a7f5eSAndroid Build Coastguard Worker
219*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpnle_pd(__m128d __a,__m128d __b)220*344a7f5eSAndroid Build Coastguard Worker _mm_cmpnle_pd(__m128d __a, __m128d __b)
221*344a7f5eSAndroid Build Coastguard Worker {
222*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnlepd((__v2df)__a, (__v2df)__b);
223*344a7f5eSAndroid Build Coastguard Worker }
224*344a7f5eSAndroid Build Coastguard Worker
225*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpngt_pd(__m128d __a,__m128d __b)226*344a7f5eSAndroid Build Coastguard Worker _mm_cmpngt_pd(__m128d __a, __m128d __b)
227*344a7f5eSAndroid Build Coastguard Worker {
228*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnltpd((__v2df)__b, (__v2df)__a);
229*344a7f5eSAndroid Build Coastguard Worker }
230*344a7f5eSAndroid Build Coastguard Worker
231*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpnge_pd(__m128d __a,__m128d __b)232*344a7f5eSAndroid Build Coastguard Worker _mm_cmpnge_pd(__m128d __a, __m128d __b)
233*344a7f5eSAndroid Build Coastguard Worker {
234*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnlepd((__v2df)__b, (__v2df)__a);
235*344a7f5eSAndroid Build Coastguard Worker }
236*344a7f5eSAndroid Build Coastguard Worker
237*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpeq_sd(__m128d __a,__m128d __b)238*344a7f5eSAndroid Build Coastguard Worker _mm_cmpeq_sd(__m128d __a, __m128d __b)
239*344a7f5eSAndroid Build Coastguard Worker {
240*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpeqsd((__v2df)__a, (__v2df)__b);
241*344a7f5eSAndroid Build Coastguard Worker }
242*344a7f5eSAndroid Build Coastguard Worker
243*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmplt_sd(__m128d __a,__m128d __b)244*344a7f5eSAndroid Build Coastguard Worker _mm_cmplt_sd(__m128d __a, __m128d __b)
245*344a7f5eSAndroid Build Coastguard Worker {
246*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpltsd((__v2df)__a, (__v2df)__b);
247*344a7f5eSAndroid Build Coastguard Worker }
248*344a7f5eSAndroid Build Coastguard Worker
249*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmple_sd(__m128d __a,__m128d __b)250*344a7f5eSAndroid Build Coastguard Worker _mm_cmple_sd(__m128d __a, __m128d __b)
251*344a7f5eSAndroid Build Coastguard Worker {
252*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmplesd((__v2df)__a, (__v2df)__b);
253*344a7f5eSAndroid Build Coastguard Worker }
254*344a7f5eSAndroid Build Coastguard Worker
255*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpgt_sd(__m128d __a,__m128d __b)256*344a7f5eSAndroid Build Coastguard Worker _mm_cmpgt_sd(__m128d __a, __m128d __b)
257*344a7f5eSAndroid Build Coastguard Worker {
258*344a7f5eSAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmpltsd((__v2df)__b, (__v2df)__a);
259*344a7f5eSAndroid Build Coastguard Worker return (__m128d) { __c[0], __a[1] };
260*344a7f5eSAndroid Build Coastguard Worker }
261*344a7f5eSAndroid Build Coastguard Worker
262*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpge_sd(__m128d __a,__m128d __b)263*344a7f5eSAndroid Build Coastguard Worker _mm_cmpge_sd(__m128d __a, __m128d __b)
264*344a7f5eSAndroid Build Coastguard Worker {
265*344a7f5eSAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmplesd((__v2df)__b, (__v2df)__a);
266*344a7f5eSAndroid Build Coastguard Worker return (__m128d) { __c[0], __a[1] };
267*344a7f5eSAndroid Build Coastguard Worker }
268*344a7f5eSAndroid Build Coastguard Worker
269*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpord_sd(__m128d __a,__m128d __b)270*344a7f5eSAndroid Build Coastguard Worker _mm_cmpord_sd(__m128d __a, __m128d __b)
271*344a7f5eSAndroid Build Coastguard Worker {
272*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpordsd((__v2df)__a, (__v2df)__b);
273*344a7f5eSAndroid Build Coastguard Worker }
274*344a7f5eSAndroid Build Coastguard Worker
275*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpunord_sd(__m128d __a,__m128d __b)276*344a7f5eSAndroid Build Coastguard Worker _mm_cmpunord_sd(__m128d __a, __m128d __b)
277*344a7f5eSAndroid Build Coastguard Worker {
278*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpunordsd((__v2df)__a, (__v2df)__b);
279*344a7f5eSAndroid Build Coastguard Worker }
280*344a7f5eSAndroid Build Coastguard Worker
281*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpneq_sd(__m128d __a,__m128d __b)282*344a7f5eSAndroid Build Coastguard Worker _mm_cmpneq_sd(__m128d __a, __m128d __b)
283*344a7f5eSAndroid Build Coastguard Worker {
284*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpneqsd((__v2df)__a, (__v2df)__b);
285*344a7f5eSAndroid Build Coastguard Worker }
286*344a7f5eSAndroid Build Coastguard Worker
287*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpnlt_sd(__m128d __a,__m128d __b)288*344a7f5eSAndroid Build Coastguard Worker _mm_cmpnlt_sd(__m128d __a, __m128d __b)
289*344a7f5eSAndroid Build Coastguard Worker {
290*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnltsd((__v2df)__a, (__v2df)__b);
291*344a7f5eSAndroid Build Coastguard Worker }
292*344a7f5eSAndroid Build Coastguard Worker
293*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpnle_sd(__m128d __a,__m128d __b)294*344a7f5eSAndroid Build Coastguard Worker _mm_cmpnle_sd(__m128d __a, __m128d __b)
295*344a7f5eSAndroid Build Coastguard Worker {
296*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnlesd((__v2df)__a, (__v2df)__b);
297*344a7f5eSAndroid Build Coastguard Worker }
298*344a7f5eSAndroid Build Coastguard Worker
299*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpngt_sd(__m128d __a,__m128d __b)300*344a7f5eSAndroid Build Coastguard Worker _mm_cmpngt_sd(__m128d __a, __m128d __b)
301*344a7f5eSAndroid Build Coastguard Worker {
302*344a7f5eSAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmpnltsd((__v2df)__b, (__v2df)__a);
303*344a7f5eSAndroid Build Coastguard Worker return (__m128d) { __c[0], __a[1] };
304*344a7f5eSAndroid Build Coastguard Worker }
305*344a7f5eSAndroid Build Coastguard Worker
306*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cmpnge_sd(__m128d __a,__m128d __b)307*344a7f5eSAndroid Build Coastguard Worker _mm_cmpnge_sd(__m128d __a, __m128d __b)
308*344a7f5eSAndroid Build Coastguard Worker {
309*344a7f5eSAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmpnlesd((__v2df)__b, (__v2df)__a);
310*344a7f5eSAndroid Build Coastguard Worker return (__m128d) { __c[0], __a[1] };
311*344a7f5eSAndroid Build Coastguard Worker }
312*344a7f5eSAndroid Build Coastguard Worker
313*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_comieq_sd(__m128d __a,__m128d __b)314*344a7f5eSAndroid Build Coastguard Worker _mm_comieq_sd(__m128d __a, __m128d __b)
315*344a7f5eSAndroid Build Coastguard Worker {
316*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_comisdeq((__v2df)__a, (__v2df)__b);
317*344a7f5eSAndroid Build Coastguard Worker }
318*344a7f5eSAndroid Build Coastguard Worker
319*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_comilt_sd(__m128d __a,__m128d __b)320*344a7f5eSAndroid Build Coastguard Worker _mm_comilt_sd(__m128d __a, __m128d __b)
321*344a7f5eSAndroid Build Coastguard Worker {
322*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_comisdlt((__v2df)__a, (__v2df)__b);
323*344a7f5eSAndroid Build Coastguard Worker }
324*344a7f5eSAndroid Build Coastguard Worker
325*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_comile_sd(__m128d __a,__m128d __b)326*344a7f5eSAndroid Build Coastguard Worker _mm_comile_sd(__m128d __a, __m128d __b)
327*344a7f5eSAndroid Build Coastguard Worker {
328*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_comisdle((__v2df)__a, (__v2df)__b);
329*344a7f5eSAndroid Build Coastguard Worker }
330*344a7f5eSAndroid Build Coastguard Worker
331*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_comigt_sd(__m128d __a,__m128d __b)332*344a7f5eSAndroid Build Coastguard Worker _mm_comigt_sd(__m128d __a, __m128d __b)
333*344a7f5eSAndroid Build Coastguard Worker {
334*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_comisdgt((__v2df)__a, (__v2df)__b);
335*344a7f5eSAndroid Build Coastguard Worker }
336*344a7f5eSAndroid Build Coastguard Worker
337*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_comige_sd(__m128d __a,__m128d __b)338*344a7f5eSAndroid Build Coastguard Worker _mm_comige_sd(__m128d __a, __m128d __b)
339*344a7f5eSAndroid Build Coastguard Worker {
340*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_comisdge((__v2df)__a, (__v2df)__b);
341*344a7f5eSAndroid Build Coastguard Worker }
342*344a7f5eSAndroid Build Coastguard Worker
343*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_comineq_sd(__m128d __a,__m128d __b)344*344a7f5eSAndroid Build Coastguard Worker _mm_comineq_sd(__m128d __a, __m128d __b)
345*344a7f5eSAndroid Build Coastguard Worker {
346*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_comisdneq((__v2df)__a, (__v2df)__b);
347*344a7f5eSAndroid Build Coastguard Worker }
348*344a7f5eSAndroid Build Coastguard Worker
349*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_ucomieq_sd(__m128d __a,__m128d __b)350*344a7f5eSAndroid Build Coastguard Worker _mm_ucomieq_sd(__m128d __a, __m128d __b)
351*344a7f5eSAndroid Build Coastguard Worker {
352*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_ucomisdeq((__v2df)__a, (__v2df)__b);
353*344a7f5eSAndroid Build Coastguard Worker }
354*344a7f5eSAndroid Build Coastguard Worker
355*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_ucomilt_sd(__m128d __a,__m128d __b)356*344a7f5eSAndroid Build Coastguard Worker _mm_ucomilt_sd(__m128d __a, __m128d __b)
357*344a7f5eSAndroid Build Coastguard Worker {
358*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_ucomisdlt((__v2df)__a, (__v2df)__b);
359*344a7f5eSAndroid Build Coastguard Worker }
360*344a7f5eSAndroid Build Coastguard Worker
361*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_ucomile_sd(__m128d __a,__m128d __b)362*344a7f5eSAndroid Build Coastguard Worker _mm_ucomile_sd(__m128d __a, __m128d __b)
363*344a7f5eSAndroid Build Coastguard Worker {
364*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_ucomisdle((__v2df)__a, (__v2df)__b);
365*344a7f5eSAndroid Build Coastguard Worker }
366*344a7f5eSAndroid Build Coastguard Worker
367*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_ucomigt_sd(__m128d __a,__m128d __b)368*344a7f5eSAndroid Build Coastguard Worker _mm_ucomigt_sd(__m128d __a, __m128d __b)
369*344a7f5eSAndroid Build Coastguard Worker {
370*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_ucomisdgt((__v2df)__a, (__v2df)__b);
371*344a7f5eSAndroid Build Coastguard Worker }
372*344a7f5eSAndroid Build Coastguard Worker
373*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_ucomige_sd(__m128d __a,__m128d __b)374*344a7f5eSAndroid Build Coastguard Worker _mm_ucomige_sd(__m128d __a, __m128d __b)
375*344a7f5eSAndroid Build Coastguard Worker {
376*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_ucomisdge((__v2df)__a, (__v2df)__b);
377*344a7f5eSAndroid Build Coastguard Worker }
378*344a7f5eSAndroid Build Coastguard Worker
379*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_ucomineq_sd(__m128d __a,__m128d __b)380*344a7f5eSAndroid Build Coastguard Worker _mm_ucomineq_sd(__m128d __a, __m128d __b)
381*344a7f5eSAndroid Build Coastguard Worker {
382*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_ucomisdneq((__v2df)__a, (__v2df)__b);
383*344a7f5eSAndroid Build Coastguard Worker }
384*344a7f5eSAndroid Build Coastguard Worker
385*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_cvtpd_ps(__m128d __a)386*344a7f5eSAndroid Build Coastguard Worker _mm_cvtpd_ps(__m128d __a)
387*344a7f5eSAndroid Build Coastguard Worker {
388*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_cvtpd2ps((__v2df)__a);
389*344a7f5eSAndroid Build Coastguard Worker }
390*344a7f5eSAndroid Build Coastguard Worker
391*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cvtps_pd(__m128 __a)392*344a7f5eSAndroid Build Coastguard Worker _mm_cvtps_pd(__m128 __a)
393*344a7f5eSAndroid Build Coastguard Worker {
394*344a7f5eSAndroid Build Coastguard Worker return (__m128d) __builtin_convertvector(
395*344a7f5eSAndroid Build Coastguard Worker __builtin_shufflevector((__v4sf)__a, (__v4sf)__a, 0, 1), __v2df);
396*344a7f5eSAndroid Build Coastguard Worker }
397*344a7f5eSAndroid Build Coastguard Worker
398*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cvtepi32_pd(__m128i __a)399*344a7f5eSAndroid Build Coastguard Worker _mm_cvtepi32_pd(__m128i __a)
400*344a7f5eSAndroid Build Coastguard Worker {
401*344a7f5eSAndroid Build Coastguard Worker return (__m128d) __builtin_convertvector(
402*344a7f5eSAndroid Build Coastguard Worker __builtin_shufflevector((__v4si)__a, (__v4si)__a, 0, 1), __v2df);
403*344a7f5eSAndroid Build Coastguard Worker }
404*344a7f5eSAndroid Build Coastguard Worker
405*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvtpd_epi32(__m128d __a)406*344a7f5eSAndroid Build Coastguard Worker _mm_cvtpd_epi32(__m128d __a)
407*344a7f5eSAndroid Build Coastguard Worker {
408*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_cvtpd2dq((__v2df)__a);
409*344a7f5eSAndroid Build Coastguard Worker }
410*344a7f5eSAndroid Build Coastguard Worker
411*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_cvtsd_si32(__m128d __a)412*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsd_si32(__m128d __a)
413*344a7f5eSAndroid Build Coastguard Worker {
414*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_cvtsd2si((__v2df)__a);
415*344a7f5eSAndroid Build Coastguard Worker }
416*344a7f5eSAndroid Build Coastguard Worker
417*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_cvtsd_ss(__m128 __a,__m128d __b)418*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsd_ss(__m128 __a, __m128d __b)
419*344a7f5eSAndroid Build Coastguard Worker {
420*344a7f5eSAndroid Build Coastguard Worker __a[0] = __b[0];
421*344a7f5eSAndroid Build Coastguard Worker return __a;
422*344a7f5eSAndroid Build Coastguard Worker }
423*344a7f5eSAndroid Build Coastguard Worker
424*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cvtsi32_sd(__m128d __a,int __b)425*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsi32_sd(__m128d __a, int __b)
426*344a7f5eSAndroid Build Coastguard Worker {
427*344a7f5eSAndroid Build Coastguard Worker __a[0] = __b;
428*344a7f5eSAndroid Build Coastguard Worker return __a;
429*344a7f5eSAndroid Build Coastguard Worker }
430*344a7f5eSAndroid Build Coastguard Worker
431*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cvtss_sd(__m128d __a,__m128 __b)432*344a7f5eSAndroid Build Coastguard Worker _mm_cvtss_sd(__m128d __a, __m128 __b)
433*344a7f5eSAndroid Build Coastguard Worker {
434*344a7f5eSAndroid Build Coastguard Worker __a[0] = __b[0];
435*344a7f5eSAndroid Build Coastguard Worker return __a;
436*344a7f5eSAndroid Build Coastguard Worker }
437*344a7f5eSAndroid Build Coastguard Worker
438*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvttpd_epi32(__m128d __a)439*344a7f5eSAndroid Build Coastguard Worker _mm_cvttpd_epi32(__m128d __a)
440*344a7f5eSAndroid Build Coastguard Worker {
441*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_cvttpd2dq((__v2df)__a);
442*344a7f5eSAndroid Build Coastguard Worker }
443*344a7f5eSAndroid Build Coastguard Worker
444*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_cvttsd_si32(__m128d __a)445*344a7f5eSAndroid Build Coastguard Worker _mm_cvttsd_si32(__m128d __a)
446*344a7f5eSAndroid Build Coastguard Worker {
447*344a7f5eSAndroid Build Coastguard Worker return __a[0];
448*344a7f5eSAndroid Build Coastguard Worker }
449*344a7f5eSAndroid Build Coastguard Worker
450*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_mm_cvtpd_pi32(__m128d __a)451*344a7f5eSAndroid Build Coastguard Worker _mm_cvtpd_pi32(__m128d __a)
452*344a7f5eSAndroid Build Coastguard Worker {
453*344a7f5eSAndroid Build Coastguard Worker return (__m64)__builtin_ia32_cvtpd2pi((__v2df)__a);
454*344a7f5eSAndroid Build Coastguard Worker }
455*344a7f5eSAndroid Build Coastguard Worker
456*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_mm_cvttpd_pi32(__m128d __a)457*344a7f5eSAndroid Build Coastguard Worker _mm_cvttpd_pi32(__m128d __a)
458*344a7f5eSAndroid Build Coastguard Worker {
459*344a7f5eSAndroid Build Coastguard Worker return (__m64)__builtin_ia32_cvttpd2pi((__v2df)__a);
460*344a7f5eSAndroid Build Coastguard Worker }
461*344a7f5eSAndroid Build Coastguard Worker
462*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cvtpi32_pd(__m64 __a)463*344a7f5eSAndroid Build Coastguard Worker _mm_cvtpi32_pd(__m64 __a)
464*344a7f5eSAndroid Build Coastguard Worker {
465*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_cvtpi2pd((__v2si)__a);
466*344a7f5eSAndroid Build Coastguard Worker }
467*344a7f5eSAndroid Build Coastguard Worker
468*344a7f5eSAndroid Build Coastguard Worker static __inline__ double __DEFAULT_FN_ATTRS
_mm_cvtsd_f64(__m128d __a)469*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsd_f64(__m128d __a)
470*344a7f5eSAndroid Build Coastguard Worker {
471*344a7f5eSAndroid Build Coastguard Worker return __a[0];
472*344a7f5eSAndroid Build Coastguard Worker }
473*344a7f5eSAndroid Build Coastguard Worker
474*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_load_pd(double const * __dp)475*344a7f5eSAndroid Build Coastguard Worker _mm_load_pd(double const *__dp)
476*344a7f5eSAndroid Build Coastguard Worker {
477*344a7f5eSAndroid Build Coastguard Worker return *(__m128d*)__dp;
478*344a7f5eSAndroid Build Coastguard Worker }
479*344a7f5eSAndroid Build Coastguard Worker
480*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_load1_pd(double const * __dp)481*344a7f5eSAndroid Build Coastguard Worker _mm_load1_pd(double const *__dp)
482*344a7f5eSAndroid Build Coastguard Worker {
483*344a7f5eSAndroid Build Coastguard Worker struct __mm_load1_pd_struct {
484*344a7f5eSAndroid Build Coastguard Worker double __u;
485*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
486*344a7f5eSAndroid Build Coastguard Worker double __u = ((struct __mm_load1_pd_struct*)__dp)->__u;
487*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __u, __u };
488*344a7f5eSAndroid Build Coastguard Worker }
489*344a7f5eSAndroid Build Coastguard Worker
490*344a7f5eSAndroid Build Coastguard Worker #define _mm_load_pd1(dp) _mm_load1_pd(dp)
491*344a7f5eSAndroid Build Coastguard Worker
492*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_loadr_pd(double const * __dp)493*344a7f5eSAndroid Build Coastguard Worker _mm_loadr_pd(double const *__dp)
494*344a7f5eSAndroid Build Coastguard Worker {
495*344a7f5eSAndroid Build Coastguard Worker __m128d __u = *(__m128d*)__dp;
496*344a7f5eSAndroid Build Coastguard Worker return __builtin_shufflevector((__v2df)__u, (__v2df)__u, 1, 0);
497*344a7f5eSAndroid Build Coastguard Worker }
498*344a7f5eSAndroid Build Coastguard Worker
499*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_loadu_pd(double const * __dp)500*344a7f5eSAndroid Build Coastguard Worker _mm_loadu_pd(double const *__dp)
501*344a7f5eSAndroid Build Coastguard Worker {
502*344a7f5eSAndroid Build Coastguard Worker struct __loadu_pd {
503*344a7f5eSAndroid Build Coastguard Worker __m128d __v;
504*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
505*344a7f5eSAndroid Build Coastguard Worker return ((struct __loadu_pd*)__dp)->__v;
506*344a7f5eSAndroid Build Coastguard Worker }
507*344a7f5eSAndroid Build Coastguard Worker
508*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_loadu_si64(void const * __a)509*344a7f5eSAndroid Build Coastguard Worker _mm_loadu_si64(void const *__a)
510*344a7f5eSAndroid Build Coastguard Worker {
511*344a7f5eSAndroid Build Coastguard Worker struct __loadu_si64 {
512*344a7f5eSAndroid Build Coastguard Worker long long __v;
513*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
514*344a7f5eSAndroid Build Coastguard Worker long long __u = ((struct __loadu_si64*)__a)->__v;
515*344a7f5eSAndroid Build Coastguard Worker return (__m128i){__u, 0L};
516*344a7f5eSAndroid Build Coastguard Worker }
517*344a7f5eSAndroid Build Coastguard Worker
518*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_load_sd(double const * __dp)519*344a7f5eSAndroid Build Coastguard Worker _mm_load_sd(double const *__dp)
520*344a7f5eSAndroid Build Coastguard Worker {
521*344a7f5eSAndroid Build Coastguard Worker struct __mm_load_sd_struct {
522*344a7f5eSAndroid Build Coastguard Worker double __u;
523*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
524*344a7f5eSAndroid Build Coastguard Worker double __u = ((struct __mm_load_sd_struct*)__dp)->__u;
525*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __u, 0 };
526*344a7f5eSAndroid Build Coastguard Worker }
527*344a7f5eSAndroid Build Coastguard Worker
528*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_loadh_pd(__m128d __a,double const * __dp)529*344a7f5eSAndroid Build Coastguard Worker _mm_loadh_pd(__m128d __a, double const *__dp)
530*344a7f5eSAndroid Build Coastguard Worker {
531*344a7f5eSAndroid Build Coastguard Worker struct __mm_loadh_pd_struct {
532*344a7f5eSAndroid Build Coastguard Worker double __u;
533*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
534*344a7f5eSAndroid Build Coastguard Worker double __u = ((struct __mm_loadh_pd_struct*)__dp)->__u;
535*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __a[0], __u };
536*344a7f5eSAndroid Build Coastguard Worker }
537*344a7f5eSAndroid Build Coastguard Worker
538*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_loadl_pd(__m128d __a,double const * __dp)539*344a7f5eSAndroid Build Coastguard Worker _mm_loadl_pd(__m128d __a, double const *__dp)
540*344a7f5eSAndroid Build Coastguard Worker {
541*344a7f5eSAndroid Build Coastguard Worker struct __mm_loadl_pd_struct {
542*344a7f5eSAndroid Build Coastguard Worker double __u;
543*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
544*344a7f5eSAndroid Build Coastguard Worker double __u = ((struct __mm_loadl_pd_struct*)__dp)->__u;
545*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __u, __a[1] };
546*344a7f5eSAndroid Build Coastguard Worker }
547*344a7f5eSAndroid Build Coastguard Worker
548*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_undefined_pd(void)549*344a7f5eSAndroid Build Coastguard Worker _mm_undefined_pd(void)
550*344a7f5eSAndroid Build Coastguard Worker {
551*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_undef128();
552*344a7f5eSAndroid Build Coastguard Worker }
553*344a7f5eSAndroid Build Coastguard Worker
554*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_set_sd(double __w)555*344a7f5eSAndroid Build Coastguard Worker _mm_set_sd(double __w)
556*344a7f5eSAndroid Build Coastguard Worker {
557*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __w, 0 };
558*344a7f5eSAndroid Build Coastguard Worker }
559*344a7f5eSAndroid Build Coastguard Worker
560*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_set1_pd(double __w)561*344a7f5eSAndroid Build Coastguard Worker _mm_set1_pd(double __w)
562*344a7f5eSAndroid Build Coastguard Worker {
563*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __w, __w };
564*344a7f5eSAndroid Build Coastguard Worker }
565*344a7f5eSAndroid Build Coastguard Worker
566*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_set_pd(double __w,double __x)567*344a7f5eSAndroid Build Coastguard Worker _mm_set_pd(double __w, double __x)
568*344a7f5eSAndroid Build Coastguard Worker {
569*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __x, __w };
570*344a7f5eSAndroid Build Coastguard Worker }
571*344a7f5eSAndroid Build Coastguard Worker
572*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_setr_pd(double __w,double __x)573*344a7f5eSAndroid Build Coastguard Worker _mm_setr_pd(double __w, double __x)
574*344a7f5eSAndroid Build Coastguard Worker {
575*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __w, __x };
576*344a7f5eSAndroid Build Coastguard Worker }
577*344a7f5eSAndroid Build Coastguard Worker
578*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_setzero_pd(void)579*344a7f5eSAndroid Build Coastguard Worker _mm_setzero_pd(void)
580*344a7f5eSAndroid Build Coastguard Worker {
581*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ 0, 0 };
582*344a7f5eSAndroid Build Coastguard Worker }
583*344a7f5eSAndroid Build Coastguard Worker
584*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_move_sd(__m128d __a,__m128d __b)585*344a7f5eSAndroid Build Coastguard Worker _mm_move_sd(__m128d __a, __m128d __b)
586*344a7f5eSAndroid Build Coastguard Worker {
587*344a7f5eSAndroid Build Coastguard Worker return (__m128d){ __b[0], __a[1] };
588*344a7f5eSAndroid Build Coastguard Worker }
589*344a7f5eSAndroid Build Coastguard Worker
590*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_store_sd(double * __dp,__m128d __a)591*344a7f5eSAndroid Build Coastguard Worker _mm_store_sd(double *__dp, __m128d __a)
592*344a7f5eSAndroid Build Coastguard Worker {
593*344a7f5eSAndroid Build Coastguard Worker struct __mm_store_sd_struct {
594*344a7f5eSAndroid Build Coastguard Worker double __u;
595*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
596*344a7f5eSAndroid Build Coastguard Worker ((struct __mm_store_sd_struct*)__dp)->__u = __a[0];
597*344a7f5eSAndroid Build Coastguard Worker }
598*344a7f5eSAndroid Build Coastguard Worker
599*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_store_pd(double * __dp,__m128d __a)600*344a7f5eSAndroid Build Coastguard Worker _mm_store_pd(double *__dp, __m128d __a)
601*344a7f5eSAndroid Build Coastguard Worker {
602*344a7f5eSAndroid Build Coastguard Worker *(__m128d*)__dp = __a;
603*344a7f5eSAndroid Build Coastguard Worker }
604*344a7f5eSAndroid Build Coastguard Worker
605*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_store1_pd(double * __dp,__m128d __a)606*344a7f5eSAndroid Build Coastguard Worker _mm_store1_pd(double *__dp, __m128d __a)
607*344a7f5eSAndroid Build Coastguard Worker {
608*344a7f5eSAndroid Build Coastguard Worker __a = __builtin_shufflevector((__v2df)__a, (__v2df)__a, 0, 0);
609*344a7f5eSAndroid Build Coastguard Worker _mm_store_pd(__dp, __a);
610*344a7f5eSAndroid Build Coastguard Worker }
611*344a7f5eSAndroid Build Coastguard Worker
612*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_store_pd1(double * __dp,__m128d __a)613*344a7f5eSAndroid Build Coastguard Worker _mm_store_pd1(double *__dp, __m128d __a)
614*344a7f5eSAndroid Build Coastguard Worker {
615*344a7f5eSAndroid Build Coastguard Worker return _mm_store1_pd(__dp, __a);
616*344a7f5eSAndroid Build Coastguard Worker }
617*344a7f5eSAndroid Build Coastguard Worker
618*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_storeu_pd(double * __dp,__m128d __a)619*344a7f5eSAndroid Build Coastguard Worker _mm_storeu_pd(double *__dp, __m128d __a)
620*344a7f5eSAndroid Build Coastguard Worker {
621*344a7f5eSAndroid Build Coastguard Worker struct __storeu_pd {
622*344a7f5eSAndroid Build Coastguard Worker __m128d __v;
623*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
624*344a7f5eSAndroid Build Coastguard Worker ((struct __storeu_pd*)__dp)->__v = __a;
625*344a7f5eSAndroid Build Coastguard Worker }
626*344a7f5eSAndroid Build Coastguard Worker
627*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_storer_pd(double * __dp,__m128d __a)628*344a7f5eSAndroid Build Coastguard Worker _mm_storer_pd(double *__dp, __m128d __a)
629*344a7f5eSAndroid Build Coastguard Worker {
630*344a7f5eSAndroid Build Coastguard Worker __a = __builtin_shufflevector((__v2df)__a, (__v2df)__a, 1, 0);
631*344a7f5eSAndroid Build Coastguard Worker *(__m128d *)__dp = __a;
632*344a7f5eSAndroid Build Coastguard Worker }
633*344a7f5eSAndroid Build Coastguard Worker
634*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_storeh_pd(double * __dp,__m128d __a)635*344a7f5eSAndroid Build Coastguard Worker _mm_storeh_pd(double *__dp, __m128d __a)
636*344a7f5eSAndroid Build Coastguard Worker {
637*344a7f5eSAndroid Build Coastguard Worker struct __mm_storeh_pd_struct {
638*344a7f5eSAndroid Build Coastguard Worker double __u;
639*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
640*344a7f5eSAndroid Build Coastguard Worker ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[1];
641*344a7f5eSAndroid Build Coastguard Worker }
642*344a7f5eSAndroid Build Coastguard Worker
643*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_storel_pd(double * __dp,__m128d __a)644*344a7f5eSAndroid Build Coastguard Worker _mm_storel_pd(double *__dp, __m128d __a)
645*344a7f5eSAndroid Build Coastguard Worker {
646*344a7f5eSAndroid Build Coastguard Worker struct __mm_storeh_pd_struct {
647*344a7f5eSAndroid Build Coastguard Worker double __u;
648*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
649*344a7f5eSAndroid Build Coastguard Worker ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[0];
650*344a7f5eSAndroid Build Coastguard Worker }
651*344a7f5eSAndroid Build Coastguard Worker
652*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_add_epi8(__m128i __a,__m128i __b)653*344a7f5eSAndroid Build Coastguard Worker _mm_add_epi8(__m128i __a, __m128i __b)
654*344a7f5eSAndroid Build Coastguard Worker {
655*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v16qu)__a + (__v16qu)__b);
656*344a7f5eSAndroid Build Coastguard Worker }
657*344a7f5eSAndroid Build Coastguard Worker
658*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_add_epi16(__m128i __a,__m128i __b)659*344a7f5eSAndroid Build Coastguard Worker _mm_add_epi16(__m128i __a, __m128i __b)
660*344a7f5eSAndroid Build Coastguard Worker {
661*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v8hu)__a + (__v8hu)__b);
662*344a7f5eSAndroid Build Coastguard Worker }
663*344a7f5eSAndroid Build Coastguard Worker
664*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_add_epi32(__m128i __a,__m128i __b)665*344a7f5eSAndroid Build Coastguard Worker _mm_add_epi32(__m128i __a, __m128i __b)
666*344a7f5eSAndroid Build Coastguard Worker {
667*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v4su)__a + (__v4su)__b);
668*344a7f5eSAndroid Build Coastguard Worker }
669*344a7f5eSAndroid Build Coastguard Worker
670*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_mm_add_si64(__m64 __a,__m64 __b)671*344a7f5eSAndroid Build Coastguard Worker _mm_add_si64(__m64 __a, __m64 __b)
672*344a7f5eSAndroid Build Coastguard Worker {
673*344a7f5eSAndroid Build Coastguard Worker return (__m64)__builtin_ia32_paddq((__v1di)__a, (__v1di)__b);
674*344a7f5eSAndroid Build Coastguard Worker }
675*344a7f5eSAndroid Build Coastguard Worker
676*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_add_epi64(__m128i __a,__m128i __b)677*344a7f5eSAndroid Build Coastguard Worker _mm_add_epi64(__m128i __a, __m128i __b)
678*344a7f5eSAndroid Build Coastguard Worker {
679*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v2du)__a + (__v2du)__b);
680*344a7f5eSAndroid Build Coastguard Worker }
681*344a7f5eSAndroid Build Coastguard Worker
682*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_adds_epi8(__m128i __a,__m128i __b)683*344a7f5eSAndroid Build Coastguard Worker _mm_adds_epi8(__m128i __a, __m128i __b)
684*344a7f5eSAndroid Build Coastguard Worker {
685*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_paddsb128((__v16qi)__a, (__v16qi)__b);
686*344a7f5eSAndroid Build Coastguard Worker }
687*344a7f5eSAndroid Build Coastguard Worker
688*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_adds_epi16(__m128i __a,__m128i __b)689*344a7f5eSAndroid Build Coastguard Worker _mm_adds_epi16(__m128i __a, __m128i __b)
690*344a7f5eSAndroid Build Coastguard Worker {
691*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_paddsw128((__v8hi)__a, (__v8hi)__b);
692*344a7f5eSAndroid Build Coastguard Worker }
693*344a7f5eSAndroid Build Coastguard Worker
694*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_adds_epu8(__m128i __a,__m128i __b)695*344a7f5eSAndroid Build Coastguard Worker _mm_adds_epu8(__m128i __a, __m128i __b)
696*344a7f5eSAndroid Build Coastguard Worker {
697*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_paddusb128((__v16qi)__a, (__v16qi)__b);
698*344a7f5eSAndroid Build Coastguard Worker }
699*344a7f5eSAndroid Build Coastguard Worker
700*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_adds_epu16(__m128i __a,__m128i __b)701*344a7f5eSAndroid Build Coastguard Worker _mm_adds_epu16(__m128i __a, __m128i __b)
702*344a7f5eSAndroid Build Coastguard Worker {
703*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_paddusw128((__v8hi)__a, (__v8hi)__b);
704*344a7f5eSAndroid Build Coastguard Worker }
705*344a7f5eSAndroid Build Coastguard Worker
706*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_avg_epu8(__m128i __a,__m128i __b)707*344a7f5eSAndroid Build Coastguard Worker _mm_avg_epu8(__m128i __a, __m128i __b)
708*344a7f5eSAndroid Build Coastguard Worker {
709*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pavgb128((__v16qi)__a, (__v16qi)__b);
710*344a7f5eSAndroid Build Coastguard Worker }
711*344a7f5eSAndroid Build Coastguard Worker
712*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_avg_epu16(__m128i __a,__m128i __b)713*344a7f5eSAndroid Build Coastguard Worker _mm_avg_epu16(__m128i __a, __m128i __b)
714*344a7f5eSAndroid Build Coastguard Worker {
715*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pavgw128((__v8hi)__a, (__v8hi)__b);
716*344a7f5eSAndroid Build Coastguard Worker }
717*344a7f5eSAndroid Build Coastguard Worker
718*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_madd_epi16(__m128i __a,__m128i __b)719*344a7f5eSAndroid Build Coastguard Worker _mm_madd_epi16(__m128i __a, __m128i __b)
720*344a7f5eSAndroid Build Coastguard Worker {
721*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)__a, (__v8hi)__b);
722*344a7f5eSAndroid Build Coastguard Worker }
723*344a7f5eSAndroid Build Coastguard Worker
724*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_max_epi16(__m128i __a,__m128i __b)725*344a7f5eSAndroid Build Coastguard Worker _mm_max_epi16(__m128i __a, __m128i __b)
726*344a7f5eSAndroid Build Coastguard Worker {
727*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)__a, (__v8hi)__b);
728*344a7f5eSAndroid Build Coastguard Worker }
729*344a7f5eSAndroid Build Coastguard Worker
730*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_max_epu8(__m128i __a,__m128i __b)731*344a7f5eSAndroid Build Coastguard Worker _mm_max_epu8(__m128i __a, __m128i __b)
732*344a7f5eSAndroid Build Coastguard Worker {
733*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmaxub128((__v16qi)__a, (__v16qi)__b);
734*344a7f5eSAndroid Build Coastguard Worker }
735*344a7f5eSAndroid Build Coastguard Worker
736*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_min_epi16(__m128i __a,__m128i __b)737*344a7f5eSAndroid Build Coastguard Worker _mm_min_epi16(__m128i __a, __m128i __b)
738*344a7f5eSAndroid Build Coastguard Worker {
739*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pminsw128((__v8hi)__a, (__v8hi)__b);
740*344a7f5eSAndroid Build Coastguard Worker }
741*344a7f5eSAndroid Build Coastguard Worker
742*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_min_epu8(__m128i __a,__m128i __b)743*344a7f5eSAndroid Build Coastguard Worker _mm_min_epu8(__m128i __a, __m128i __b)
744*344a7f5eSAndroid Build Coastguard Worker {
745*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pminub128((__v16qi)__a, (__v16qi)__b);
746*344a7f5eSAndroid Build Coastguard Worker }
747*344a7f5eSAndroid Build Coastguard Worker
748*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_mulhi_epi16(__m128i __a,__m128i __b)749*344a7f5eSAndroid Build Coastguard Worker _mm_mulhi_epi16(__m128i __a, __m128i __b)
750*344a7f5eSAndroid Build Coastguard Worker {
751*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmulhw128((__v8hi)__a, (__v8hi)__b);
752*344a7f5eSAndroid Build Coastguard Worker }
753*344a7f5eSAndroid Build Coastguard Worker
754*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_mulhi_epu16(__m128i __a,__m128i __b)755*344a7f5eSAndroid Build Coastguard Worker _mm_mulhi_epu16(__m128i __a, __m128i __b)
756*344a7f5eSAndroid Build Coastguard Worker {
757*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)__a, (__v8hi)__b);
758*344a7f5eSAndroid Build Coastguard Worker }
759*344a7f5eSAndroid Build Coastguard Worker
760*344a7f5eSAndroid Build Coastguard Worker /// \brief Multiplies the corresponding elements of two [8 x short] vectors and
761*344a7f5eSAndroid Build Coastguard Worker /// returns a vector containing the low-order 16 bits of each 32-bit product
762*344a7f5eSAndroid Build Coastguard Worker /// in the corresponding element.
763*344a7f5eSAndroid Build Coastguard Worker ///
764*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
765*344a7f5eSAndroid Build Coastguard Worker ///
766*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPMULLW / PMULLW instruction.
767*344a7f5eSAndroid Build Coastguard Worker ///
768*344a7f5eSAndroid Build Coastguard Worker /// \param __a
769*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
770*344a7f5eSAndroid Build Coastguard Worker /// \param __b
771*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
772*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the products of both operands.
773*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_mullo_epi16(__m128i __a,__m128i __b)774*344a7f5eSAndroid Build Coastguard Worker _mm_mullo_epi16(__m128i __a, __m128i __b)
775*344a7f5eSAndroid Build Coastguard Worker {
776*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v8hu)__a * (__v8hu)__b);
777*344a7f5eSAndroid Build Coastguard Worker }
778*344a7f5eSAndroid Build Coastguard Worker
779*344a7f5eSAndroid Build Coastguard Worker /// \brief Multiplies 32-bit unsigned integer values contained in the lower bits
780*344a7f5eSAndroid Build Coastguard Worker /// of the two 64-bit integer vectors and returns the 64-bit unsigned
781*344a7f5eSAndroid Build Coastguard Worker /// product.
782*344a7f5eSAndroid Build Coastguard Worker ///
783*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
784*344a7f5eSAndroid Build Coastguard Worker ///
785*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c PMULUDQ instruction.
786*344a7f5eSAndroid Build Coastguard Worker ///
787*344a7f5eSAndroid Build Coastguard Worker /// \param __a
788*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer containing one of the source operands.
789*344a7f5eSAndroid Build Coastguard Worker /// \param __b
790*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer containing one of the source operands.
791*344a7f5eSAndroid Build Coastguard Worker /// \returns A 64-bit integer vector containing the product of both operands.
792*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_mm_mul_su32(__m64 __a,__m64 __b)793*344a7f5eSAndroid Build Coastguard Worker _mm_mul_su32(__m64 __a, __m64 __b)
794*344a7f5eSAndroid Build Coastguard Worker {
795*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_pmuludq((__v2si)__a, (__v2si)__b);
796*344a7f5eSAndroid Build Coastguard Worker }
797*344a7f5eSAndroid Build Coastguard Worker
798*344a7f5eSAndroid Build Coastguard Worker /// \brief Multiplies 32-bit unsigned integer values contained in the lower
799*344a7f5eSAndroid Build Coastguard Worker /// bits of the corresponding elements of two [2 x i64] vectors, and returns
800*344a7f5eSAndroid Build Coastguard Worker /// the 64-bit products in the corresponding elements of a [2 x i64] vector.
801*344a7f5eSAndroid Build Coastguard Worker ///
802*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
803*344a7f5eSAndroid Build Coastguard Worker ///
804*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPMULUDQ / PMULUDQ instruction.
805*344a7f5eSAndroid Build Coastguard Worker ///
806*344a7f5eSAndroid Build Coastguard Worker /// \param __a
807*344a7f5eSAndroid Build Coastguard Worker /// A [2 x i64] vector containing one of the source operands.
808*344a7f5eSAndroid Build Coastguard Worker /// \param __b
809*344a7f5eSAndroid Build Coastguard Worker /// A [2 x i64] vector containing one of the source operands.
810*344a7f5eSAndroid Build Coastguard Worker /// \returns A [2 x i64] vector containing the product of both operands.
811*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_mul_epu32(__m128i __a,__m128i __b)812*344a7f5eSAndroid Build Coastguard Worker _mm_mul_epu32(__m128i __a, __m128i __b)
813*344a7f5eSAndroid Build Coastguard Worker {
814*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_pmuludq128((__v4si)__a, (__v4si)__b);
815*344a7f5eSAndroid Build Coastguard Worker }
816*344a7f5eSAndroid Build Coastguard Worker
817*344a7f5eSAndroid Build Coastguard Worker /// \brief Computes the absolute differences of corresponding 8-bit integer
818*344a7f5eSAndroid Build Coastguard Worker /// values in two 128-bit vectors. Sums the first 8 absolute differences, and
819*344a7f5eSAndroid Build Coastguard Worker /// separately sums the second 8 absolute differences. Packss these two
820*344a7f5eSAndroid Build Coastguard Worker /// unsigned 16-bit integer sums into the upper and lower elements of a
821*344a7f5eSAndroid Build Coastguard Worker /// [2 x i64] vector.
822*344a7f5eSAndroid Build Coastguard Worker ///
823*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
824*344a7f5eSAndroid Build Coastguard Worker ///
825*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSADBW / PSADBW instruction.
826*344a7f5eSAndroid Build Coastguard Worker ///
827*344a7f5eSAndroid Build Coastguard Worker /// \param __a
828*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
829*344a7f5eSAndroid Build Coastguard Worker /// \param __b
830*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
831*344a7f5eSAndroid Build Coastguard Worker /// \returns A [2 x i64] vector containing the sums of the sets of absolute
832*344a7f5eSAndroid Build Coastguard Worker /// differences between both operands.
833*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sad_epu8(__m128i __a,__m128i __b)834*344a7f5eSAndroid Build Coastguard Worker _mm_sad_epu8(__m128i __a, __m128i __b)
835*344a7f5eSAndroid Build Coastguard Worker {
836*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_psadbw128((__v16qi)__a, (__v16qi)__b);
837*344a7f5eSAndroid Build Coastguard Worker }
838*344a7f5eSAndroid Build Coastguard Worker
839*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts the corresponding 8-bit integer values in the operands.
840*344a7f5eSAndroid Build Coastguard Worker ///
841*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
842*344a7f5eSAndroid Build Coastguard Worker ///
843*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBB / PSUBB instruction.
844*344a7f5eSAndroid Build Coastguard Worker ///
845*344a7f5eSAndroid Build Coastguard Worker /// \param __a
846*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
847*344a7f5eSAndroid Build Coastguard Worker /// \param __b
848*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
849*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
850*344a7f5eSAndroid Build Coastguard Worker /// in the operands.
851*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sub_epi8(__m128i __a,__m128i __b)852*344a7f5eSAndroid Build Coastguard Worker _mm_sub_epi8(__m128i __a, __m128i __b)
853*344a7f5eSAndroid Build Coastguard Worker {
854*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v16qu)__a - (__v16qu)__b);
855*344a7f5eSAndroid Build Coastguard Worker }
856*344a7f5eSAndroid Build Coastguard Worker
857*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts the corresponding 16-bit integer values in the operands.
858*344a7f5eSAndroid Build Coastguard Worker ///
859*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
860*344a7f5eSAndroid Build Coastguard Worker ///
861*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBW / PSUBW instruction.
862*344a7f5eSAndroid Build Coastguard Worker ///
863*344a7f5eSAndroid Build Coastguard Worker /// \param __a
864*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
865*344a7f5eSAndroid Build Coastguard Worker /// \param __b
866*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
867*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
868*344a7f5eSAndroid Build Coastguard Worker /// in the operands.
869*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sub_epi16(__m128i __a,__m128i __b)870*344a7f5eSAndroid Build Coastguard Worker _mm_sub_epi16(__m128i __a, __m128i __b)
871*344a7f5eSAndroid Build Coastguard Worker {
872*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v8hu)__a - (__v8hu)__b);
873*344a7f5eSAndroid Build Coastguard Worker }
874*344a7f5eSAndroid Build Coastguard Worker
875*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts the corresponding 32-bit integer values in the operands.
876*344a7f5eSAndroid Build Coastguard Worker ///
877*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
878*344a7f5eSAndroid Build Coastguard Worker ///
879*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBD / PSUBD instruction.
880*344a7f5eSAndroid Build Coastguard Worker ///
881*344a7f5eSAndroid Build Coastguard Worker /// \param __a
882*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
883*344a7f5eSAndroid Build Coastguard Worker /// \param __b
884*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
885*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
886*344a7f5eSAndroid Build Coastguard Worker /// in the operands.
887*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sub_epi32(__m128i __a,__m128i __b)888*344a7f5eSAndroid Build Coastguard Worker _mm_sub_epi32(__m128i __a, __m128i __b)
889*344a7f5eSAndroid Build Coastguard Worker {
890*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v4su)__a - (__v4su)__b);
891*344a7f5eSAndroid Build Coastguard Worker }
892*344a7f5eSAndroid Build Coastguard Worker
893*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts signed or unsigned 64-bit integer values and writes the
894*344a7f5eSAndroid Build Coastguard Worker /// difference to the corresponding bits in the destination.
895*344a7f5eSAndroid Build Coastguard Worker ///
896*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
897*344a7f5eSAndroid Build Coastguard Worker ///
898*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c PSUBQ instruction.
899*344a7f5eSAndroid Build Coastguard Worker ///
900*344a7f5eSAndroid Build Coastguard Worker /// \param __a
901*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer vector containing the minuend.
902*344a7f5eSAndroid Build Coastguard Worker /// \param __b
903*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer vector containing the subtrahend.
904*344a7f5eSAndroid Build Coastguard Worker /// \returns A 64-bit integer vector containing the difference of the values in
905*344a7f5eSAndroid Build Coastguard Worker /// the operands.
906*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_mm_sub_si64(__m64 __a,__m64 __b)907*344a7f5eSAndroid Build Coastguard Worker _mm_sub_si64(__m64 __a, __m64 __b)
908*344a7f5eSAndroid Build Coastguard Worker {
909*344a7f5eSAndroid Build Coastguard Worker return (__m64)__builtin_ia32_psubq((__v1di)__a, (__v1di)__b);
910*344a7f5eSAndroid Build Coastguard Worker }
911*344a7f5eSAndroid Build Coastguard Worker
912*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts the corresponding elements of two [2 x i64] vectors.
913*344a7f5eSAndroid Build Coastguard Worker ///
914*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
915*344a7f5eSAndroid Build Coastguard Worker ///
916*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBQ / PSUBQ instruction.
917*344a7f5eSAndroid Build Coastguard Worker ///
918*344a7f5eSAndroid Build Coastguard Worker /// \param __a
919*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
920*344a7f5eSAndroid Build Coastguard Worker /// \param __b
921*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
922*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
923*344a7f5eSAndroid Build Coastguard Worker /// in the operands.
924*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sub_epi64(__m128i __a,__m128i __b)925*344a7f5eSAndroid Build Coastguard Worker _mm_sub_epi64(__m128i __a, __m128i __b)
926*344a7f5eSAndroid Build Coastguard Worker {
927*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v2du)__a - (__v2du)__b);
928*344a7f5eSAndroid Build Coastguard Worker }
929*344a7f5eSAndroid Build Coastguard Worker
930*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts corresponding 8-bit signed integer values in the input and
931*344a7f5eSAndroid Build Coastguard Worker /// returns the differences in the corresponding bytes in the destination.
932*344a7f5eSAndroid Build Coastguard Worker /// Differences greater than 7Fh are saturated to 7Fh, and differences less
933*344a7f5eSAndroid Build Coastguard Worker /// than 80h are saturated to 80h.
934*344a7f5eSAndroid Build Coastguard Worker ///
935*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
936*344a7f5eSAndroid Build Coastguard Worker ///
937*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBSB / PSUBSB instruction.
938*344a7f5eSAndroid Build Coastguard Worker ///
939*344a7f5eSAndroid Build Coastguard Worker /// \param __a
940*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
941*344a7f5eSAndroid Build Coastguard Worker /// \param __b
942*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
943*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
944*344a7f5eSAndroid Build Coastguard Worker /// in the operands.
945*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_subs_epi8(__m128i __a,__m128i __b)946*344a7f5eSAndroid Build Coastguard Worker _mm_subs_epi8(__m128i __a, __m128i __b)
947*344a7f5eSAndroid Build Coastguard Worker {
948*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psubsb128((__v16qi)__a, (__v16qi)__b);
949*344a7f5eSAndroid Build Coastguard Worker }
950*344a7f5eSAndroid Build Coastguard Worker
951*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts corresponding 16-bit signed integer values in the input and
952*344a7f5eSAndroid Build Coastguard Worker /// returns the differences in the corresponding bytes in the destination.
953*344a7f5eSAndroid Build Coastguard Worker /// Differences greater than 7FFFh are saturated to 7FFFh, and values less
954*344a7f5eSAndroid Build Coastguard Worker /// than 8000h are saturated to 8000h.
955*344a7f5eSAndroid Build Coastguard Worker ///
956*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
957*344a7f5eSAndroid Build Coastguard Worker ///
958*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBSW / PSUBSW instruction.
959*344a7f5eSAndroid Build Coastguard Worker ///
960*344a7f5eSAndroid Build Coastguard Worker /// \param __a
961*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
962*344a7f5eSAndroid Build Coastguard Worker /// \param __b
963*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
964*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
965*344a7f5eSAndroid Build Coastguard Worker /// in the operands.
966*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_subs_epi16(__m128i __a,__m128i __b)967*344a7f5eSAndroid Build Coastguard Worker _mm_subs_epi16(__m128i __a, __m128i __b)
968*344a7f5eSAndroid Build Coastguard Worker {
969*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psubsw128((__v8hi)__a, (__v8hi)__b);
970*344a7f5eSAndroid Build Coastguard Worker }
971*344a7f5eSAndroid Build Coastguard Worker
972*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts corresponding 8-bit unsigned integer values in the input
973*344a7f5eSAndroid Build Coastguard Worker /// and returns the differences in the corresponding bytes in the
974*344a7f5eSAndroid Build Coastguard Worker /// destination. Differences less than 00h are saturated to 00h.
975*344a7f5eSAndroid Build Coastguard Worker ///
976*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
977*344a7f5eSAndroid Build Coastguard Worker ///
978*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBUSB / PSUBUSB instruction.
979*344a7f5eSAndroid Build Coastguard Worker ///
980*344a7f5eSAndroid Build Coastguard Worker /// \param __a
981*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
982*344a7f5eSAndroid Build Coastguard Worker /// \param __b
983*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
984*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the unsigned integer
985*344a7f5eSAndroid Build Coastguard Worker /// differences of the values in the operands.
986*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_subs_epu8(__m128i __a,__m128i __b)987*344a7f5eSAndroid Build Coastguard Worker _mm_subs_epu8(__m128i __a, __m128i __b)
988*344a7f5eSAndroid Build Coastguard Worker {
989*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psubusb128((__v16qi)__a, (__v16qi)__b);
990*344a7f5eSAndroid Build Coastguard Worker }
991*344a7f5eSAndroid Build Coastguard Worker
992*344a7f5eSAndroid Build Coastguard Worker /// \brief Subtracts corresponding 16-bit unsigned integer values in the input
993*344a7f5eSAndroid Build Coastguard Worker /// and returns the differences in the corresponding bytes in the
994*344a7f5eSAndroid Build Coastguard Worker /// destination. Differences less than 0000h are saturated to 0000h.
995*344a7f5eSAndroid Build Coastguard Worker ///
996*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
997*344a7f5eSAndroid Build Coastguard Worker ///
998*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSUBUSW / PSUBUSW instruction.
999*344a7f5eSAndroid Build Coastguard Worker ///
1000*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1001*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
1002*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1003*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
1004*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the unsigned integer
1005*344a7f5eSAndroid Build Coastguard Worker /// differences of the values in the operands.
1006*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_subs_epu16(__m128i __a,__m128i __b)1007*344a7f5eSAndroid Build Coastguard Worker _mm_subs_epu16(__m128i __a, __m128i __b)
1008*344a7f5eSAndroid Build Coastguard Worker {
1009*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psubusw128((__v8hi)__a, (__v8hi)__b);
1010*344a7f5eSAndroid Build Coastguard Worker }
1011*344a7f5eSAndroid Build Coastguard Worker
1012*344a7f5eSAndroid Build Coastguard Worker /// \brief Performs a bitwise AND of two 128-bit integer vectors.
1013*344a7f5eSAndroid Build Coastguard Worker ///
1014*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1015*344a7f5eSAndroid Build Coastguard Worker ///
1016*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPAND / PAND instruction.
1017*344a7f5eSAndroid Build Coastguard Worker ///
1018*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1019*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
1020*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1021*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
1022*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise AND of the values
1023*344a7f5eSAndroid Build Coastguard Worker /// in both operands.
1024*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_and_si128(__m128i __a,__m128i __b)1025*344a7f5eSAndroid Build Coastguard Worker _mm_and_si128(__m128i __a, __m128i __b)
1026*344a7f5eSAndroid Build Coastguard Worker {
1027*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v2du)__a & (__v2du)__b);
1028*344a7f5eSAndroid Build Coastguard Worker }
1029*344a7f5eSAndroid Build Coastguard Worker
1030*344a7f5eSAndroid Build Coastguard Worker /// \brief Performs a bitwise AND of two 128-bit integer vectors, using the
1031*344a7f5eSAndroid Build Coastguard Worker /// one's complement of the values contained in the first source operand.
1032*344a7f5eSAndroid Build Coastguard Worker ///
1033*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1034*344a7f5eSAndroid Build Coastguard Worker ///
1035*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPANDN / PANDN instruction.
1036*344a7f5eSAndroid Build Coastguard Worker ///
1037*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1038*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector containing the left source operand. The one's complement
1039*344a7f5eSAndroid Build Coastguard Worker /// of this value is used in the bitwise AND.
1040*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1041*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector containing the right source operand.
1042*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise AND of the one's
1043*344a7f5eSAndroid Build Coastguard Worker /// complement of the first operand and the values in the second operand.
1044*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_andnot_si128(__m128i __a,__m128i __b)1045*344a7f5eSAndroid Build Coastguard Worker _mm_andnot_si128(__m128i __a, __m128i __b)
1046*344a7f5eSAndroid Build Coastguard Worker {
1047*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(~(__v2du)__a & (__v2du)__b);
1048*344a7f5eSAndroid Build Coastguard Worker }
1049*344a7f5eSAndroid Build Coastguard Worker /// \brief Performs a bitwise OR of two 128-bit integer vectors.
1050*344a7f5eSAndroid Build Coastguard Worker ///
1051*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1052*344a7f5eSAndroid Build Coastguard Worker ///
1053*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPOR / POR instruction.
1054*344a7f5eSAndroid Build Coastguard Worker ///
1055*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1056*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
1057*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1058*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
1059*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise OR of the values
1060*344a7f5eSAndroid Build Coastguard Worker /// in both operands.
1061*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_or_si128(__m128i __a,__m128i __b)1062*344a7f5eSAndroid Build Coastguard Worker _mm_or_si128(__m128i __a, __m128i __b)
1063*344a7f5eSAndroid Build Coastguard Worker {
1064*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v2du)__a | (__v2du)__b);
1065*344a7f5eSAndroid Build Coastguard Worker }
1066*344a7f5eSAndroid Build Coastguard Worker
1067*344a7f5eSAndroid Build Coastguard Worker /// \brief Performs a bitwise exclusive OR of two 128-bit integer vectors.
1068*344a7f5eSAndroid Build Coastguard Worker ///
1069*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1070*344a7f5eSAndroid Build Coastguard Worker ///
1071*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPXOR / PXOR instruction.
1072*344a7f5eSAndroid Build Coastguard Worker ///
1073*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1074*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
1075*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1076*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
1077*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise exclusive OR of the
1078*344a7f5eSAndroid Build Coastguard Worker /// values in both operands.
1079*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_xor_si128(__m128i __a,__m128i __b)1080*344a7f5eSAndroid Build Coastguard Worker _mm_xor_si128(__m128i __a, __m128i __b)
1081*344a7f5eSAndroid Build Coastguard Worker {
1082*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v2du)__a ^ (__v2du)__b);
1083*344a7f5eSAndroid Build Coastguard Worker }
1084*344a7f5eSAndroid Build Coastguard Worker
1085*344a7f5eSAndroid Build Coastguard Worker /// \brief Left-shifts the 128-bit integer vector operand by the specified
1086*344a7f5eSAndroid Build Coastguard Worker /// number of bytes. Low-order bits are cleared.
1087*344a7f5eSAndroid Build Coastguard Worker ///
1088*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1089*344a7f5eSAndroid Build Coastguard Worker ///
1090*344a7f5eSAndroid Build Coastguard Worker /// \code
1091*344a7f5eSAndroid Build Coastguard Worker /// __m128i _mm_slli_si128(__m128i a, const int imm);
1092*344a7f5eSAndroid Build Coastguard Worker /// \endcode
1093*344a7f5eSAndroid Build Coastguard Worker ///
1094*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSLLDQ / PSLLDQ instruction.
1095*344a7f5eSAndroid Build Coastguard Worker ///
1096*344a7f5eSAndroid Build Coastguard Worker /// \param a
1097*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1098*344a7f5eSAndroid Build Coastguard Worker /// \param imm
1099*344a7f5eSAndroid Build Coastguard Worker /// An immediate value specifying the number of bytes to left-shift
1100*344a7f5eSAndroid Build Coastguard Worker /// operand a.
1101*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted value.
1102*344a7f5eSAndroid Build Coastguard Worker #define _mm_slli_si128(a, imm) __extension__ ({ \
1103*344a7f5eSAndroid Build Coastguard Worker (__m128i)__builtin_shufflevector( \
1104*344a7f5eSAndroid Build Coastguard Worker (__v16qi)_mm_setzero_si128(), \
1105*344a7f5eSAndroid Build Coastguard Worker (__v16qi)(__m128i)(a), \
1106*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 0 : 16 - (char)(imm), \
1107*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 1 : 17 - (char)(imm), \
1108*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 2 : 18 - (char)(imm), \
1109*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 3 : 19 - (char)(imm), \
1110*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 4 : 20 - (char)(imm), \
1111*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 5 : 21 - (char)(imm), \
1112*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 6 : 22 - (char)(imm), \
1113*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 7 : 23 - (char)(imm), \
1114*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 8 : 24 - (char)(imm), \
1115*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 9 : 25 - (char)(imm), \
1116*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 10 : 26 - (char)(imm), \
1117*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 11 : 27 - (char)(imm), \
1118*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 12 : 28 - (char)(imm), \
1119*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 13 : 29 - (char)(imm), \
1120*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 14 : 30 - (char)(imm), \
1121*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 15 : 31 - (char)(imm)); })
1122*344a7f5eSAndroid Build Coastguard Worker
1123*344a7f5eSAndroid Build Coastguard Worker #define _mm_bslli_si128(a, imm) \
1124*344a7f5eSAndroid Build Coastguard Worker _mm_slli_si128((a), (imm))
1125*344a7f5eSAndroid Build Coastguard Worker
1126*344a7f5eSAndroid Build Coastguard Worker /// \brief Left-shifts each 16-bit value in the 128-bit integer vector operand
1127*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
1128*344a7f5eSAndroid Build Coastguard Worker ///
1129*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1130*344a7f5eSAndroid Build Coastguard Worker ///
1131*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSLLW / PSLLW instruction.
1132*344a7f5eSAndroid Build Coastguard Worker ///
1133*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1134*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1135*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1136*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to left-shift each value
1137*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1138*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
1139*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_slli_epi16(__m128i __a,int __count)1140*344a7f5eSAndroid Build Coastguard Worker _mm_slli_epi16(__m128i __a, int __count)
1141*344a7f5eSAndroid Build Coastguard Worker {
1142*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psllwi128((__v8hi)__a, __count);
1143*344a7f5eSAndroid Build Coastguard Worker }
1144*344a7f5eSAndroid Build Coastguard Worker
1145*344a7f5eSAndroid Build Coastguard Worker /// \brief Left-shifts each 16-bit value in the 128-bit integer vector operand
1146*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
1147*344a7f5eSAndroid Build Coastguard Worker ///
1148*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1149*344a7f5eSAndroid Build Coastguard Worker ///
1150*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSLLW / PSLLW instruction.
1151*344a7f5eSAndroid Build Coastguard Worker ///
1152*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1153*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1154*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1155*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1156*344a7f5eSAndroid Build Coastguard Worker /// to left-shift each value in operand __a.
1157*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
1158*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sll_epi16(__m128i __a,__m128i __count)1159*344a7f5eSAndroid Build Coastguard Worker _mm_sll_epi16(__m128i __a, __m128i __count)
1160*344a7f5eSAndroid Build Coastguard Worker {
1161*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psllw128((__v8hi)__a, (__v8hi)__count);
1162*344a7f5eSAndroid Build Coastguard Worker }
1163*344a7f5eSAndroid Build Coastguard Worker
1164*344a7f5eSAndroid Build Coastguard Worker /// \brief Left-shifts each 32-bit value in the 128-bit integer vector operand
1165*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
1166*344a7f5eSAndroid Build Coastguard Worker ///
1167*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1168*344a7f5eSAndroid Build Coastguard Worker ///
1169*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSLLD / PSLLD instruction.
1170*344a7f5eSAndroid Build Coastguard Worker ///
1171*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1172*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1173*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1174*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to left-shift each value
1175*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1176*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
1177*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_slli_epi32(__m128i __a,int __count)1178*344a7f5eSAndroid Build Coastguard Worker _mm_slli_epi32(__m128i __a, int __count)
1179*344a7f5eSAndroid Build Coastguard Worker {
1180*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pslldi128((__v4si)__a, __count);
1181*344a7f5eSAndroid Build Coastguard Worker }
1182*344a7f5eSAndroid Build Coastguard Worker
1183*344a7f5eSAndroid Build Coastguard Worker /// \brief Left-shifts each 32-bit value in the 128-bit integer vector operand
1184*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
1185*344a7f5eSAndroid Build Coastguard Worker ///
1186*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1187*344a7f5eSAndroid Build Coastguard Worker ///
1188*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSLLD / PSLLD instruction.
1189*344a7f5eSAndroid Build Coastguard Worker ///
1190*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1191*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1192*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1193*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1194*344a7f5eSAndroid Build Coastguard Worker /// to left-shift each value in operand __a.
1195*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
1196*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sll_epi32(__m128i __a,__m128i __count)1197*344a7f5eSAndroid Build Coastguard Worker _mm_sll_epi32(__m128i __a, __m128i __count)
1198*344a7f5eSAndroid Build Coastguard Worker {
1199*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pslld128((__v4si)__a, (__v4si)__count);
1200*344a7f5eSAndroid Build Coastguard Worker }
1201*344a7f5eSAndroid Build Coastguard Worker
1202*344a7f5eSAndroid Build Coastguard Worker /// \brief Left-shifts each 64-bit value in the 128-bit integer vector operand
1203*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
1204*344a7f5eSAndroid Build Coastguard Worker ///
1205*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1206*344a7f5eSAndroid Build Coastguard Worker ///
1207*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSLLQ / PSLLQ instruction.
1208*344a7f5eSAndroid Build Coastguard Worker ///
1209*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1210*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1211*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1212*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to left-shift each value
1213*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1214*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
1215*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_slli_epi64(__m128i __a,int __count)1216*344a7f5eSAndroid Build Coastguard Worker _mm_slli_epi64(__m128i __a, int __count)
1217*344a7f5eSAndroid Build Coastguard Worker {
1218*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_psllqi128((__v2di)__a, __count);
1219*344a7f5eSAndroid Build Coastguard Worker }
1220*344a7f5eSAndroid Build Coastguard Worker
1221*344a7f5eSAndroid Build Coastguard Worker /// \brief Left-shifts each 64-bit value in the 128-bit integer vector operand
1222*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
1223*344a7f5eSAndroid Build Coastguard Worker ///
1224*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1225*344a7f5eSAndroid Build Coastguard Worker ///
1226*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSLLQ / PSLLQ instruction.
1227*344a7f5eSAndroid Build Coastguard Worker ///
1228*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1229*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1230*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1231*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1232*344a7f5eSAndroid Build Coastguard Worker /// to left-shift each value in operand __a.
1233*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
1234*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sll_epi64(__m128i __a,__m128i __count)1235*344a7f5eSAndroid Build Coastguard Worker _mm_sll_epi64(__m128i __a, __m128i __count)
1236*344a7f5eSAndroid Build Coastguard Worker {
1237*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_psllq128((__v2di)__a, (__v2di)__count);
1238*344a7f5eSAndroid Build Coastguard Worker }
1239*344a7f5eSAndroid Build Coastguard Worker
1240*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each 16-bit value in the 128-bit integer vector operand
1241*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
1242*344a7f5eSAndroid Build Coastguard Worker /// bit of the initial value.
1243*344a7f5eSAndroid Build Coastguard Worker ///
1244*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1245*344a7f5eSAndroid Build Coastguard Worker ///
1246*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRAW / PSRAW instruction.
1247*344a7f5eSAndroid Build Coastguard Worker ///
1248*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1249*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1250*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1251*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
1252*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1253*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1254*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srai_epi16(__m128i __a,int __count)1255*344a7f5eSAndroid Build Coastguard Worker _mm_srai_epi16(__m128i __a, int __count)
1256*344a7f5eSAndroid Build Coastguard Worker {
1257*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrawi128((__v8hi)__a, __count);
1258*344a7f5eSAndroid Build Coastguard Worker }
1259*344a7f5eSAndroid Build Coastguard Worker
1260*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each 16-bit value in the 128-bit integer vector operand
1261*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
1262*344a7f5eSAndroid Build Coastguard Worker /// bit of the initial value.
1263*344a7f5eSAndroid Build Coastguard Worker ///
1264*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1265*344a7f5eSAndroid Build Coastguard Worker ///
1266*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRAW / PSRAW instruction.
1267*344a7f5eSAndroid Build Coastguard Worker ///
1268*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1269*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1270*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1271*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1272*344a7f5eSAndroid Build Coastguard Worker /// to right-shift each value in operand __a.
1273*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1274*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sra_epi16(__m128i __a,__m128i __count)1275*344a7f5eSAndroid Build Coastguard Worker _mm_sra_epi16(__m128i __a, __m128i __count)
1276*344a7f5eSAndroid Build Coastguard Worker {
1277*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psraw128((__v8hi)__a, (__v8hi)__count);
1278*344a7f5eSAndroid Build Coastguard Worker }
1279*344a7f5eSAndroid Build Coastguard Worker
1280*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each 32-bit value in the 128-bit integer vector operand
1281*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
1282*344a7f5eSAndroid Build Coastguard Worker /// bit of the initial value.
1283*344a7f5eSAndroid Build Coastguard Worker ///
1284*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1285*344a7f5eSAndroid Build Coastguard Worker ///
1286*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRAD / PSRAD instruction.
1287*344a7f5eSAndroid Build Coastguard Worker ///
1288*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1289*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1290*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1291*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
1292*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1293*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1294*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srai_epi32(__m128i __a,int __count)1295*344a7f5eSAndroid Build Coastguard Worker _mm_srai_epi32(__m128i __a, int __count)
1296*344a7f5eSAndroid Build Coastguard Worker {
1297*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psradi128((__v4si)__a, __count);
1298*344a7f5eSAndroid Build Coastguard Worker }
1299*344a7f5eSAndroid Build Coastguard Worker
1300*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each 32-bit value in the 128-bit integer vector operand
1301*344a7f5eSAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
1302*344a7f5eSAndroid Build Coastguard Worker /// bit of the initial value.
1303*344a7f5eSAndroid Build Coastguard Worker ///
1304*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1305*344a7f5eSAndroid Build Coastguard Worker ///
1306*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRAD / PSRAD instruction.
1307*344a7f5eSAndroid Build Coastguard Worker ///
1308*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1309*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1310*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1311*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1312*344a7f5eSAndroid Build Coastguard Worker /// to right-shift each value in operand __a.
1313*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1314*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sra_epi32(__m128i __a,__m128i __count)1315*344a7f5eSAndroid Build Coastguard Worker _mm_sra_epi32(__m128i __a, __m128i __count)
1316*344a7f5eSAndroid Build Coastguard Worker {
1317*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrad128((__v4si)__a, (__v4si)__count);
1318*344a7f5eSAndroid Build Coastguard Worker }
1319*344a7f5eSAndroid Build Coastguard Worker
1320*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts the 128-bit integer vector operand by the specified
1321*344a7f5eSAndroid Build Coastguard Worker /// number of bytes. High-order bits are cleared.
1322*344a7f5eSAndroid Build Coastguard Worker ///
1323*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1324*344a7f5eSAndroid Build Coastguard Worker ///
1325*344a7f5eSAndroid Build Coastguard Worker /// \code
1326*344a7f5eSAndroid Build Coastguard Worker /// __m128i _mm_srli_si128(__m128i a, const int imm);
1327*344a7f5eSAndroid Build Coastguard Worker /// \endcode
1328*344a7f5eSAndroid Build Coastguard Worker ///
1329*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRLDQ / PSRLDQ instruction.
1330*344a7f5eSAndroid Build Coastguard Worker ///
1331*344a7f5eSAndroid Build Coastguard Worker /// \param a
1332*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1333*344a7f5eSAndroid Build Coastguard Worker /// \param imm
1334*344a7f5eSAndroid Build Coastguard Worker /// An immediate value specifying the number of bytes to right-shift operand
1335*344a7f5eSAndroid Build Coastguard Worker /// a.
1336*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted value.
1337*344a7f5eSAndroid Build Coastguard Worker #define _mm_srli_si128(a, imm) __extension__ ({ \
1338*344a7f5eSAndroid Build Coastguard Worker (__m128i)__builtin_shufflevector( \
1339*344a7f5eSAndroid Build Coastguard Worker (__v16qi)(__m128i)(a), \
1340*344a7f5eSAndroid Build Coastguard Worker (__v16qi)_mm_setzero_si128(), \
1341*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 16 : (char)(imm) + 0, \
1342*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 17 : (char)(imm) + 1, \
1343*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 18 : (char)(imm) + 2, \
1344*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 19 : (char)(imm) + 3, \
1345*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 20 : (char)(imm) + 4, \
1346*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 21 : (char)(imm) + 5, \
1347*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 22 : (char)(imm) + 6, \
1348*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 23 : (char)(imm) + 7, \
1349*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 24 : (char)(imm) + 8, \
1350*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 25 : (char)(imm) + 9, \
1351*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 26 : (char)(imm) + 10, \
1352*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 27 : (char)(imm) + 11, \
1353*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 28 : (char)(imm) + 12, \
1354*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 29 : (char)(imm) + 13, \
1355*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 30 : (char)(imm) + 14, \
1356*344a7f5eSAndroid Build Coastguard Worker ((char)(imm)&0xF0) ? 31 : (char)(imm) + 15); })
1357*344a7f5eSAndroid Build Coastguard Worker
1358*344a7f5eSAndroid Build Coastguard Worker #define _mm_bsrli_si128(a, imm) \
1359*344a7f5eSAndroid Build Coastguard Worker _mm_srli_si128((a), (imm))
1360*344a7f5eSAndroid Build Coastguard Worker
1361*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each of 16-bit values in the 128-bit integer vector
1362*344a7f5eSAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
1363*344a7f5eSAndroid Build Coastguard Worker ///
1364*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1365*344a7f5eSAndroid Build Coastguard Worker ///
1366*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRLW / PSRLW instruction.
1367*344a7f5eSAndroid Build Coastguard Worker ///
1368*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1369*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1370*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1371*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
1372*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1373*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1374*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srli_epi16(__m128i __a,int __count)1375*344a7f5eSAndroid Build Coastguard Worker _mm_srli_epi16(__m128i __a, int __count)
1376*344a7f5eSAndroid Build Coastguard Worker {
1377*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrlwi128((__v8hi)__a, __count);
1378*344a7f5eSAndroid Build Coastguard Worker }
1379*344a7f5eSAndroid Build Coastguard Worker
1380*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each of 16-bit values in the 128-bit integer vector
1381*344a7f5eSAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
1382*344a7f5eSAndroid Build Coastguard Worker ///
1383*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1384*344a7f5eSAndroid Build Coastguard Worker ///
1385*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRLW / PSRLW instruction.
1386*344a7f5eSAndroid Build Coastguard Worker ///
1387*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1388*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1389*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1390*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1391*344a7f5eSAndroid Build Coastguard Worker /// to right-shift each value in operand __a.
1392*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1393*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srl_epi16(__m128i __a,__m128i __count)1394*344a7f5eSAndroid Build Coastguard Worker _mm_srl_epi16(__m128i __a, __m128i __count)
1395*344a7f5eSAndroid Build Coastguard Worker {
1396*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrlw128((__v8hi)__a, (__v8hi)__count);
1397*344a7f5eSAndroid Build Coastguard Worker }
1398*344a7f5eSAndroid Build Coastguard Worker
1399*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each of 32-bit values in the 128-bit integer vector
1400*344a7f5eSAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
1401*344a7f5eSAndroid Build Coastguard Worker ///
1402*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1403*344a7f5eSAndroid Build Coastguard Worker ///
1404*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRLD / PSRLD instruction.
1405*344a7f5eSAndroid Build Coastguard Worker ///
1406*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1407*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1408*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1409*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
1410*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1411*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1412*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srli_epi32(__m128i __a,int __count)1413*344a7f5eSAndroid Build Coastguard Worker _mm_srli_epi32(__m128i __a, int __count)
1414*344a7f5eSAndroid Build Coastguard Worker {
1415*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrldi128((__v4si)__a, __count);
1416*344a7f5eSAndroid Build Coastguard Worker }
1417*344a7f5eSAndroid Build Coastguard Worker
1418*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each of 32-bit values in the 128-bit integer vector
1419*344a7f5eSAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
1420*344a7f5eSAndroid Build Coastguard Worker ///
1421*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1422*344a7f5eSAndroid Build Coastguard Worker ///
1423*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRLD / PSRLD instruction.
1424*344a7f5eSAndroid Build Coastguard Worker ///
1425*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1426*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1427*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1428*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1429*344a7f5eSAndroid Build Coastguard Worker /// to right-shift each value in operand __a.
1430*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1431*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srl_epi32(__m128i __a,__m128i __count)1432*344a7f5eSAndroid Build Coastguard Worker _mm_srl_epi32(__m128i __a, __m128i __count)
1433*344a7f5eSAndroid Build Coastguard Worker {
1434*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrld128((__v4si)__a, (__v4si)__count);
1435*344a7f5eSAndroid Build Coastguard Worker }
1436*344a7f5eSAndroid Build Coastguard Worker
1437*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each of 64-bit values in the 128-bit integer vector
1438*344a7f5eSAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
1439*344a7f5eSAndroid Build Coastguard Worker ///
1440*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1441*344a7f5eSAndroid Build Coastguard Worker ///
1442*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRLQ / PSRLQ instruction.
1443*344a7f5eSAndroid Build Coastguard Worker ///
1444*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1445*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1446*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1447*344a7f5eSAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
1448*344a7f5eSAndroid Build Coastguard Worker /// in operand __a.
1449*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1450*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srli_epi64(__m128i __a,int __count)1451*344a7f5eSAndroid Build Coastguard Worker _mm_srli_epi64(__m128i __a, int __count)
1452*344a7f5eSAndroid Build Coastguard Worker {
1453*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_psrlqi128((__v2di)__a, __count);
1454*344a7f5eSAndroid Build Coastguard Worker }
1455*344a7f5eSAndroid Build Coastguard Worker
1456*344a7f5eSAndroid Build Coastguard Worker /// \brief Right-shifts each of 64-bit values in the 128-bit integer vector
1457*344a7f5eSAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
1458*344a7f5eSAndroid Build Coastguard Worker ///
1459*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1460*344a7f5eSAndroid Build Coastguard Worker ///
1461*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPSRLQ / PSRLQ instruction.
1462*344a7f5eSAndroid Build Coastguard Worker ///
1463*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1464*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
1465*344a7f5eSAndroid Build Coastguard Worker /// \param __count
1466*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
1467*344a7f5eSAndroid Build Coastguard Worker /// to right-shift each value in operand __a.
1468*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
1469*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_srl_epi64(__m128i __a,__m128i __count)1470*344a7f5eSAndroid Build Coastguard Worker _mm_srl_epi64(__m128i __a, __m128i __count)
1471*344a7f5eSAndroid Build Coastguard Worker {
1472*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_psrlq128((__v2di)__a, (__v2di)__count);
1473*344a7f5eSAndroid Build Coastguard Worker }
1474*344a7f5eSAndroid Build Coastguard Worker
1475*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding 8-bit values of the 128-bit
1476*344a7f5eSAndroid Build Coastguard Worker /// integer vectors for equality. Each comparison yields 0h for false, FFh
1477*344a7f5eSAndroid Build Coastguard Worker /// for true.
1478*344a7f5eSAndroid Build Coastguard Worker ///
1479*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1480*344a7f5eSAndroid Build Coastguard Worker ///
1481*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPEQB / PCMPEQB instruction.
1482*344a7f5eSAndroid Build Coastguard Worker ///
1483*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1484*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1485*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1486*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1487*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1488*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmpeq_epi8(__m128i __a,__m128i __b)1489*344a7f5eSAndroid Build Coastguard Worker _mm_cmpeq_epi8(__m128i __a, __m128i __b)
1490*344a7f5eSAndroid Build Coastguard Worker {
1491*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v16qi)__a == (__v16qi)__b);
1492*344a7f5eSAndroid Build Coastguard Worker }
1493*344a7f5eSAndroid Build Coastguard Worker
1494*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding 16-bit values of the 128-bit
1495*344a7f5eSAndroid Build Coastguard Worker /// integer vectors for equality. Each comparison yields 0h for false, FFFFh
1496*344a7f5eSAndroid Build Coastguard Worker /// for true.
1497*344a7f5eSAndroid Build Coastguard Worker ///
1498*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1499*344a7f5eSAndroid Build Coastguard Worker ///
1500*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPEQW / PCMPEQW instruction.
1501*344a7f5eSAndroid Build Coastguard Worker ///
1502*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1503*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1504*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1505*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1506*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1507*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmpeq_epi16(__m128i __a,__m128i __b)1508*344a7f5eSAndroid Build Coastguard Worker _mm_cmpeq_epi16(__m128i __a, __m128i __b)
1509*344a7f5eSAndroid Build Coastguard Worker {
1510*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v8hi)__a == (__v8hi)__b);
1511*344a7f5eSAndroid Build Coastguard Worker }
1512*344a7f5eSAndroid Build Coastguard Worker
1513*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding 32-bit values of the 128-bit
1514*344a7f5eSAndroid Build Coastguard Worker /// integer vectors for equality. Each comparison yields 0h for false,
1515*344a7f5eSAndroid Build Coastguard Worker /// FFFFFFFFh for true.
1516*344a7f5eSAndroid Build Coastguard Worker ///
1517*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1518*344a7f5eSAndroid Build Coastguard Worker ///
1519*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPEQD / PCMPEQD instruction.
1520*344a7f5eSAndroid Build Coastguard Worker ///
1521*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1522*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1523*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1524*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1525*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1526*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmpeq_epi32(__m128i __a,__m128i __b)1527*344a7f5eSAndroid Build Coastguard Worker _mm_cmpeq_epi32(__m128i __a, __m128i __b)
1528*344a7f5eSAndroid Build Coastguard Worker {
1529*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v4si)__a == (__v4si)__b);
1530*344a7f5eSAndroid Build Coastguard Worker }
1531*344a7f5eSAndroid Build Coastguard Worker
1532*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding signed 8-bit values of the 128-bit
1533*344a7f5eSAndroid Build Coastguard Worker /// integer vectors to determine if the values in the first operand are
1534*344a7f5eSAndroid Build Coastguard Worker /// greater than those in the second operand. Each comparison yields 0h for
1535*344a7f5eSAndroid Build Coastguard Worker /// false, FFh for true.
1536*344a7f5eSAndroid Build Coastguard Worker ///
1537*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1538*344a7f5eSAndroid Build Coastguard Worker ///
1539*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPGTB / PCMPGTB instruction.
1540*344a7f5eSAndroid Build Coastguard Worker ///
1541*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1542*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1543*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1544*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1545*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1546*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmpgt_epi8(__m128i __a,__m128i __b)1547*344a7f5eSAndroid Build Coastguard Worker _mm_cmpgt_epi8(__m128i __a, __m128i __b)
1548*344a7f5eSAndroid Build Coastguard Worker {
1549*344a7f5eSAndroid Build Coastguard Worker /* This function always performs a signed comparison, but __v16qi is a char
1550*344a7f5eSAndroid Build Coastguard Worker which may be signed or unsigned, so use __v16qs. */
1551*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v16qs)__a > (__v16qs)__b);
1552*344a7f5eSAndroid Build Coastguard Worker }
1553*344a7f5eSAndroid Build Coastguard Worker
1554*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding signed 16-bit values of the
1555*344a7f5eSAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
1556*344a7f5eSAndroid Build Coastguard Worker /// are greater than those in the second operand. Each comparison yields 0h
1557*344a7f5eSAndroid Build Coastguard Worker /// for false, FFFFh for true.
1558*344a7f5eSAndroid Build Coastguard Worker ///
1559*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1560*344a7f5eSAndroid Build Coastguard Worker ///
1561*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPGTW / PCMPGTW instruction.
1562*344a7f5eSAndroid Build Coastguard Worker ///
1563*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1564*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1565*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1566*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1567*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1568*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmpgt_epi16(__m128i __a,__m128i __b)1569*344a7f5eSAndroid Build Coastguard Worker _mm_cmpgt_epi16(__m128i __a, __m128i __b)
1570*344a7f5eSAndroid Build Coastguard Worker {
1571*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v8hi)__a > (__v8hi)__b);
1572*344a7f5eSAndroid Build Coastguard Worker }
1573*344a7f5eSAndroid Build Coastguard Worker
1574*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding signed 32-bit values of the
1575*344a7f5eSAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
1576*344a7f5eSAndroid Build Coastguard Worker /// are greater than those in the second operand. Each comparison yields 0h
1577*344a7f5eSAndroid Build Coastguard Worker /// for false, FFFFFFFFh for true.
1578*344a7f5eSAndroid Build Coastguard Worker ///
1579*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1580*344a7f5eSAndroid Build Coastguard Worker ///
1581*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPGTD / PCMPGTD instruction.
1582*344a7f5eSAndroid Build Coastguard Worker ///
1583*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1584*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1585*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1586*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1587*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1588*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmpgt_epi32(__m128i __a,__m128i __b)1589*344a7f5eSAndroid Build Coastguard Worker _mm_cmpgt_epi32(__m128i __a, __m128i __b)
1590*344a7f5eSAndroid Build Coastguard Worker {
1591*344a7f5eSAndroid Build Coastguard Worker return (__m128i)((__v4si)__a > (__v4si)__b);
1592*344a7f5eSAndroid Build Coastguard Worker }
1593*344a7f5eSAndroid Build Coastguard Worker
1594*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding signed 8-bit values of the 128-bit
1595*344a7f5eSAndroid Build Coastguard Worker /// integer vectors to determine if the values in the first operand are less
1596*344a7f5eSAndroid Build Coastguard Worker /// than those in the second operand. Each comparison yields 0h for false,
1597*344a7f5eSAndroid Build Coastguard Worker /// FFh for true.
1598*344a7f5eSAndroid Build Coastguard Worker ///
1599*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1600*344a7f5eSAndroid Build Coastguard Worker ///
1601*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPGTB / PCMPGTB instruction.
1602*344a7f5eSAndroid Build Coastguard Worker ///
1603*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1604*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1605*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1606*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1607*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1608*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmplt_epi8(__m128i __a,__m128i __b)1609*344a7f5eSAndroid Build Coastguard Worker _mm_cmplt_epi8(__m128i __a, __m128i __b)
1610*344a7f5eSAndroid Build Coastguard Worker {
1611*344a7f5eSAndroid Build Coastguard Worker return _mm_cmpgt_epi8(__b, __a);
1612*344a7f5eSAndroid Build Coastguard Worker }
1613*344a7f5eSAndroid Build Coastguard Worker
1614*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding signed 16-bit values of the
1615*344a7f5eSAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
1616*344a7f5eSAndroid Build Coastguard Worker /// are less than those in the second operand. Each comparison yields 0h for
1617*344a7f5eSAndroid Build Coastguard Worker /// false, FFFFh for true.
1618*344a7f5eSAndroid Build Coastguard Worker ///
1619*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1620*344a7f5eSAndroid Build Coastguard Worker ///
1621*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPGTW / PCMPGTW instruction.
1622*344a7f5eSAndroid Build Coastguard Worker ///
1623*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1624*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1625*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1626*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1627*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1628*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmplt_epi16(__m128i __a,__m128i __b)1629*344a7f5eSAndroid Build Coastguard Worker _mm_cmplt_epi16(__m128i __a, __m128i __b)
1630*344a7f5eSAndroid Build Coastguard Worker {
1631*344a7f5eSAndroid Build Coastguard Worker return _mm_cmpgt_epi16(__b, __a);
1632*344a7f5eSAndroid Build Coastguard Worker }
1633*344a7f5eSAndroid Build Coastguard Worker
1634*344a7f5eSAndroid Build Coastguard Worker /// \brief Compares each of the corresponding signed 32-bit values of the
1635*344a7f5eSAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
1636*344a7f5eSAndroid Build Coastguard Worker /// are less than those in the second operand. Each comparison yields 0h for
1637*344a7f5eSAndroid Build Coastguard Worker /// false, FFFFFFFFh for true.
1638*344a7f5eSAndroid Build Coastguard Worker ///
1639*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1640*344a7f5eSAndroid Build Coastguard Worker ///
1641*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VPCMPGTD / PCMPGTD instruction.
1642*344a7f5eSAndroid Build Coastguard Worker ///
1643*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1644*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1645*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1646*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1647*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
1648*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cmplt_epi32(__m128i __a,__m128i __b)1649*344a7f5eSAndroid Build Coastguard Worker _mm_cmplt_epi32(__m128i __a, __m128i __b)
1650*344a7f5eSAndroid Build Coastguard Worker {
1651*344a7f5eSAndroid Build Coastguard Worker return _mm_cmpgt_epi32(__b, __a);
1652*344a7f5eSAndroid Build Coastguard Worker }
1653*344a7f5eSAndroid Build Coastguard Worker
1654*344a7f5eSAndroid Build Coastguard Worker #ifdef __x86_64__
1655*344a7f5eSAndroid Build Coastguard Worker /// \brief Converts a 64-bit signed integer value from the second operand into a
1656*344a7f5eSAndroid Build Coastguard Worker /// double-precision value and returns it in the lower element of a [2 x
1657*344a7f5eSAndroid Build Coastguard Worker /// double] vector; the upper element of the returned vector is copied from
1658*344a7f5eSAndroid Build Coastguard Worker /// the upper element of the first operand.
1659*344a7f5eSAndroid Build Coastguard Worker ///
1660*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1661*344a7f5eSAndroid Build Coastguard Worker ///
1662*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VCVTSI2SD / CVTSI2SD instruction.
1663*344a7f5eSAndroid Build Coastguard Worker ///
1664*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1665*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The upper 64 bits of this operand are
1666*344a7f5eSAndroid Build Coastguard Worker /// copied to the upper 64 bits of the destination.
1667*344a7f5eSAndroid Build Coastguard Worker /// \param __b
1668*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit signed integer operand containing the value to be converted.
1669*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
1670*344a7f5eSAndroid Build Coastguard Worker /// converted value of the second operand. The upper 64 bits are copied from
1671*344a7f5eSAndroid Build Coastguard Worker /// the upper 64 bits of the first operand.
1672*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_cvtsi64_sd(__m128d __a,long long __b)1673*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsi64_sd(__m128d __a, long long __b)
1674*344a7f5eSAndroid Build Coastguard Worker {
1675*344a7f5eSAndroid Build Coastguard Worker __a[0] = __b;
1676*344a7f5eSAndroid Build Coastguard Worker return __a;
1677*344a7f5eSAndroid Build Coastguard Worker }
1678*344a7f5eSAndroid Build Coastguard Worker
1679*344a7f5eSAndroid Build Coastguard Worker /// \brief Converts the first (lower) element of a vector of [2 x double] into a
1680*344a7f5eSAndroid Build Coastguard Worker /// 64-bit signed integer value, according to the current rounding mode.
1681*344a7f5eSAndroid Build Coastguard Worker ///
1682*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1683*344a7f5eSAndroid Build Coastguard Worker ///
1684*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VCVTSD2SI / CVTSD2SI instruction.
1685*344a7f5eSAndroid Build Coastguard Worker ///
1686*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1687*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are used in the
1688*344a7f5eSAndroid Build Coastguard Worker /// conversion.
1689*344a7f5eSAndroid Build Coastguard Worker /// \returns A 64-bit signed integer containing the converted value.
1690*344a7f5eSAndroid Build Coastguard Worker static __inline__ long long __DEFAULT_FN_ATTRS
_mm_cvtsd_si64(__m128d __a)1691*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsd_si64(__m128d __a)
1692*344a7f5eSAndroid Build Coastguard Worker {
1693*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_cvtsd2si64((__v2df)__a);
1694*344a7f5eSAndroid Build Coastguard Worker }
1695*344a7f5eSAndroid Build Coastguard Worker
1696*344a7f5eSAndroid Build Coastguard Worker /// \brief Converts the first (lower) element of a vector of [2 x double] into a
1697*344a7f5eSAndroid Build Coastguard Worker /// 64-bit signed integer value, truncating the result when it is inexact.
1698*344a7f5eSAndroid Build Coastguard Worker ///
1699*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1700*344a7f5eSAndroid Build Coastguard Worker ///
1701*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VCVTTSD2SI / CVTTSD2SI instruction.
1702*344a7f5eSAndroid Build Coastguard Worker ///
1703*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1704*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are used in the
1705*344a7f5eSAndroid Build Coastguard Worker /// conversion.
1706*344a7f5eSAndroid Build Coastguard Worker /// \returns A 64-bit signed integer containing the converted value.
1707*344a7f5eSAndroid Build Coastguard Worker static __inline__ long long __DEFAULT_FN_ATTRS
_mm_cvttsd_si64(__m128d __a)1708*344a7f5eSAndroid Build Coastguard Worker _mm_cvttsd_si64(__m128d __a)
1709*344a7f5eSAndroid Build Coastguard Worker {
1710*344a7f5eSAndroid Build Coastguard Worker return __a[0];
1711*344a7f5eSAndroid Build Coastguard Worker }
1712*344a7f5eSAndroid Build Coastguard Worker #endif
1713*344a7f5eSAndroid Build Coastguard Worker
1714*344a7f5eSAndroid Build Coastguard Worker /// \brief Converts a vector of [4 x i32] into a vector of [4 x float].
1715*344a7f5eSAndroid Build Coastguard Worker ///
1716*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1717*344a7f5eSAndroid Build Coastguard Worker ///
1718*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VCVTDQ2PS / CVTDQ2PS instruction.
1719*344a7f5eSAndroid Build Coastguard Worker ///
1720*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1721*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit integer vector.
1722*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x float] containing the converted values.
1723*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_cvtepi32_ps(__m128i __a)1724*344a7f5eSAndroid Build Coastguard Worker _mm_cvtepi32_ps(__m128i __a)
1725*344a7f5eSAndroid Build Coastguard Worker {
1726*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_cvtdq2ps((__v4si)__a);
1727*344a7f5eSAndroid Build Coastguard Worker }
1728*344a7f5eSAndroid Build Coastguard Worker
1729*344a7f5eSAndroid Build Coastguard Worker /// \brief Converts a vector of [4 x float] into a vector of [4 x i32].
1730*344a7f5eSAndroid Build Coastguard Worker ///
1731*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1732*344a7f5eSAndroid Build Coastguard Worker ///
1733*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VCVTPS2DQ / CVTPS2DQ instruction.
1734*344a7f5eSAndroid Build Coastguard Worker ///
1735*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1736*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector of [4 x float].
1737*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector of [4 x i32] containing the converted
1738*344a7f5eSAndroid Build Coastguard Worker /// values.
1739*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvtps_epi32(__m128 __a)1740*344a7f5eSAndroid Build Coastguard Worker _mm_cvtps_epi32(__m128 __a)
1741*344a7f5eSAndroid Build Coastguard Worker {
1742*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_cvtps2dq((__v4sf)__a);
1743*344a7f5eSAndroid Build Coastguard Worker }
1744*344a7f5eSAndroid Build Coastguard Worker
1745*344a7f5eSAndroid Build Coastguard Worker /// \brief Converts a vector of [4 x float] into a vector of [4 x i32],
1746*344a7f5eSAndroid Build Coastguard Worker /// truncating the result when it is inexact.
1747*344a7f5eSAndroid Build Coastguard Worker ///
1748*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1749*344a7f5eSAndroid Build Coastguard Worker ///
1750*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VCVTTPS2DQ / CVTTPS2DQ instruction.
1751*344a7f5eSAndroid Build Coastguard Worker ///
1752*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1753*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector of [4 x float].
1754*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] containing the converted values.
1755*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvttps_epi32(__m128 __a)1756*344a7f5eSAndroid Build Coastguard Worker _mm_cvttps_epi32(__m128 __a)
1757*344a7f5eSAndroid Build Coastguard Worker {
1758*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_convertvector((__v4sf)__a, __v4si);
1759*344a7f5eSAndroid Build Coastguard Worker }
1760*344a7f5eSAndroid Build Coastguard Worker
1761*344a7f5eSAndroid Build Coastguard Worker /// \brief Returns a vector of [4 x i32] where the lowest element is the input
1762*344a7f5eSAndroid Build Coastguard Worker /// operand and the remaining elements are zero.
1763*344a7f5eSAndroid Build Coastguard Worker ///
1764*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1765*344a7f5eSAndroid Build Coastguard Worker ///
1766*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VMOVD / MOVD instruction.
1767*344a7f5eSAndroid Build Coastguard Worker ///
1768*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1769*344a7f5eSAndroid Build Coastguard Worker /// A 32-bit signed integer operand.
1770*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32].
1771*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvtsi32_si128(int __a)1772*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsi32_si128(int __a)
1773*344a7f5eSAndroid Build Coastguard Worker {
1774*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v4si){ __a, 0, 0, 0 };
1775*344a7f5eSAndroid Build Coastguard Worker }
1776*344a7f5eSAndroid Build Coastguard Worker
1777*344a7f5eSAndroid Build Coastguard Worker #ifdef __x86_64__
1778*344a7f5eSAndroid Build Coastguard Worker /// \brief Returns a vector of [2 x i64] where the lower element is the input
1779*344a7f5eSAndroid Build Coastguard Worker /// operand and the upper element is zero.
1780*344a7f5eSAndroid Build Coastguard Worker ///
1781*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1782*344a7f5eSAndroid Build Coastguard Worker ///
1783*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VMOVQ / MOVQ instruction.
1784*344a7f5eSAndroid Build Coastguard Worker ///
1785*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1786*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit signed integer operand containing the value to be converted.
1787*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64] containing the converted value.
1788*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvtsi64_si128(long long __a)1789*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsi64_si128(long long __a)
1790*344a7f5eSAndroid Build Coastguard Worker {
1791*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ __a, 0 };
1792*344a7f5eSAndroid Build Coastguard Worker }
1793*344a7f5eSAndroid Build Coastguard Worker #endif
1794*344a7f5eSAndroid Build Coastguard Worker
1795*344a7f5eSAndroid Build Coastguard Worker /// \brief Moves the least significant 32 bits of a vector of [4 x i32] to a
1796*344a7f5eSAndroid Build Coastguard Worker /// 32-bit signed integer value.
1797*344a7f5eSAndroid Build Coastguard Worker ///
1798*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1799*344a7f5eSAndroid Build Coastguard Worker ///
1800*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VMOVD / MOVD instruction.
1801*344a7f5eSAndroid Build Coastguard Worker ///
1802*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1803*344a7f5eSAndroid Build Coastguard Worker /// A vector of [4 x i32]. The least significant 32 bits are moved to the
1804*344a7f5eSAndroid Build Coastguard Worker /// destination.
1805*344a7f5eSAndroid Build Coastguard Worker /// \returns A 32-bit signed integer containing the moved value.
1806*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_cvtsi128_si32(__m128i __a)1807*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsi128_si32(__m128i __a)
1808*344a7f5eSAndroid Build Coastguard Worker {
1809*344a7f5eSAndroid Build Coastguard Worker __v4si __b = (__v4si)__a;
1810*344a7f5eSAndroid Build Coastguard Worker return __b[0];
1811*344a7f5eSAndroid Build Coastguard Worker }
1812*344a7f5eSAndroid Build Coastguard Worker
1813*344a7f5eSAndroid Build Coastguard Worker #ifdef __x86_64__
1814*344a7f5eSAndroid Build Coastguard Worker /// \brief Moves the least significant 64 bits of a vector of [2 x i64] to a
1815*344a7f5eSAndroid Build Coastguard Worker /// 64-bit signed integer value.
1816*344a7f5eSAndroid Build Coastguard Worker ///
1817*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1818*344a7f5eSAndroid Build Coastguard Worker ///
1819*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VMOVQ / MOVQ instruction.
1820*344a7f5eSAndroid Build Coastguard Worker ///
1821*344a7f5eSAndroid Build Coastguard Worker /// \param __a
1822*344a7f5eSAndroid Build Coastguard Worker /// A vector of [2 x i64]. The least significant 64 bits are moved to the
1823*344a7f5eSAndroid Build Coastguard Worker /// destination.
1824*344a7f5eSAndroid Build Coastguard Worker /// \returns A 64-bit signed integer containing the moved value.
1825*344a7f5eSAndroid Build Coastguard Worker static __inline__ long long __DEFAULT_FN_ATTRS
_mm_cvtsi128_si64(__m128i __a)1826*344a7f5eSAndroid Build Coastguard Worker _mm_cvtsi128_si64(__m128i __a)
1827*344a7f5eSAndroid Build Coastguard Worker {
1828*344a7f5eSAndroid Build Coastguard Worker return __a[0];
1829*344a7f5eSAndroid Build Coastguard Worker }
1830*344a7f5eSAndroid Build Coastguard Worker #endif
1831*344a7f5eSAndroid Build Coastguard Worker
1832*344a7f5eSAndroid Build Coastguard Worker /// \brief Moves packed integer values from an aligned 128-bit memory location
1833*344a7f5eSAndroid Build Coastguard Worker /// to elements in a 128-bit integer vector.
1834*344a7f5eSAndroid Build Coastguard Worker ///
1835*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1836*344a7f5eSAndroid Build Coastguard Worker ///
1837*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VMOVDQA / MOVDQA instruction.
1838*344a7f5eSAndroid Build Coastguard Worker ///
1839*344a7f5eSAndroid Build Coastguard Worker /// \param __p
1840*344a7f5eSAndroid Build Coastguard Worker /// An aligned pointer to a memory location containing integer values.
1841*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the moved values.
1842*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_load_si128(__m128i const * __p)1843*344a7f5eSAndroid Build Coastguard Worker _mm_load_si128(__m128i const *__p)
1844*344a7f5eSAndroid Build Coastguard Worker {
1845*344a7f5eSAndroid Build Coastguard Worker return *__p;
1846*344a7f5eSAndroid Build Coastguard Worker }
1847*344a7f5eSAndroid Build Coastguard Worker
1848*344a7f5eSAndroid Build Coastguard Worker /// \brief Moves packed integer values from an unaligned 128-bit memory location
1849*344a7f5eSAndroid Build Coastguard Worker /// to elements in a 128-bit integer vector.
1850*344a7f5eSAndroid Build Coastguard Worker ///
1851*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1852*344a7f5eSAndroid Build Coastguard Worker ///
1853*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VMOVDQU / MOVDQU instruction.
1854*344a7f5eSAndroid Build Coastguard Worker ///
1855*344a7f5eSAndroid Build Coastguard Worker /// \param __p
1856*344a7f5eSAndroid Build Coastguard Worker /// A pointer to a memory location containing integer values.
1857*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the moved values.
1858*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_loadu_si128(__m128i const * __p)1859*344a7f5eSAndroid Build Coastguard Worker _mm_loadu_si128(__m128i const *__p)
1860*344a7f5eSAndroid Build Coastguard Worker {
1861*344a7f5eSAndroid Build Coastguard Worker struct __loadu_si128 {
1862*344a7f5eSAndroid Build Coastguard Worker __m128i __v;
1863*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1864*344a7f5eSAndroid Build Coastguard Worker return ((struct __loadu_si128*)__p)->__v;
1865*344a7f5eSAndroid Build Coastguard Worker }
1866*344a7f5eSAndroid Build Coastguard Worker
1867*344a7f5eSAndroid Build Coastguard Worker /// \brief Returns a vector of [2 x i64] where the lower element is taken from
1868*344a7f5eSAndroid Build Coastguard Worker /// the lower element of the operand, and the upper element is zero.
1869*344a7f5eSAndroid Build Coastguard Worker ///
1870*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1871*344a7f5eSAndroid Build Coastguard Worker ///
1872*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic corresponds to the \c VMOVQ / MOVQ instruction.
1873*344a7f5eSAndroid Build Coastguard Worker ///
1874*344a7f5eSAndroid Build Coastguard Worker /// \param __p
1875*344a7f5eSAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64]. Bits [63:0] are written to bits [63:0] of
1876*344a7f5eSAndroid Build Coastguard Worker /// the destination.
1877*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64]. The lower order bits contain the
1878*344a7f5eSAndroid Build Coastguard Worker /// moved value. The higher order bits are cleared.
1879*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_loadl_epi64(__m128i const * __p)1880*344a7f5eSAndroid Build Coastguard Worker _mm_loadl_epi64(__m128i const *__p)
1881*344a7f5eSAndroid Build Coastguard Worker {
1882*344a7f5eSAndroid Build Coastguard Worker struct __mm_loadl_epi64_struct {
1883*344a7f5eSAndroid Build Coastguard Worker long long __u;
1884*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1885*344a7f5eSAndroid Build Coastguard Worker return (__m128i) { ((struct __mm_loadl_epi64_struct*)__p)->__u, 0};
1886*344a7f5eSAndroid Build Coastguard Worker }
1887*344a7f5eSAndroid Build Coastguard Worker
1888*344a7f5eSAndroid Build Coastguard Worker /// \brief Generates a 128-bit vector of [4 x i32] with unspecified content.
1889*344a7f5eSAndroid Build Coastguard Worker /// This could be used as an argument to another intrinsic function where the
1890*344a7f5eSAndroid Build Coastguard Worker /// argument is required but the value is not actually used.
1891*344a7f5eSAndroid Build Coastguard Worker ///
1892*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1893*344a7f5eSAndroid Build Coastguard Worker ///
1894*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
1895*344a7f5eSAndroid Build Coastguard Worker ///
1896*344a7f5eSAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] with unspecified content.
1897*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_undefined_si128(void)1898*344a7f5eSAndroid Build Coastguard Worker _mm_undefined_si128(void)
1899*344a7f5eSAndroid Build Coastguard Worker {
1900*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_undef128();
1901*344a7f5eSAndroid Build Coastguard Worker }
1902*344a7f5eSAndroid Build Coastguard Worker
1903*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes both 64-bit values in a 128-bit vector of [2 x i64] with
1904*344a7f5eSAndroid Build Coastguard Worker /// the specified 64-bit integer values.
1905*344a7f5eSAndroid Build Coastguard Worker ///
1906*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1907*344a7f5eSAndroid Build Coastguard Worker ///
1908*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
1909*344a7f5eSAndroid Build Coastguard Worker /// instruction.
1910*344a7f5eSAndroid Build Coastguard Worker ///
1911*344a7f5eSAndroid Build Coastguard Worker /// \param __q1
1912*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the upper 64 bits of the
1913*344a7f5eSAndroid Build Coastguard Worker /// destination vector of [2 x i64].
1914*344a7f5eSAndroid Build Coastguard Worker /// \param __q0
1915*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the lower 64 bits of the
1916*344a7f5eSAndroid Build Coastguard Worker /// destination vector of [2 x i64].
1917*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [2 x i64] containing the values
1918*344a7f5eSAndroid Build Coastguard Worker /// provided in the operands.
1919*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set_epi64x(long long __q1,long long __q0)1920*344a7f5eSAndroid Build Coastguard Worker _mm_set_epi64x(long long __q1, long long __q0)
1921*344a7f5eSAndroid Build Coastguard Worker {
1922*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ __q0, __q1 };
1923*344a7f5eSAndroid Build Coastguard Worker }
1924*344a7f5eSAndroid Build Coastguard Worker
1925*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes both 64-bit values in a 128-bit vector of [2 x i64] with
1926*344a7f5eSAndroid Build Coastguard Worker /// the specified 64-bit integer values.
1927*344a7f5eSAndroid Build Coastguard Worker ///
1928*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1929*344a7f5eSAndroid Build Coastguard Worker ///
1930*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
1931*344a7f5eSAndroid Build Coastguard Worker /// instruction.
1932*344a7f5eSAndroid Build Coastguard Worker ///
1933*344a7f5eSAndroid Build Coastguard Worker /// \param __q1
1934*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the upper 64 bits of the
1935*344a7f5eSAndroid Build Coastguard Worker /// destination vector of [2 x i64].
1936*344a7f5eSAndroid Build Coastguard Worker /// \param __q0
1937*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the lower 64 bits of the
1938*344a7f5eSAndroid Build Coastguard Worker /// destination vector of [2 x i64].
1939*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [2 x i64] containing the values
1940*344a7f5eSAndroid Build Coastguard Worker /// provided in the operands.
1941*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set_epi64(__m64 __q1,__m64 __q0)1942*344a7f5eSAndroid Build Coastguard Worker _mm_set_epi64(__m64 __q1, __m64 __q0)
1943*344a7f5eSAndroid Build Coastguard Worker {
1944*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ (long long)__q0, (long long)__q1 };
1945*344a7f5eSAndroid Build Coastguard Worker }
1946*344a7f5eSAndroid Build Coastguard Worker
1947*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes the 32-bit values in a 128-bit vector of [4 x i32] with
1948*344a7f5eSAndroid Build Coastguard Worker /// the specified 32-bit integer values.
1949*344a7f5eSAndroid Build Coastguard Worker ///
1950*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1951*344a7f5eSAndroid Build Coastguard Worker ///
1952*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
1953*344a7f5eSAndroid Build Coastguard Worker /// instruction.
1954*344a7f5eSAndroid Build Coastguard Worker ///
1955*344a7f5eSAndroid Build Coastguard Worker /// \param __i3
1956*344a7f5eSAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [127:96] of the
1957*344a7f5eSAndroid Build Coastguard Worker /// destination vector.
1958*344a7f5eSAndroid Build Coastguard Worker /// \param __i2
1959*344a7f5eSAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [95:64] of the destination
1960*344a7f5eSAndroid Build Coastguard Worker /// vector.
1961*344a7f5eSAndroid Build Coastguard Worker /// \param __i1
1962*344a7f5eSAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [63:32] of the destination
1963*344a7f5eSAndroid Build Coastguard Worker /// vector.
1964*344a7f5eSAndroid Build Coastguard Worker /// \param __i0
1965*344a7f5eSAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [31:0] of the destination
1966*344a7f5eSAndroid Build Coastguard Worker /// vector.
1967*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [4 x i32] containing the values
1968*344a7f5eSAndroid Build Coastguard Worker /// provided in the operands.
1969*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set_epi32(int __i3,int __i2,int __i1,int __i0)1970*344a7f5eSAndroid Build Coastguard Worker _mm_set_epi32(int __i3, int __i2, int __i1, int __i0)
1971*344a7f5eSAndroid Build Coastguard Worker {
1972*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v4si){ __i0, __i1, __i2, __i3};
1973*344a7f5eSAndroid Build Coastguard Worker }
1974*344a7f5eSAndroid Build Coastguard Worker
1975*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes the 16-bit values in a 128-bit vector of [8 x i16] with
1976*344a7f5eSAndroid Build Coastguard Worker /// the specified 16-bit integer values.
1977*344a7f5eSAndroid Build Coastguard Worker ///
1978*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1979*344a7f5eSAndroid Build Coastguard Worker ///
1980*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
1981*344a7f5eSAndroid Build Coastguard Worker /// instruction.
1982*344a7f5eSAndroid Build Coastguard Worker ///
1983*344a7f5eSAndroid Build Coastguard Worker /// \param __w7
1984*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [127:112] of the
1985*344a7f5eSAndroid Build Coastguard Worker /// destination vector.
1986*344a7f5eSAndroid Build Coastguard Worker /// \param __w6
1987*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [111:96] of the
1988*344a7f5eSAndroid Build Coastguard Worker /// destination vector.
1989*344a7f5eSAndroid Build Coastguard Worker /// \param __w5
1990*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [95:80] of the destination
1991*344a7f5eSAndroid Build Coastguard Worker /// vector.
1992*344a7f5eSAndroid Build Coastguard Worker /// \param __w4
1993*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [79:64] of the destination
1994*344a7f5eSAndroid Build Coastguard Worker /// vector.
1995*344a7f5eSAndroid Build Coastguard Worker /// \param __w3
1996*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [63:48] of the destination
1997*344a7f5eSAndroid Build Coastguard Worker /// vector.
1998*344a7f5eSAndroid Build Coastguard Worker /// \param __w2
1999*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [47:32] of the destination
2000*344a7f5eSAndroid Build Coastguard Worker /// vector.
2001*344a7f5eSAndroid Build Coastguard Worker /// \param __w1
2002*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [31:16] of the destination
2003*344a7f5eSAndroid Build Coastguard Worker /// vector.
2004*344a7f5eSAndroid Build Coastguard Worker /// \param __w0
2005*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [15:0] of the destination
2006*344a7f5eSAndroid Build Coastguard Worker /// vector.
2007*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [8 x i16] containing the values
2008*344a7f5eSAndroid Build Coastguard Worker /// provided in the operands.
2009*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set_epi16(short __w7,short __w6,short __w5,short __w4,short __w3,short __w2,short __w1,short __w0)2010*344a7f5eSAndroid Build Coastguard Worker _mm_set_epi16(short __w7, short __w6, short __w5, short __w4, short __w3, short __w2, short __w1, short __w0)
2011*344a7f5eSAndroid Build Coastguard Worker {
2012*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v8hi){ __w0, __w1, __w2, __w3, __w4, __w5, __w6, __w7 };
2013*344a7f5eSAndroid Build Coastguard Worker }
2014*344a7f5eSAndroid Build Coastguard Worker
2015*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes the 8-bit values in a 128-bit vector of [16 x i8] with
2016*344a7f5eSAndroid Build Coastguard Worker /// the specified 8-bit integer values.
2017*344a7f5eSAndroid Build Coastguard Worker ///
2018*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2019*344a7f5eSAndroid Build Coastguard Worker ///
2020*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
2021*344a7f5eSAndroid Build Coastguard Worker /// instruction.
2022*344a7f5eSAndroid Build Coastguard Worker ///
2023*344a7f5eSAndroid Build Coastguard Worker /// \param __b15
2024*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [127:120] of the destination vector.
2025*344a7f5eSAndroid Build Coastguard Worker /// \param __b14
2026*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [119:112] of the destination vector.
2027*344a7f5eSAndroid Build Coastguard Worker /// \param __b13
2028*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [111:104] of the destination vector.
2029*344a7f5eSAndroid Build Coastguard Worker /// \param __b12
2030*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [103:96] of the destination vector.
2031*344a7f5eSAndroid Build Coastguard Worker /// \param __b11
2032*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [95:88] of the destination vector.
2033*344a7f5eSAndroid Build Coastguard Worker /// \param __b10
2034*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [87:80] of the destination vector.
2035*344a7f5eSAndroid Build Coastguard Worker /// \param __b9
2036*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [79:72] of the destination vector.
2037*344a7f5eSAndroid Build Coastguard Worker /// \param __b8
2038*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [71:64] of the destination vector.
2039*344a7f5eSAndroid Build Coastguard Worker /// \param __b7
2040*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [63:56] of the destination vector.
2041*344a7f5eSAndroid Build Coastguard Worker /// \param __b6
2042*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [55:48] of the destination vector.
2043*344a7f5eSAndroid Build Coastguard Worker /// \param __b5
2044*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [47:40] of the destination vector.
2045*344a7f5eSAndroid Build Coastguard Worker /// \param __b4
2046*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [39:32] of the destination vector.
2047*344a7f5eSAndroid Build Coastguard Worker /// \param __b3
2048*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [31:24] of the destination vector.
2049*344a7f5eSAndroid Build Coastguard Worker /// \param __b2
2050*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [23:16] of the destination vector.
2051*344a7f5eSAndroid Build Coastguard Worker /// \param __b1
2052*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [15:8] of the destination vector.
2053*344a7f5eSAndroid Build Coastguard Worker /// \param __b0
2054*344a7f5eSAndroid Build Coastguard Worker /// Initializes bits [7:0] of the destination vector.
2055*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [16 x i8] containing the values
2056*344a7f5eSAndroid Build Coastguard Worker /// provided in the operands.
2057*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_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)2058*344a7f5eSAndroid Build Coastguard Worker _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)
2059*344a7f5eSAndroid Build Coastguard Worker {
2060*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v16qi){ __b0, __b1, __b2, __b3, __b4, __b5, __b6, __b7, __b8, __b9, __b10, __b11, __b12, __b13, __b14, __b15 };
2061*344a7f5eSAndroid Build Coastguard Worker }
2062*344a7f5eSAndroid Build Coastguard Worker
2063*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes both values in a 128-bit integer vector with the
2064*344a7f5eSAndroid Build Coastguard Worker /// specified 64-bit integer value.
2065*344a7f5eSAndroid Build Coastguard Worker ///
2066*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2067*344a7f5eSAndroid Build Coastguard Worker ///
2068*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
2069*344a7f5eSAndroid Build Coastguard Worker /// instruction.
2070*344a7f5eSAndroid Build Coastguard Worker ///
2071*344a7f5eSAndroid Build Coastguard Worker /// \param __q
2072*344a7f5eSAndroid Build Coastguard Worker /// Integer value used to initialize the elements of the destination integer
2073*344a7f5eSAndroid Build Coastguard Worker /// vector.
2074*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit integer vector of [2 x i64] with both
2075*344a7f5eSAndroid Build Coastguard Worker /// elements containing the value provided in the operand.
2076*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set1_epi64x(long long __q)2077*344a7f5eSAndroid Build Coastguard Worker _mm_set1_epi64x(long long __q)
2078*344a7f5eSAndroid Build Coastguard Worker {
2079*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ __q, __q };
2080*344a7f5eSAndroid Build Coastguard Worker }
2081*344a7f5eSAndroid Build Coastguard Worker
2082*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes both values in a 128-bit vector of [2 x i64] with the
2083*344a7f5eSAndroid Build Coastguard Worker /// specified 64-bit value.
2084*344a7f5eSAndroid Build Coastguard Worker ///
2085*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2086*344a7f5eSAndroid Build Coastguard Worker ///
2087*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
2088*344a7f5eSAndroid Build Coastguard Worker /// instruction.
2089*344a7f5eSAndroid Build Coastguard Worker ///
2090*344a7f5eSAndroid Build Coastguard Worker /// \param __q
2091*344a7f5eSAndroid Build Coastguard Worker /// A 64-bit value used to initialize the elements of the destination integer
2092*344a7f5eSAndroid Build Coastguard Worker /// vector.
2093*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [2 x i64] with all elements
2094*344a7f5eSAndroid Build Coastguard Worker /// containing the value provided in the operand.
2095*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set1_epi64(__m64 __q)2096*344a7f5eSAndroid Build Coastguard Worker _mm_set1_epi64(__m64 __q)
2097*344a7f5eSAndroid Build Coastguard Worker {
2098*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ (long long)__q, (long long)__q };
2099*344a7f5eSAndroid Build Coastguard Worker }
2100*344a7f5eSAndroid Build Coastguard Worker
2101*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes all values in a 128-bit vector of [4 x i32] with the
2102*344a7f5eSAndroid Build Coastguard Worker /// specified 32-bit value.
2103*344a7f5eSAndroid Build Coastguard Worker ///
2104*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2105*344a7f5eSAndroid Build Coastguard Worker ///
2106*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
2107*344a7f5eSAndroid Build Coastguard Worker /// instruction.
2108*344a7f5eSAndroid Build Coastguard Worker ///
2109*344a7f5eSAndroid Build Coastguard Worker /// \param __i
2110*344a7f5eSAndroid Build Coastguard Worker /// A 32-bit value used to initialize the elements of the destination integer
2111*344a7f5eSAndroid Build Coastguard Worker /// vector.
2112*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [4 x i32] with all elements
2113*344a7f5eSAndroid Build Coastguard Worker /// containing the value provided in the operand.
2114*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set1_epi32(int __i)2115*344a7f5eSAndroid Build Coastguard Worker _mm_set1_epi32(int __i)
2116*344a7f5eSAndroid Build Coastguard Worker {
2117*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v4si){ __i, __i, __i, __i };
2118*344a7f5eSAndroid Build Coastguard Worker }
2119*344a7f5eSAndroid Build Coastguard Worker
2120*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes all values in a 128-bit vector of [8 x i16] with the
2121*344a7f5eSAndroid Build Coastguard Worker /// specified 16-bit value.
2122*344a7f5eSAndroid Build Coastguard Worker ///
2123*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2124*344a7f5eSAndroid Build Coastguard Worker ///
2125*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
2126*344a7f5eSAndroid Build Coastguard Worker /// instruction.
2127*344a7f5eSAndroid Build Coastguard Worker ///
2128*344a7f5eSAndroid Build Coastguard Worker /// \param __w
2129*344a7f5eSAndroid Build Coastguard Worker /// A 16-bit value used to initialize the elements of the destination integer
2130*344a7f5eSAndroid Build Coastguard Worker /// vector.
2131*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [8 x i16] with all elements
2132*344a7f5eSAndroid Build Coastguard Worker /// containing the value provided in the operand.
2133*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set1_epi16(short __w)2134*344a7f5eSAndroid Build Coastguard Worker _mm_set1_epi16(short __w)
2135*344a7f5eSAndroid Build Coastguard Worker {
2136*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v8hi){ __w, __w, __w, __w, __w, __w, __w, __w };
2137*344a7f5eSAndroid Build Coastguard Worker }
2138*344a7f5eSAndroid Build Coastguard Worker
2139*344a7f5eSAndroid Build Coastguard Worker /// \brief Initializes all values in a 128-bit vector of [16 x i8] with the
2140*344a7f5eSAndroid Build Coastguard Worker /// specified 8-bit value.
2141*344a7f5eSAndroid Build Coastguard Worker ///
2142*344a7f5eSAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2143*344a7f5eSAndroid Build Coastguard Worker ///
2144*344a7f5eSAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
2145*344a7f5eSAndroid Build Coastguard Worker /// instruction.
2146*344a7f5eSAndroid Build Coastguard Worker ///
2147*344a7f5eSAndroid Build Coastguard Worker /// \param __b
2148*344a7f5eSAndroid Build Coastguard Worker /// An 8-bit value used to initialize the elements of the destination integer
2149*344a7f5eSAndroid Build Coastguard Worker /// vector.
2150*344a7f5eSAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [16 x i8] with all elements
2151*344a7f5eSAndroid Build Coastguard Worker /// containing the value provided in the operand.
2152*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_set1_epi8(char __b)2153*344a7f5eSAndroid Build Coastguard Worker _mm_set1_epi8(char __b)
2154*344a7f5eSAndroid Build Coastguard Worker {
2155*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v16qi){ __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b };
2156*344a7f5eSAndroid Build Coastguard Worker }
2157*344a7f5eSAndroid Build Coastguard Worker
2158*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_setr_epi64(__m64 __q0,__m64 __q1)2159*344a7f5eSAndroid Build Coastguard Worker _mm_setr_epi64(__m64 __q0, __m64 __q1)
2160*344a7f5eSAndroid Build Coastguard Worker {
2161*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ (long long)__q0, (long long)__q1 };
2162*344a7f5eSAndroid Build Coastguard Worker }
2163*344a7f5eSAndroid Build Coastguard Worker
2164*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_setr_epi32(int __i0,int __i1,int __i2,int __i3)2165*344a7f5eSAndroid Build Coastguard Worker _mm_setr_epi32(int __i0, int __i1, int __i2, int __i3)
2166*344a7f5eSAndroid Build Coastguard Worker {
2167*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v4si){ __i0, __i1, __i2, __i3};
2168*344a7f5eSAndroid Build Coastguard Worker }
2169*344a7f5eSAndroid Build Coastguard Worker
2170*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_setr_epi16(short __w0,short __w1,short __w2,short __w3,short __w4,short __w5,short __w6,short __w7)2171*344a7f5eSAndroid Build Coastguard Worker _mm_setr_epi16(short __w0, short __w1, short __w2, short __w3, short __w4, short __w5, short __w6, short __w7)
2172*344a7f5eSAndroid Build Coastguard Worker {
2173*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v8hi){ __w0, __w1, __w2, __w3, __w4, __w5, __w6, __w7 };
2174*344a7f5eSAndroid Build Coastguard Worker }
2175*344a7f5eSAndroid Build Coastguard Worker
2176*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_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)2177*344a7f5eSAndroid Build Coastguard Worker _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)
2178*344a7f5eSAndroid Build Coastguard Worker {
2179*344a7f5eSAndroid Build Coastguard Worker return (__m128i)(__v16qi){ __b0, __b1, __b2, __b3, __b4, __b5, __b6, __b7, __b8, __b9, __b10, __b11, __b12, __b13, __b14, __b15 };
2180*344a7f5eSAndroid Build Coastguard Worker }
2181*344a7f5eSAndroid Build Coastguard Worker
2182*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_setzero_si128(void)2183*344a7f5eSAndroid Build Coastguard Worker _mm_setzero_si128(void)
2184*344a7f5eSAndroid Build Coastguard Worker {
2185*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ 0LL, 0LL };
2186*344a7f5eSAndroid Build Coastguard Worker }
2187*344a7f5eSAndroid Build Coastguard Worker
2188*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_store_si128(__m128i * __p,__m128i __b)2189*344a7f5eSAndroid Build Coastguard Worker _mm_store_si128(__m128i *__p, __m128i __b)
2190*344a7f5eSAndroid Build Coastguard Worker {
2191*344a7f5eSAndroid Build Coastguard Worker *__p = __b;
2192*344a7f5eSAndroid Build Coastguard Worker }
2193*344a7f5eSAndroid Build Coastguard Worker
2194*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_storeu_si128(__m128i * __p,__m128i __b)2195*344a7f5eSAndroid Build Coastguard Worker _mm_storeu_si128(__m128i *__p, __m128i __b)
2196*344a7f5eSAndroid Build Coastguard Worker {
2197*344a7f5eSAndroid Build Coastguard Worker struct __storeu_si128 {
2198*344a7f5eSAndroid Build Coastguard Worker __m128i __v;
2199*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
2200*344a7f5eSAndroid Build Coastguard Worker ((struct __storeu_si128*)__p)->__v = __b;
2201*344a7f5eSAndroid Build Coastguard Worker }
2202*344a7f5eSAndroid Build Coastguard Worker
2203*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_maskmoveu_si128(__m128i __d,__m128i __n,char * __p)2204*344a7f5eSAndroid Build Coastguard Worker _mm_maskmoveu_si128(__m128i __d, __m128i __n, char *__p)
2205*344a7f5eSAndroid Build Coastguard Worker {
2206*344a7f5eSAndroid Build Coastguard Worker __builtin_ia32_maskmovdqu((__v16qi)__d, (__v16qi)__n, __p);
2207*344a7f5eSAndroid Build Coastguard Worker }
2208*344a7f5eSAndroid Build Coastguard Worker
2209*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_storel_epi64(__m128i * __p,__m128i __a)2210*344a7f5eSAndroid Build Coastguard Worker _mm_storel_epi64(__m128i *__p, __m128i __a)
2211*344a7f5eSAndroid Build Coastguard Worker {
2212*344a7f5eSAndroid Build Coastguard Worker struct __mm_storel_epi64_struct {
2213*344a7f5eSAndroid Build Coastguard Worker long long __u;
2214*344a7f5eSAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
2215*344a7f5eSAndroid Build Coastguard Worker ((struct __mm_storel_epi64_struct*)__p)->__u = __a[0];
2216*344a7f5eSAndroid Build Coastguard Worker }
2217*344a7f5eSAndroid Build Coastguard Worker
2218*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_stream_pd(double * __p,__m128d __a)2219*344a7f5eSAndroid Build Coastguard Worker _mm_stream_pd(double *__p, __m128d __a)
2220*344a7f5eSAndroid Build Coastguard Worker {
2221*344a7f5eSAndroid Build Coastguard Worker __builtin_nontemporal_store((__v2df)__a, (__v2df*)__p);
2222*344a7f5eSAndroid Build Coastguard Worker }
2223*344a7f5eSAndroid Build Coastguard Worker
2224*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_stream_si128(__m128i * __p,__m128i __a)2225*344a7f5eSAndroid Build Coastguard Worker _mm_stream_si128(__m128i *__p, __m128i __a)
2226*344a7f5eSAndroid Build Coastguard Worker {
2227*344a7f5eSAndroid Build Coastguard Worker __builtin_nontemporal_store((__v2di)__a, (__v2di*)__p);
2228*344a7f5eSAndroid Build Coastguard Worker }
2229*344a7f5eSAndroid Build Coastguard Worker
2230*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_stream_si32(int * __p,int __a)2231*344a7f5eSAndroid Build Coastguard Worker _mm_stream_si32(int *__p, int __a)
2232*344a7f5eSAndroid Build Coastguard Worker {
2233*344a7f5eSAndroid Build Coastguard Worker __builtin_ia32_movnti(__p, __a);
2234*344a7f5eSAndroid Build Coastguard Worker }
2235*344a7f5eSAndroid Build Coastguard Worker
2236*344a7f5eSAndroid Build Coastguard Worker #ifdef __x86_64__
2237*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_stream_si64(long long * __p,long long __a)2238*344a7f5eSAndroid Build Coastguard Worker _mm_stream_si64(long long *__p, long long __a)
2239*344a7f5eSAndroid Build Coastguard Worker {
2240*344a7f5eSAndroid Build Coastguard Worker __builtin_ia32_movnti64(__p, __a);
2241*344a7f5eSAndroid Build Coastguard Worker }
2242*344a7f5eSAndroid Build Coastguard Worker #endif
2243*344a7f5eSAndroid Build Coastguard Worker
2244*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_clflush(void const * __p)2245*344a7f5eSAndroid Build Coastguard Worker _mm_clflush(void const *__p)
2246*344a7f5eSAndroid Build Coastguard Worker {
2247*344a7f5eSAndroid Build Coastguard Worker __builtin_ia32_clflush(__p);
2248*344a7f5eSAndroid Build Coastguard Worker }
2249*344a7f5eSAndroid Build Coastguard Worker
2250*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_lfence(void)2251*344a7f5eSAndroid Build Coastguard Worker _mm_lfence(void)
2252*344a7f5eSAndroid Build Coastguard Worker {
2253*344a7f5eSAndroid Build Coastguard Worker __builtin_ia32_lfence();
2254*344a7f5eSAndroid Build Coastguard Worker }
2255*344a7f5eSAndroid Build Coastguard Worker
2256*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_mfence(void)2257*344a7f5eSAndroid Build Coastguard Worker _mm_mfence(void)
2258*344a7f5eSAndroid Build Coastguard Worker {
2259*344a7f5eSAndroid Build Coastguard Worker __builtin_ia32_mfence();
2260*344a7f5eSAndroid Build Coastguard Worker }
2261*344a7f5eSAndroid Build Coastguard Worker
2262*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_packs_epi16(__m128i __a,__m128i __b)2263*344a7f5eSAndroid Build Coastguard Worker _mm_packs_epi16(__m128i __a, __m128i __b)
2264*344a7f5eSAndroid Build Coastguard Worker {
2265*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_packsswb128((__v8hi)__a, (__v8hi)__b);
2266*344a7f5eSAndroid Build Coastguard Worker }
2267*344a7f5eSAndroid Build Coastguard Worker
2268*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_packs_epi32(__m128i __a,__m128i __b)2269*344a7f5eSAndroid Build Coastguard Worker _mm_packs_epi32(__m128i __a, __m128i __b)
2270*344a7f5eSAndroid Build Coastguard Worker {
2271*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_packssdw128((__v4si)__a, (__v4si)__b);
2272*344a7f5eSAndroid Build Coastguard Worker }
2273*344a7f5eSAndroid Build Coastguard Worker
2274*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_packus_epi16(__m128i __a,__m128i __b)2275*344a7f5eSAndroid Build Coastguard Worker _mm_packus_epi16(__m128i __a, __m128i __b)
2276*344a7f5eSAndroid Build Coastguard Worker {
2277*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_packuswb128((__v8hi)__a, (__v8hi)__b);
2278*344a7f5eSAndroid Build Coastguard Worker }
2279*344a7f5eSAndroid Build Coastguard Worker
2280*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_extract_epi16(__m128i __a,int __imm)2281*344a7f5eSAndroid Build Coastguard Worker _mm_extract_epi16(__m128i __a, int __imm)
2282*344a7f5eSAndroid Build Coastguard Worker {
2283*344a7f5eSAndroid Build Coastguard Worker __v8hi __b = (__v8hi)__a;
2284*344a7f5eSAndroid Build Coastguard Worker return (unsigned short)__b[__imm & 7];
2285*344a7f5eSAndroid Build Coastguard Worker }
2286*344a7f5eSAndroid Build Coastguard Worker
2287*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_insert_epi16(__m128i __a,int __b,int __imm)2288*344a7f5eSAndroid Build Coastguard Worker _mm_insert_epi16(__m128i __a, int __b, int __imm)
2289*344a7f5eSAndroid Build Coastguard Worker {
2290*344a7f5eSAndroid Build Coastguard Worker __v8hi __c = (__v8hi)__a;
2291*344a7f5eSAndroid Build Coastguard Worker __c[__imm & 7] = __b;
2292*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__c;
2293*344a7f5eSAndroid Build Coastguard Worker }
2294*344a7f5eSAndroid Build Coastguard Worker
2295*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_movemask_epi8(__m128i __a)2296*344a7f5eSAndroid Build Coastguard Worker _mm_movemask_epi8(__m128i __a)
2297*344a7f5eSAndroid Build Coastguard Worker {
2298*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_pmovmskb128((__v16qi)__a);
2299*344a7f5eSAndroid Build Coastguard Worker }
2300*344a7f5eSAndroid Build Coastguard Worker
2301*344a7f5eSAndroid Build Coastguard Worker #define _mm_shuffle_epi32(a, imm) __extension__ ({ \
2302*344a7f5eSAndroid Build Coastguard Worker (__m128i)__builtin_shufflevector((__v4si)(__m128i)(a), \
2303*344a7f5eSAndroid Build Coastguard Worker (__v4si)_mm_undefined_si128(), \
2304*344a7f5eSAndroid Build Coastguard Worker ((imm) >> 0) & 0x3, ((imm) >> 2) & 0x3, \
2305*344a7f5eSAndroid Build Coastguard Worker ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3); })
2306*344a7f5eSAndroid Build Coastguard Worker
2307*344a7f5eSAndroid Build Coastguard Worker #define _mm_shufflelo_epi16(a, imm) __extension__ ({ \
2308*344a7f5eSAndroid Build Coastguard Worker (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \
2309*344a7f5eSAndroid Build Coastguard Worker (__v8hi)_mm_undefined_si128(), \
2310*344a7f5eSAndroid Build Coastguard Worker ((imm) >> 0) & 0x3, ((imm) >> 2) & 0x3, \
2311*344a7f5eSAndroid Build Coastguard Worker ((imm) >> 4) & 0x3, ((imm) >> 6) & 0x3, \
2312*344a7f5eSAndroid Build Coastguard Worker 4, 5, 6, 7); })
2313*344a7f5eSAndroid Build Coastguard Worker
2314*344a7f5eSAndroid Build Coastguard Worker #define _mm_shufflehi_epi16(a, imm) __extension__ ({ \
2315*344a7f5eSAndroid Build Coastguard Worker (__m128i)__builtin_shufflevector((__v8hi)(__m128i)(a), \
2316*344a7f5eSAndroid Build Coastguard Worker (__v8hi)_mm_undefined_si128(), \
2317*344a7f5eSAndroid Build Coastguard Worker 0, 1, 2, 3, \
2318*344a7f5eSAndroid Build Coastguard Worker 4 + (((imm) >> 0) & 0x3), \
2319*344a7f5eSAndroid Build Coastguard Worker 4 + (((imm) >> 2) & 0x3), \
2320*344a7f5eSAndroid Build Coastguard Worker 4 + (((imm) >> 4) & 0x3), \
2321*344a7f5eSAndroid Build Coastguard Worker 4 + (((imm) >> 6) & 0x3)); })
2322*344a7f5eSAndroid Build Coastguard Worker
2323*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpackhi_epi8(__m128i __a,__m128i __b)2324*344a7f5eSAndroid Build Coastguard Worker _mm_unpackhi_epi8(__m128i __a, __m128i __b)
2325*344a7f5eSAndroid Build Coastguard Worker {
2326*344a7f5eSAndroid Build Coastguard Worker 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);
2327*344a7f5eSAndroid Build Coastguard Worker }
2328*344a7f5eSAndroid Build Coastguard Worker
2329*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpackhi_epi16(__m128i __a,__m128i __b)2330*344a7f5eSAndroid Build Coastguard Worker _mm_unpackhi_epi16(__m128i __a, __m128i __b)
2331*344a7f5eSAndroid Build Coastguard Worker {
2332*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7);
2333*344a7f5eSAndroid Build Coastguard Worker }
2334*344a7f5eSAndroid Build Coastguard Worker
2335*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpackhi_epi32(__m128i __a,__m128i __b)2336*344a7f5eSAndroid Build Coastguard Worker _mm_unpackhi_epi32(__m128i __a, __m128i __b)
2337*344a7f5eSAndroid Build Coastguard Worker {
2338*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 2, 4+2, 3, 4+3);
2339*344a7f5eSAndroid Build Coastguard Worker }
2340*344a7f5eSAndroid Build Coastguard Worker
2341*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpackhi_epi64(__m128i __a,__m128i __b)2342*344a7f5eSAndroid Build Coastguard Worker _mm_unpackhi_epi64(__m128i __a, __m128i __b)
2343*344a7f5eSAndroid Build Coastguard Worker {
2344*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v2di)__a, (__v2di)__b, 1, 2+1);
2345*344a7f5eSAndroid Build Coastguard Worker }
2346*344a7f5eSAndroid Build Coastguard Worker
2347*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpacklo_epi8(__m128i __a,__m128i __b)2348*344a7f5eSAndroid Build Coastguard Worker _mm_unpacklo_epi8(__m128i __a, __m128i __b)
2349*344a7f5eSAndroid Build Coastguard Worker {
2350*344a7f5eSAndroid Build Coastguard Worker 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);
2351*344a7f5eSAndroid Build Coastguard Worker }
2352*344a7f5eSAndroid Build Coastguard Worker
2353*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpacklo_epi16(__m128i __a,__m128i __b)2354*344a7f5eSAndroid Build Coastguard Worker _mm_unpacklo_epi16(__m128i __a, __m128i __b)
2355*344a7f5eSAndroid Build Coastguard Worker {
2356*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3);
2357*344a7f5eSAndroid Build Coastguard Worker }
2358*344a7f5eSAndroid Build Coastguard Worker
2359*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpacklo_epi32(__m128i __a,__m128i __b)2360*344a7f5eSAndroid Build Coastguard Worker _mm_unpacklo_epi32(__m128i __a, __m128i __b)
2361*344a7f5eSAndroid Build Coastguard Worker {
2362*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 0, 4+0, 1, 4+1);
2363*344a7f5eSAndroid Build Coastguard Worker }
2364*344a7f5eSAndroid Build Coastguard Worker
2365*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_unpacklo_epi64(__m128i __a,__m128i __b)2366*344a7f5eSAndroid Build Coastguard Worker _mm_unpacklo_epi64(__m128i __a, __m128i __b)
2367*344a7f5eSAndroid Build Coastguard Worker {
2368*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v2di)__a, (__v2di)__b, 0, 2+0);
2369*344a7f5eSAndroid Build Coastguard Worker }
2370*344a7f5eSAndroid Build Coastguard Worker
2371*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS
_mm_movepi64_pi64(__m128i __a)2372*344a7f5eSAndroid Build Coastguard Worker _mm_movepi64_pi64(__m128i __a)
2373*344a7f5eSAndroid Build Coastguard Worker {
2374*344a7f5eSAndroid Build Coastguard Worker return (__m64)__a[0];
2375*344a7f5eSAndroid Build Coastguard Worker }
2376*344a7f5eSAndroid Build Coastguard Worker
2377*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_movpi64_epi64(__m64 __a)2378*344a7f5eSAndroid Build Coastguard Worker _mm_movpi64_epi64(__m64 __a)
2379*344a7f5eSAndroid Build Coastguard Worker {
2380*344a7f5eSAndroid Build Coastguard Worker return (__m128i){ (long long)__a, 0 };
2381*344a7f5eSAndroid Build Coastguard Worker }
2382*344a7f5eSAndroid Build Coastguard Worker
2383*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_move_epi64(__m128i __a)2384*344a7f5eSAndroid Build Coastguard Worker _mm_move_epi64(__m128i __a)
2385*344a7f5eSAndroid Build Coastguard Worker {
2386*344a7f5eSAndroid Build Coastguard Worker return __builtin_shufflevector((__v2di)__a, (__m128i){ 0 }, 0, 2);
2387*344a7f5eSAndroid Build Coastguard Worker }
2388*344a7f5eSAndroid Build Coastguard Worker
2389*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_unpackhi_pd(__m128d __a,__m128d __b)2390*344a7f5eSAndroid Build Coastguard Worker _mm_unpackhi_pd(__m128d __a, __m128d __b)
2391*344a7f5eSAndroid Build Coastguard Worker {
2392*344a7f5eSAndroid Build Coastguard Worker return __builtin_shufflevector((__v2df)__a, (__v2df)__b, 1, 2+1);
2393*344a7f5eSAndroid Build Coastguard Worker }
2394*344a7f5eSAndroid Build Coastguard Worker
2395*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_unpacklo_pd(__m128d __a,__m128d __b)2396*344a7f5eSAndroid Build Coastguard Worker _mm_unpacklo_pd(__m128d __a, __m128d __b)
2397*344a7f5eSAndroid Build Coastguard Worker {
2398*344a7f5eSAndroid Build Coastguard Worker return __builtin_shufflevector((__v2df)__a, (__v2df)__b, 0, 2+0);
2399*344a7f5eSAndroid Build Coastguard Worker }
2400*344a7f5eSAndroid Build Coastguard Worker
2401*344a7f5eSAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS
_mm_movemask_pd(__m128d __a)2402*344a7f5eSAndroid Build Coastguard Worker _mm_movemask_pd(__m128d __a)
2403*344a7f5eSAndroid Build Coastguard Worker {
2404*344a7f5eSAndroid Build Coastguard Worker return __builtin_ia32_movmskpd((__v2df)__a);
2405*344a7f5eSAndroid Build Coastguard Worker }
2406*344a7f5eSAndroid Build Coastguard Worker
2407*344a7f5eSAndroid Build Coastguard Worker #define _mm_shuffle_pd(a, b, i) __extension__ ({ \
2408*344a7f5eSAndroid Build Coastguard Worker (__m128d)__builtin_shufflevector((__v2df)(__m128d)(a), (__v2df)(__m128d)(b), \
2409*344a7f5eSAndroid Build Coastguard Worker 0 + (((i) >> 0) & 0x1), \
2410*344a7f5eSAndroid Build Coastguard Worker 2 + (((i) >> 1) & 0x1)); })
2411*344a7f5eSAndroid Build Coastguard Worker
2412*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_castpd_ps(__m128d __a)2413*344a7f5eSAndroid Build Coastguard Worker _mm_castpd_ps(__m128d __a)
2414*344a7f5eSAndroid Build Coastguard Worker {
2415*344a7f5eSAndroid Build Coastguard Worker return (__m128)__a;
2416*344a7f5eSAndroid Build Coastguard Worker }
2417*344a7f5eSAndroid Build Coastguard Worker
2418*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_castpd_si128(__m128d __a)2419*344a7f5eSAndroid Build Coastguard Worker _mm_castpd_si128(__m128d __a)
2420*344a7f5eSAndroid Build Coastguard Worker {
2421*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__a;
2422*344a7f5eSAndroid Build Coastguard Worker }
2423*344a7f5eSAndroid Build Coastguard Worker
2424*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_castps_pd(__m128 __a)2425*344a7f5eSAndroid Build Coastguard Worker _mm_castps_pd(__m128 __a)
2426*344a7f5eSAndroid Build Coastguard Worker {
2427*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__a;
2428*344a7f5eSAndroid Build Coastguard Worker }
2429*344a7f5eSAndroid Build Coastguard Worker
2430*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_castps_si128(__m128 __a)2431*344a7f5eSAndroid Build Coastguard Worker _mm_castps_si128(__m128 __a)
2432*344a7f5eSAndroid Build Coastguard Worker {
2433*344a7f5eSAndroid Build Coastguard Worker return (__m128i)__a;
2434*344a7f5eSAndroid Build Coastguard Worker }
2435*344a7f5eSAndroid Build Coastguard Worker
2436*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_castsi128_ps(__m128i __a)2437*344a7f5eSAndroid Build Coastguard Worker _mm_castsi128_ps(__m128i __a)
2438*344a7f5eSAndroid Build Coastguard Worker {
2439*344a7f5eSAndroid Build Coastguard Worker return (__m128)__a;
2440*344a7f5eSAndroid Build Coastguard Worker }
2441*344a7f5eSAndroid Build Coastguard Worker
2442*344a7f5eSAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS
_mm_castsi128_pd(__m128i __a)2443*344a7f5eSAndroid Build Coastguard Worker _mm_castsi128_pd(__m128i __a)
2444*344a7f5eSAndroid Build Coastguard Worker {
2445*344a7f5eSAndroid Build Coastguard Worker return (__m128d)__a;
2446*344a7f5eSAndroid Build Coastguard Worker }
2447*344a7f5eSAndroid Build Coastguard Worker
2448*344a7f5eSAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS
_mm_pause(void)2449*344a7f5eSAndroid Build Coastguard Worker _mm_pause(void)
2450*344a7f5eSAndroid Build Coastguard Worker {
2451*344a7f5eSAndroid Build Coastguard Worker __builtin_ia32_pause();
2452*344a7f5eSAndroid Build Coastguard Worker }
2453*344a7f5eSAndroid Build Coastguard Worker
2454*344a7f5eSAndroid Build Coastguard Worker #undef __DEFAULT_FN_ATTRS
2455*344a7f5eSAndroid Build Coastguard Worker
2456*344a7f5eSAndroid Build Coastguard Worker #define _MM_SHUFFLE2(x, y) (((x) << 1) | (y))
2457*344a7f5eSAndroid Build Coastguard Worker
2458*344a7f5eSAndroid Build Coastguard Worker #endif /* __EMMINTRIN_H */
2459