1*bed243d3SAndroid Build Coastguard Worker /*===---- emmintrin.h - SSE2 intrinsics ------------------------------------===
2*bed243d3SAndroid Build Coastguard Worker *
3*bed243d3SAndroid Build Coastguard Worker * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*bed243d3SAndroid Build Coastguard Worker * See https://llvm.org/LICENSE.txt for license information.
5*bed243d3SAndroid Build Coastguard Worker * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*bed243d3SAndroid Build Coastguard Worker *
7*bed243d3SAndroid Build Coastguard Worker *===-----------------------------------------------------------------------===
8*bed243d3SAndroid Build Coastguard Worker */
9*bed243d3SAndroid Build Coastguard Worker
10*bed243d3SAndroid Build Coastguard Worker #ifndef __EMMINTRIN_H
11*bed243d3SAndroid Build Coastguard Worker #define __EMMINTRIN_H
12*bed243d3SAndroid Build Coastguard Worker
13*bed243d3SAndroid Build Coastguard Worker #if !defined(__i386__) && !defined(__x86_64__)
14*bed243d3SAndroid Build Coastguard Worker #error "This header is only meant to be used on x86 and x64 architecture"
15*bed243d3SAndroid Build Coastguard Worker #endif
16*bed243d3SAndroid Build Coastguard Worker
17*bed243d3SAndroid Build Coastguard Worker #include <xmmintrin.h>
18*bed243d3SAndroid Build Coastguard Worker
19*bed243d3SAndroid Build Coastguard Worker typedef double __m128d __attribute__((__vector_size__(16), __aligned__(16)));
20*bed243d3SAndroid Build Coastguard Worker typedef long long __m128i __attribute__((__vector_size__(16), __aligned__(16)));
21*bed243d3SAndroid Build Coastguard Worker
22*bed243d3SAndroid Build Coastguard Worker typedef double __m128d_u __attribute__((__vector_size__(16), __aligned__(1)));
23*bed243d3SAndroid Build Coastguard Worker typedef long long __m128i_u
24*bed243d3SAndroid Build Coastguard Worker __attribute__((__vector_size__(16), __aligned__(1)));
25*bed243d3SAndroid Build Coastguard Worker
26*bed243d3SAndroid Build Coastguard Worker /* Type defines. */
27*bed243d3SAndroid Build Coastguard Worker typedef double __v2df __attribute__((__vector_size__(16)));
28*bed243d3SAndroid Build Coastguard Worker typedef long long __v2di __attribute__((__vector_size__(16)));
29*bed243d3SAndroid Build Coastguard Worker typedef short __v8hi __attribute__((__vector_size__(16)));
30*bed243d3SAndroid Build Coastguard Worker typedef char __v16qi __attribute__((__vector_size__(16)));
31*bed243d3SAndroid Build Coastguard Worker
32*bed243d3SAndroid Build Coastguard Worker /* Unsigned types */
33*bed243d3SAndroid Build Coastguard Worker typedef unsigned long long __v2du __attribute__((__vector_size__(16)));
34*bed243d3SAndroid Build Coastguard Worker typedef unsigned short __v8hu __attribute__((__vector_size__(16)));
35*bed243d3SAndroid Build Coastguard Worker typedef unsigned char __v16qu __attribute__((__vector_size__(16)));
36*bed243d3SAndroid Build Coastguard Worker
37*bed243d3SAndroid Build Coastguard Worker /* We need an explicitly signed variant for char. Note that this shouldn't
38*bed243d3SAndroid Build Coastguard Worker * appear in the interface though. */
39*bed243d3SAndroid Build Coastguard Worker typedef signed char __v16qs __attribute__((__vector_size__(16)));
40*bed243d3SAndroid Build Coastguard Worker
41*bed243d3SAndroid Build Coastguard Worker #ifdef __SSE2__
42*bed243d3SAndroid Build Coastguard Worker /* Both _Float16 and __bf16 require SSE2 being enabled. */
43*bed243d3SAndroid Build Coastguard Worker typedef _Float16 __v8hf __attribute__((__vector_size__(16), __aligned__(16)));
44*bed243d3SAndroid Build Coastguard Worker typedef _Float16 __m128h __attribute__((__vector_size__(16), __aligned__(16)));
45*bed243d3SAndroid Build Coastguard Worker typedef _Float16 __m128h_u __attribute__((__vector_size__(16), __aligned__(1)));
46*bed243d3SAndroid Build Coastguard Worker
47*bed243d3SAndroid Build Coastguard Worker typedef __bf16 __v8bf __attribute__((__vector_size__(16), __aligned__(16)));
48*bed243d3SAndroid Build Coastguard Worker typedef __bf16 __m128bh __attribute__((__vector_size__(16), __aligned__(16)));
49*bed243d3SAndroid Build Coastguard Worker #endif
50*bed243d3SAndroid Build Coastguard Worker
51*bed243d3SAndroid Build Coastguard Worker /* Define the default attributes for the functions in this file. */
52*bed243d3SAndroid Build Coastguard Worker #define __DEFAULT_FN_ATTRS \
53*bed243d3SAndroid Build Coastguard Worker __attribute__((__always_inline__, __nodebug__, \
54*bed243d3SAndroid Build Coastguard Worker __target__("sse2,no-evex512"), __min_vector_width__(128)))
55*bed243d3SAndroid Build Coastguard Worker #define __DEFAULT_FN_ATTRS_MMX \
56*bed243d3SAndroid Build Coastguard Worker __attribute__((__always_inline__, __nodebug__, \
57*bed243d3SAndroid Build Coastguard Worker __target__("mmx,sse2,no-evex512"), __min_vector_width__(64)))
58*bed243d3SAndroid Build Coastguard Worker
59*bed243d3SAndroid Build Coastguard Worker /// Adds lower double-precision values in both operands and returns the
60*bed243d3SAndroid Build Coastguard Worker /// sum in the lower 64 bits of the result. The upper 64 bits of the result
61*bed243d3SAndroid Build Coastguard Worker /// are copied from the upper double-precision value of the first operand.
62*bed243d3SAndroid Build Coastguard Worker ///
63*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
64*bed243d3SAndroid Build Coastguard Worker ///
65*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VADDSD / ADDSD </c> instruction.
66*bed243d3SAndroid Build Coastguard Worker ///
67*bed243d3SAndroid Build Coastguard Worker /// \param __a
68*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
69*bed243d3SAndroid Build Coastguard Worker /// \param __b
70*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
71*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
72*bed243d3SAndroid Build Coastguard Worker /// sum of the lower 64 bits of both operands. The upper 64 bits are copied
73*bed243d3SAndroid Build Coastguard Worker /// from the upper 64 bits of the first source operand.
_mm_add_sd(__m128d __a,__m128d __b)74*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_add_sd(__m128d __a,
75*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
76*bed243d3SAndroid Build Coastguard Worker __a[0] += __b[0];
77*bed243d3SAndroid Build Coastguard Worker return __a;
78*bed243d3SAndroid Build Coastguard Worker }
79*bed243d3SAndroid Build Coastguard Worker
80*bed243d3SAndroid Build Coastguard Worker /// Adds two 128-bit vectors of [2 x double].
81*bed243d3SAndroid Build Coastguard Worker ///
82*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
83*bed243d3SAndroid Build Coastguard Worker ///
84*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VADDPD / ADDPD </c> instruction.
85*bed243d3SAndroid Build Coastguard Worker ///
86*bed243d3SAndroid Build Coastguard Worker /// \param __a
87*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
88*bed243d3SAndroid Build Coastguard Worker /// \param __b
89*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
90*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the sums of both
91*bed243d3SAndroid Build Coastguard Worker /// operands.
_mm_add_pd(__m128d __a,__m128d __b)92*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_add_pd(__m128d __a,
93*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
94*bed243d3SAndroid Build Coastguard Worker return (__m128d)((__v2df)__a + (__v2df)__b);
95*bed243d3SAndroid Build Coastguard Worker }
96*bed243d3SAndroid Build Coastguard Worker
97*bed243d3SAndroid Build Coastguard Worker /// Subtracts the lower double-precision value of the second operand
98*bed243d3SAndroid Build Coastguard Worker /// from the lower double-precision value of the first operand and returns
99*bed243d3SAndroid Build Coastguard Worker /// the difference in the lower 64 bits of the result. The upper 64 bits of
100*bed243d3SAndroid Build Coastguard Worker /// the result are copied from the upper double-precision value of the first
101*bed243d3SAndroid Build Coastguard Worker /// operand.
102*bed243d3SAndroid Build Coastguard Worker ///
103*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
104*bed243d3SAndroid Build Coastguard Worker ///
105*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VSUBSD / SUBSD </c> instruction.
106*bed243d3SAndroid Build Coastguard Worker ///
107*bed243d3SAndroid Build Coastguard Worker /// \param __a
108*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the minuend.
109*bed243d3SAndroid Build Coastguard Worker /// \param __b
110*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the subtrahend.
111*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
112*bed243d3SAndroid Build Coastguard Worker /// difference of the lower 64 bits of both operands. The upper 64 bits are
113*bed243d3SAndroid Build Coastguard Worker /// copied from the upper 64 bits of the first source operand.
_mm_sub_sd(__m128d __a,__m128d __b)114*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sub_sd(__m128d __a,
115*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
116*bed243d3SAndroid Build Coastguard Worker __a[0] -= __b[0];
117*bed243d3SAndroid Build Coastguard Worker return __a;
118*bed243d3SAndroid Build Coastguard Worker }
119*bed243d3SAndroid Build Coastguard Worker
120*bed243d3SAndroid Build Coastguard Worker /// Subtracts two 128-bit vectors of [2 x double].
121*bed243d3SAndroid Build Coastguard Worker ///
122*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
123*bed243d3SAndroid Build Coastguard Worker ///
124*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VSUBPD / SUBPD </c> instruction.
125*bed243d3SAndroid Build Coastguard Worker ///
126*bed243d3SAndroid Build Coastguard Worker /// \param __a
127*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the minuend.
128*bed243d3SAndroid Build Coastguard Worker /// \param __b
129*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the subtrahend.
130*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the differences between
131*bed243d3SAndroid Build Coastguard Worker /// both operands.
_mm_sub_pd(__m128d __a,__m128d __b)132*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sub_pd(__m128d __a,
133*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
134*bed243d3SAndroid Build Coastguard Worker return (__m128d)((__v2df)__a - (__v2df)__b);
135*bed243d3SAndroid Build Coastguard Worker }
136*bed243d3SAndroid Build Coastguard Worker
137*bed243d3SAndroid Build Coastguard Worker /// Multiplies lower double-precision values in both operands and returns
138*bed243d3SAndroid Build Coastguard Worker /// the product in the lower 64 bits of the result. The upper 64 bits of the
139*bed243d3SAndroid Build Coastguard Worker /// result are copied from the upper double-precision value of the first
140*bed243d3SAndroid Build Coastguard Worker /// operand.
141*bed243d3SAndroid Build Coastguard Worker ///
142*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
143*bed243d3SAndroid Build Coastguard Worker ///
144*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMULSD / MULSD </c> instruction.
145*bed243d3SAndroid Build Coastguard Worker ///
146*bed243d3SAndroid Build Coastguard Worker /// \param __a
147*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
148*bed243d3SAndroid Build Coastguard Worker /// \param __b
149*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
150*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
151*bed243d3SAndroid Build Coastguard Worker /// product of the lower 64 bits of both operands. The upper 64 bits are
152*bed243d3SAndroid Build Coastguard Worker /// copied from the upper 64 bits of the first source operand.
_mm_mul_sd(__m128d __a,__m128d __b)153*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_mul_sd(__m128d __a,
154*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
155*bed243d3SAndroid Build Coastguard Worker __a[0] *= __b[0];
156*bed243d3SAndroid Build Coastguard Worker return __a;
157*bed243d3SAndroid Build Coastguard Worker }
158*bed243d3SAndroid Build Coastguard Worker
159*bed243d3SAndroid Build Coastguard Worker /// Multiplies two 128-bit vectors of [2 x double].
160*bed243d3SAndroid Build Coastguard Worker ///
161*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
162*bed243d3SAndroid Build Coastguard Worker ///
163*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMULPD / MULPD </c> instruction.
164*bed243d3SAndroid Build Coastguard Worker ///
165*bed243d3SAndroid Build Coastguard Worker /// \param __a
166*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands.
167*bed243d3SAndroid Build Coastguard Worker /// \param __b
168*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands.
169*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the products of both
170*bed243d3SAndroid Build Coastguard Worker /// operands.
_mm_mul_pd(__m128d __a,__m128d __b)171*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_mul_pd(__m128d __a,
172*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
173*bed243d3SAndroid Build Coastguard Worker return (__m128d)((__v2df)__a * (__v2df)__b);
174*bed243d3SAndroid Build Coastguard Worker }
175*bed243d3SAndroid Build Coastguard Worker
176*bed243d3SAndroid Build Coastguard Worker /// Divides the lower double-precision value of the first operand by the
177*bed243d3SAndroid Build Coastguard Worker /// lower double-precision value of the second operand and returns the
178*bed243d3SAndroid Build Coastguard Worker /// quotient in the lower 64 bits of the result. The upper 64 bits of the
179*bed243d3SAndroid Build Coastguard Worker /// result are copied from the upper double-precision value of the first
180*bed243d3SAndroid Build Coastguard Worker /// operand.
181*bed243d3SAndroid Build Coastguard Worker ///
182*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
183*bed243d3SAndroid Build Coastguard Worker ///
184*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VDIVSD / DIVSD </c> instruction.
185*bed243d3SAndroid Build Coastguard Worker ///
186*bed243d3SAndroid Build Coastguard Worker /// \param __a
187*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the dividend.
188*bed243d3SAndroid Build Coastguard Worker /// \param __b
189*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing divisor.
190*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
191*bed243d3SAndroid Build Coastguard Worker /// quotient of the lower 64 bits of both operands. The upper 64 bits are
192*bed243d3SAndroid Build Coastguard Worker /// copied from the upper 64 bits of the first source operand.
_mm_div_sd(__m128d __a,__m128d __b)193*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_div_sd(__m128d __a,
194*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
195*bed243d3SAndroid Build Coastguard Worker __a[0] /= __b[0];
196*bed243d3SAndroid Build Coastguard Worker return __a;
197*bed243d3SAndroid Build Coastguard Worker }
198*bed243d3SAndroid Build Coastguard Worker
199*bed243d3SAndroid Build Coastguard Worker /// Performs an element-by-element division of two 128-bit vectors of
200*bed243d3SAndroid Build Coastguard Worker /// [2 x double].
201*bed243d3SAndroid Build Coastguard Worker ///
202*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
203*bed243d3SAndroid Build Coastguard Worker ///
204*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VDIVPD / DIVPD </c> instruction.
205*bed243d3SAndroid Build Coastguard Worker ///
206*bed243d3SAndroid Build Coastguard Worker /// \param __a
207*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the dividend.
208*bed243d3SAndroid Build Coastguard Worker /// \param __b
209*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the divisor.
210*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the quotients of both
211*bed243d3SAndroid Build Coastguard Worker /// operands.
_mm_div_pd(__m128d __a,__m128d __b)212*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_div_pd(__m128d __a,
213*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
214*bed243d3SAndroid Build Coastguard Worker return (__m128d)((__v2df)__a / (__v2df)__b);
215*bed243d3SAndroid Build Coastguard Worker }
216*bed243d3SAndroid Build Coastguard Worker
217*bed243d3SAndroid Build Coastguard Worker /// Calculates the square root of the lower double-precision value of
218*bed243d3SAndroid Build Coastguard Worker /// the second operand and returns it in the lower 64 bits of the result.
219*bed243d3SAndroid Build Coastguard Worker /// The upper 64 bits of the result are copied from the upper
220*bed243d3SAndroid Build Coastguard Worker /// double-precision value of the first operand.
221*bed243d3SAndroid Build Coastguard Worker ///
222*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
223*bed243d3SAndroid Build Coastguard Worker ///
224*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VSQRTSD / SQRTSD </c> instruction.
225*bed243d3SAndroid Build Coastguard Worker ///
226*bed243d3SAndroid Build Coastguard Worker /// \param __a
227*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands. The
228*bed243d3SAndroid Build Coastguard Worker /// upper 64 bits of this operand are copied to the upper 64 bits of the
229*bed243d3SAndroid Build Coastguard Worker /// result.
230*bed243d3SAndroid Build Coastguard Worker /// \param __b
231*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands. The
232*bed243d3SAndroid Build Coastguard Worker /// square root is calculated using the lower 64 bits of this operand.
233*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
234*bed243d3SAndroid Build Coastguard Worker /// square root of the lower 64 bits of operand \a __b, and whose upper 64
235*bed243d3SAndroid Build Coastguard Worker /// bits are copied from the upper 64 bits of operand \a __a.
_mm_sqrt_sd(__m128d __a,__m128d __b)236*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sqrt_sd(__m128d __a,
237*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
238*bed243d3SAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_sqrtsd((__v2df)__b);
239*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__c[0], __a[1]};
240*bed243d3SAndroid Build Coastguard Worker }
241*bed243d3SAndroid Build Coastguard Worker
242*bed243d3SAndroid Build Coastguard Worker /// Calculates the square root of the each of two values stored in a
243*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double].
244*bed243d3SAndroid Build Coastguard Worker ///
245*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
246*bed243d3SAndroid Build Coastguard Worker ///
247*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VSQRTPD / SQRTPD </c> instruction.
248*bed243d3SAndroid Build Coastguard Worker ///
249*bed243d3SAndroid Build Coastguard Worker /// \param __a
250*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
251*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the square roots of the
252*bed243d3SAndroid Build Coastguard Worker /// values in the operand.
_mm_sqrt_pd(__m128d __a)253*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_sqrt_pd(__m128d __a) {
254*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_sqrtpd((__v2df)__a);
255*bed243d3SAndroid Build Coastguard Worker }
256*bed243d3SAndroid Build Coastguard Worker
257*bed243d3SAndroid Build Coastguard Worker /// Compares lower 64-bit double-precision values of both operands, and
258*bed243d3SAndroid Build Coastguard Worker /// returns the lesser of the pair of values in the lower 64-bits of the
259*bed243d3SAndroid Build Coastguard Worker /// result. The upper 64 bits of the result are copied from the upper
260*bed243d3SAndroid Build Coastguard Worker /// double-precision value of the first operand.
261*bed243d3SAndroid Build Coastguard Worker ///
262*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
263*bed243d3SAndroid Build Coastguard Worker ///
264*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMINSD / MINSD </c> instruction.
265*bed243d3SAndroid Build Coastguard Worker ///
266*bed243d3SAndroid Build Coastguard Worker /// \param __a
267*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands. The
268*bed243d3SAndroid Build Coastguard Worker /// lower 64 bits of this operand are used in the comparison.
269*bed243d3SAndroid Build Coastguard Worker /// \param __b
270*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands. The
271*bed243d3SAndroid Build Coastguard Worker /// lower 64 bits of this operand are used in the comparison.
272*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
273*bed243d3SAndroid Build Coastguard Worker /// minimum value between both operands. The upper 64 bits are copied from
274*bed243d3SAndroid Build Coastguard Worker /// the upper 64 bits of the first source operand.
_mm_min_sd(__m128d __a,__m128d __b)275*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_min_sd(__m128d __a,
276*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
277*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_minsd((__v2df)__a, (__v2df)__b);
278*bed243d3SAndroid Build Coastguard Worker }
279*bed243d3SAndroid Build Coastguard Worker
280*bed243d3SAndroid Build Coastguard Worker /// Performs element-by-element comparison of the two 128-bit vectors of
281*bed243d3SAndroid Build Coastguard Worker /// [2 x double] and returns the vector containing the lesser of each pair of
282*bed243d3SAndroid Build Coastguard Worker /// values.
283*bed243d3SAndroid Build Coastguard Worker ///
284*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
285*bed243d3SAndroid Build Coastguard Worker ///
286*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMINPD / MINPD </c> instruction.
287*bed243d3SAndroid Build Coastguard Worker ///
288*bed243d3SAndroid Build Coastguard Worker /// \param __a
289*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands.
290*bed243d3SAndroid Build Coastguard Worker /// \param __b
291*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands.
292*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the minimum values
293*bed243d3SAndroid Build Coastguard Worker /// between both operands.
_mm_min_pd(__m128d __a,__m128d __b)294*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_min_pd(__m128d __a,
295*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
296*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_minpd((__v2df)__a, (__v2df)__b);
297*bed243d3SAndroid Build Coastguard Worker }
298*bed243d3SAndroid Build Coastguard Worker
299*bed243d3SAndroid Build Coastguard Worker /// Compares lower 64-bit double-precision values of both operands, and
300*bed243d3SAndroid Build Coastguard Worker /// returns the greater of the pair of values in the lower 64-bits of the
301*bed243d3SAndroid Build Coastguard Worker /// result. The upper 64 bits of the result are copied from the upper
302*bed243d3SAndroid Build Coastguard Worker /// double-precision value of the first operand.
303*bed243d3SAndroid Build Coastguard Worker ///
304*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
305*bed243d3SAndroid Build Coastguard Worker ///
306*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMAXSD / MAXSD </c> instruction.
307*bed243d3SAndroid Build Coastguard Worker ///
308*bed243d3SAndroid Build Coastguard Worker /// \param __a
309*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands. The
310*bed243d3SAndroid Build Coastguard Worker /// lower 64 bits of this operand are used in the comparison.
311*bed243d3SAndroid Build Coastguard Worker /// \param __b
312*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands. The
313*bed243d3SAndroid Build Coastguard Worker /// lower 64 bits of this operand are used in the comparison.
314*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
315*bed243d3SAndroid Build Coastguard Worker /// maximum value between both operands. The upper 64 bits are copied from
316*bed243d3SAndroid Build Coastguard Worker /// the upper 64 bits of the first source operand.
_mm_max_sd(__m128d __a,__m128d __b)317*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_max_sd(__m128d __a,
318*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
319*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_maxsd((__v2df)__a, (__v2df)__b);
320*bed243d3SAndroid Build Coastguard Worker }
321*bed243d3SAndroid Build Coastguard Worker
322*bed243d3SAndroid Build Coastguard Worker /// Performs element-by-element comparison of the two 128-bit vectors of
323*bed243d3SAndroid Build Coastguard Worker /// [2 x double] and returns the vector containing the greater of each pair
324*bed243d3SAndroid Build Coastguard Worker /// of values.
325*bed243d3SAndroid Build Coastguard Worker ///
326*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
327*bed243d3SAndroid Build Coastguard Worker ///
328*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMAXPD / MAXPD </c> instruction.
329*bed243d3SAndroid Build Coastguard Worker ///
330*bed243d3SAndroid Build Coastguard Worker /// \param __a
331*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands.
332*bed243d3SAndroid Build Coastguard Worker /// \param __b
333*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the operands.
334*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the maximum values
335*bed243d3SAndroid Build Coastguard Worker /// between both operands.
_mm_max_pd(__m128d __a,__m128d __b)336*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_max_pd(__m128d __a,
337*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
338*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_maxpd((__v2df)__a, (__v2df)__b);
339*bed243d3SAndroid Build Coastguard Worker }
340*bed243d3SAndroid Build Coastguard Worker
341*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise AND of two 128-bit vectors of [2 x double].
342*bed243d3SAndroid Build Coastguard Worker ///
343*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
344*bed243d3SAndroid Build Coastguard Worker ///
345*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPAND / PAND </c> instruction.
346*bed243d3SAndroid Build Coastguard Worker ///
347*bed243d3SAndroid Build Coastguard Worker /// \param __a
348*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
349*bed243d3SAndroid Build Coastguard Worker /// \param __b
350*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
351*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the bitwise AND of the
352*bed243d3SAndroid Build Coastguard Worker /// values between both operands.
_mm_and_pd(__m128d __a,__m128d __b)353*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_and_pd(__m128d __a,
354*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
355*bed243d3SAndroid Build Coastguard Worker return (__m128d)((__v2du)__a & (__v2du)__b);
356*bed243d3SAndroid Build Coastguard Worker }
357*bed243d3SAndroid Build Coastguard Worker
358*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise AND of two 128-bit vectors of [2 x double], using
359*bed243d3SAndroid Build Coastguard Worker /// the one's complement of the values contained in the first source operand.
360*bed243d3SAndroid Build Coastguard Worker ///
361*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
362*bed243d3SAndroid Build Coastguard Worker ///
363*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPANDN / PANDN </c> instruction.
364*bed243d3SAndroid Build Coastguard Worker ///
365*bed243d3SAndroid Build Coastguard Worker /// \param __a
366*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the left source operand. The
367*bed243d3SAndroid Build Coastguard Worker /// one's complement of this value is used in the bitwise AND.
368*bed243d3SAndroid Build Coastguard Worker /// \param __b
369*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the right source operand.
370*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the bitwise AND of the
371*bed243d3SAndroid Build Coastguard Worker /// values in the second operand and the one's complement of the first
372*bed243d3SAndroid Build Coastguard Worker /// operand.
_mm_andnot_pd(__m128d __a,__m128d __b)373*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_andnot_pd(__m128d __a,
374*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
375*bed243d3SAndroid Build Coastguard Worker return (__m128d)(~(__v2du)__a & (__v2du)__b);
376*bed243d3SAndroid Build Coastguard Worker }
377*bed243d3SAndroid Build Coastguard Worker
378*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise OR of two 128-bit vectors of [2 x double].
379*bed243d3SAndroid Build Coastguard Worker ///
380*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
381*bed243d3SAndroid Build Coastguard Worker ///
382*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPOR / POR </c> instruction.
383*bed243d3SAndroid Build Coastguard Worker ///
384*bed243d3SAndroid Build Coastguard Worker /// \param __a
385*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
386*bed243d3SAndroid Build Coastguard Worker /// \param __b
387*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
388*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the bitwise OR of the
389*bed243d3SAndroid Build Coastguard Worker /// values between both operands.
_mm_or_pd(__m128d __a,__m128d __b)390*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_or_pd(__m128d __a,
391*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
392*bed243d3SAndroid Build Coastguard Worker return (__m128d)((__v2du)__a | (__v2du)__b);
393*bed243d3SAndroid Build Coastguard Worker }
394*bed243d3SAndroid Build Coastguard Worker
395*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise XOR of two 128-bit vectors of [2 x double].
396*bed243d3SAndroid Build Coastguard Worker ///
397*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
398*bed243d3SAndroid Build Coastguard Worker ///
399*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPXOR / PXOR </c> instruction.
400*bed243d3SAndroid Build Coastguard Worker ///
401*bed243d3SAndroid Build Coastguard Worker /// \param __a
402*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
403*bed243d3SAndroid Build Coastguard Worker /// \param __b
404*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing one of the source operands.
405*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the bitwise XOR of the
406*bed243d3SAndroid Build Coastguard Worker /// values between both operands.
_mm_xor_pd(__m128d __a,__m128d __b)407*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_xor_pd(__m128d __a,
408*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
409*bed243d3SAndroid Build Coastguard Worker return (__m128d)((__v2du)__a ^ (__v2du)__b);
410*bed243d3SAndroid Build Coastguard Worker }
411*bed243d3SAndroid Build Coastguard Worker
412*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
413*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] for equality.
414*bed243d3SAndroid Build Coastguard Worker ///
415*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
416*bed243d3SAndroid Build Coastguard Worker ///
417*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
418*bed243d3SAndroid Build Coastguard Worker ///
419*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPEQPD / CMPEQPD </c> instruction.
420*bed243d3SAndroid Build Coastguard Worker ///
421*bed243d3SAndroid Build Coastguard Worker /// \param __a
422*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
423*bed243d3SAndroid Build Coastguard Worker /// \param __b
424*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
425*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpeq_pd(__m128d __a,__m128d __b)426*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpeq_pd(__m128d __a,
427*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
428*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpeqpd((__v2df)__a, (__v2df)__b);
429*bed243d3SAndroid Build Coastguard Worker }
430*bed243d3SAndroid Build Coastguard Worker
431*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
432*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
433*bed243d3SAndroid Build Coastguard Worker /// operand are less than those in the second operand.
434*bed243d3SAndroid Build Coastguard Worker ///
435*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
436*bed243d3SAndroid Build Coastguard Worker ///
437*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
438*bed243d3SAndroid Build Coastguard Worker ///
439*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLTPD / CMPLTPD </c> instruction.
440*bed243d3SAndroid Build Coastguard Worker ///
441*bed243d3SAndroid Build Coastguard Worker /// \param __a
442*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
443*bed243d3SAndroid Build Coastguard Worker /// \param __b
444*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
445*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmplt_pd(__m128d __a,__m128d __b)446*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmplt_pd(__m128d __a,
447*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
448*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpltpd((__v2df)__a, (__v2df)__b);
449*bed243d3SAndroid Build Coastguard Worker }
450*bed243d3SAndroid Build Coastguard Worker
451*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
452*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
453*bed243d3SAndroid Build Coastguard Worker /// operand are less than or equal to those in the second operand.
454*bed243d3SAndroid Build Coastguard Worker ///
455*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
456*bed243d3SAndroid Build Coastguard Worker ///
457*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
458*bed243d3SAndroid Build Coastguard Worker ///
459*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLEPD / CMPLEPD </c> instruction.
460*bed243d3SAndroid Build Coastguard Worker ///
461*bed243d3SAndroid Build Coastguard Worker /// \param __a
462*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
463*bed243d3SAndroid Build Coastguard Worker /// \param __b
464*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
465*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmple_pd(__m128d __a,__m128d __b)466*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmple_pd(__m128d __a,
467*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
468*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmplepd((__v2df)__a, (__v2df)__b);
469*bed243d3SAndroid Build Coastguard Worker }
470*bed243d3SAndroid Build Coastguard Worker
471*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
472*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
473*bed243d3SAndroid Build Coastguard Worker /// operand are greater than those in the second operand.
474*bed243d3SAndroid Build Coastguard Worker ///
475*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
476*bed243d3SAndroid Build Coastguard Worker ///
477*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
478*bed243d3SAndroid Build Coastguard Worker ///
479*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLTPD / CMPLTPD </c> instruction.
480*bed243d3SAndroid Build Coastguard Worker ///
481*bed243d3SAndroid Build Coastguard Worker /// \param __a
482*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
483*bed243d3SAndroid Build Coastguard Worker /// \param __b
484*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
485*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpgt_pd(__m128d __a,__m128d __b)486*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpgt_pd(__m128d __a,
487*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
488*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpltpd((__v2df)__b, (__v2df)__a);
489*bed243d3SAndroid Build Coastguard Worker }
490*bed243d3SAndroid Build Coastguard Worker
491*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
492*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
493*bed243d3SAndroid Build Coastguard Worker /// operand are greater than or equal to those in the second operand.
494*bed243d3SAndroid Build Coastguard Worker ///
495*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
496*bed243d3SAndroid Build Coastguard Worker ///
497*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
498*bed243d3SAndroid Build Coastguard Worker ///
499*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLEPD / CMPLEPD </c> instruction.
500*bed243d3SAndroid Build Coastguard Worker ///
501*bed243d3SAndroid Build Coastguard Worker /// \param __a
502*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
503*bed243d3SAndroid Build Coastguard Worker /// \param __b
504*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
505*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpge_pd(__m128d __a,__m128d __b)506*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpge_pd(__m128d __a,
507*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
508*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmplepd((__v2df)__b, (__v2df)__a);
509*bed243d3SAndroid Build Coastguard Worker }
510*bed243d3SAndroid Build Coastguard Worker
511*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
512*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
513*bed243d3SAndroid Build Coastguard Worker /// operand are ordered with respect to those in the second operand.
514*bed243d3SAndroid Build Coastguard Worker ///
515*bed243d3SAndroid Build Coastguard Worker /// A pair of double-precision values are "ordered" with respect to each
516*bed243d3SAndroid Build Coastguard Worker /// other if neither value is a NaN. Each comparison yields 0x0 for false,
517*bed243d3SAndroid Build Coastguard Worker /// 0xFFFFFFFFFFFFFFFF for true.
518*bed243d3SAndroid Build Coastguard Worker ///
519*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
520*bed243d3SAndroid Build Coastguard Worker ///
521*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPORDPD / CMPORDPD </c> instruction.
522*bed243d3SAndroid Build Coastguard Worker ///
523*bed243d3SAndroid Build Coastguard Worker /// \param __a
524*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
525*bed243d3SAndroid Build Coastguard Worker /// \param __b
526*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
527*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpord_pd(__m128d __a,__m128d __b)528*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpord_pd(__m128d __a,
529*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
530*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpordpd((__v2df)__a, (__v2df)__b);
531*bed243d3SAndroid Build Coastguard Worker }
532*bed243d3SAndroid Build Coastguard Worker
533*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
534*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
535*bed243d3SAndroid Build Coastguard Worker /// operand are unordered with respect to those in the second operand.
536*bed243d3SAndroid Build Coastguard Worker ///
537*bed243d3SAndroid Build Coastguard Worker /// A pair of double-precision values are "unordered" with respect to each
538*bed243d3SAndroid Build Coastguard Worker /// other if one or both values are NaN. Each comparison yields 0x0 for
539*bed243d3SAndroid Build Coastguard Worker /// false, 0xFFFFFFFFFFFFFFFF for true.
540*bed243d3SAndroid Build Coastguard Worker ///
541*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
542*bed243d3SAndroid Build Coastguard Worker ///
543*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPUNORDPD / CMPUNORDPD </c>
544*bed243d3SAndroid Build Coastguard Worker /// instruction.
545*bed243d3SAndroid Build Coastguard Worker ///
546*bed243d3SAndroid Build Coastguard Worker /// \param __a
547*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
548*bed243d3SAndroid Build Coastguard Worker /// \param __b
549*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
550*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpunord_pd(__m128d __a,__m128d __b)551*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpunord_pd(__m128d __a,
552*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
553*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpunordpd((__v2df)__a, (__v2df)__b);
554*bed243d3SAndroid Build Coastguard Worker }
555*bed243d3SAndroid Build Coastguard Worker
556*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
557*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
558*bed243d3SAndroid Build Coastguard Worker /// operand are unequal to those in the second operand.
559*bed243d3SAndroid Build Coastguard Worker ///
560*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
561*bed243d3SAndroid Build Coastguard Worker ///
562*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
563*bed243d3SAndroid Build Coastguard Worker ///
564*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNEQPD / CMPNEQPD </c> instruction.
565*bed243d3SAndroid Build Coastguard Worker ///
566*bed243d3SAndroid Build Coastguard Worker /// \param __a
567*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
568*bed243d3SAndroid Build Coastguard Worker /// \param __b
569*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
570*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpneq_pd(__m128d __a,__m128d __b)571*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpneq_pd(__m128d __a,
572*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
573*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpneqpd((__v2df)__a, (__v2df)__b);
574*bed243d3SAndroid Build Coastguard Worker }
575*bed243d3SAndroid Build Coastguard Worker
576*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
577*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
578*bed243d3SAndroid Build Coastguard Worker /// operand are not less than those in the second operand.
579*bed243d3SAndroid Build Coastguard Worker ///
580*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
581*bed243d3SAndroid Build Coastguard Worker ///
582*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
583*bed243d3SAndroid Build Coastguard Worker ///
584*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLTPD / CMPNLTPD </c> instruction.
585*bed243d3SAndroid Build Coastguard Worker ///
586*bed243d3SAndroid Build Coastguard Worker /// \param __a
587*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
588*bed243d3SAndroid Build Coastguard Worker /// \param __b
589*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
590*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpnlt_pd(__m128d __a,__m128d __b)591*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnlt_pd(__m128d __a,
592*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
593*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnltpd((__v2df)__a, (__v2df)__b);
594*bed243d3SAndroid Build Coastguard Worker }
595*bed243d3SAndroid Build Coastguard Worker
596*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
597*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
598*bed243d3SAndroid Build Coastguard Worker /// operand are not less than or equal to those in the second operand.
599*bed243d3SAndroid Build Coastguard Worker ///
600*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
601*bed243d3SAndroid Build Coastguard Worker ///
602*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
603*bed243d3SAndroid Build Coastguard Worker ///
604*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLEPD / CMPNLEPD </c> instruction.
605*bed243d3SAndroid Build Coastguard Worker ///
606*bed243d3SAndroid Build Coastguard Worker /// \param __a
607*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
608*bed243d3SAndroid Build Coastguard Worker /// \param __b
609*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
610*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpnle_pd(__m128d __a,__m128d __b)611*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnle_pd(__m128d __a,
612*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
613*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnlepd((__v2df)__a, (__v2df)__b);
614*bed243d3SAndroid Build Coastguard Worker }
615*bed243d3SAndroid Build Coastguard Worker
616*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
617*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
618*bed243d3SAndroid Build Coastguard Worker /// operand are not greater than those in the second operand.
619*bed243d3SAndroid Build Coastguard Worker ///
620*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
621*bed243d3SAndroid Build Coastguard Worker ///
622*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
623*bed243d3SAndroid Build Coastguard Worker ///
624*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLTPD / CMPNLTPD </c> instruction.
625*bed243d3SAndroid Build Coastguard Worker ///
626*bed243d3SAndroid Build Coastguard Worker /// \param __a
627*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
628*bed243d3SAndroid Build Coastguard Worker /// \param __b
629*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
630*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpngt_pd(__m128d __a,__m128d __b)631*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpngt_pd(__m128d __a,
632*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
633*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnltpd((__v2df)__b, (__v2df)__a);
634*bed243d3SAndroid Build Coastguard Worker }
635*bed243d3SAndroid Build Coastguard Worker
636*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of the
637*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double] to determine if the values in the first
638*bed243d3SAndroid Build Coastguard Worker /// operand are not greater than or equal to those in the second operand.
639*bed243d3SAndroid Build Coastguard Worker ///
640*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
641*bed243d3SAndroid Build Coastguard Worker ///
642*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
643*bed243d3SAndroid Build Coastguard Worker ///
644*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLEPD / CMPNLEPD </c> instruction.
645*bed243d3SAndroid Build Coastguard Worker ///
646*bed243d3SAndroid Build Coastguard Worker /// \param __a
647*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
648*bed243d3SAndroid Build Coastguard Worker /// \param __b
649*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
650*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector containing the comparison results.
_mm_cmpnge_pd(__m128d __a,__m128d __b)651*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnge_pd(__m128d __a,
652*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
653*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnlepd((__v2df)__b, (__v2df)__a);
654*bed243d3SAndroid Build Coastguard Worker }
655*bed243d3SAndroid Build Coastguard Worker
656*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
657*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] for equality.
658*bed243d3SAndroid Build Coastguard Worker ///
659*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
660*bed243d3SAndroid Build Coastguard Worker ///
661*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
662*bed243d3SAndroid Build Coastguard Worker ///
663*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPEQSD / CMPEQSD </c> instruction.
664*bed243d3SAndroid Build Coastguard Worker ///
665*bed243d3SAndroid Build Coastguard Worker /// \param __a
666*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
667*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
668*bed243d3SAndroid Build Coastguard Worker /// \param __b
669*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
670*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
671*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
672*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpeq_sd(__m128d __a,__m128d __b)673*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpeq_sd(__m128d __a,
674*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
675*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpeqsd((__v2df)__a, (__v2df)__b);
676*bed243d3SAndroid Build Coastguard Worker }
677*bed243d3SAndroid Build Coastguard Worker
678*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
679*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
680*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is less than the corresponding value in
681*bed243d3SAndroid Build Coastguard Worker /// the second parameter.
682*bed243d3SAndroid Build Coastguard Worker ///
683*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
684*bed243d3SAndroid Build Coastguard Worker ///
685*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
686*bed243d3SAndroid Build Coastguard Worker ///
687*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLTSD / CMPLTSD </c> instruction.
688*bed243d3SAndroid Build Coastguard Worker ///
689*bed243d3SAndroid Build Coastguard Worker /// \param __a
690*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
691*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
692*bed243d3SAndroid Build Coastguard Worker /// \param __b
693*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
694*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
695*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
696*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmplt_sd(__m128d __a,__m128d __b)697*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmplt_sd(__m128d __a,
698*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
699*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpltsd((__v2df)__a, (__v2df)__b);
700*bed243d3SAndroid Build Coastguard Worker }
701*bed243d3SAndroid Build Coastguard Worker
702*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
703*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
704*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is less than or equal to the
705*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
706*bed243d3SAndroid Build Coastguard Worker ///
707*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
708*bed243d3SAndroid Build Coastguard Worker ///
709*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
710*bed243d3SAndroid Build Coastguard Worker ///
711*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLESD / CMPLESD </c> instruction.
712*bed243d3SAndroid Build Coastguard Worker ///
713*bed243d3SAndroid Build Coastguard Worker /// \param __a
714*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
715*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
716*bed243d3SAndroid Build Coastguard Worker /// \param __b
717*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
718*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
719*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
720*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmple_sd(__m128d __a,__m128d __b)721*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmple_sd(__m128d __a,
722*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
723*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmplesd((__v2df)__a, (__v2df)__b);
724*bed243d3SAndroid Build Coastguard Worker }
725*bed243d3SAndroid Build Coastguard Worker
726*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
727*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
728*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is greater than the corresponding value
729*bed243d3SAndroid Build Coastguard Worker /// in the second parameter.
730*bed243d3SAndroid Build Coastguard Worker ///
731*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
732*bed243d3SAndroid Build Coastguard Worker ///
733*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
734*bed243d3SAndroid Build Coastguard Worker ///
735*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLTSD / CMPLTSD </c> instruction.
736*bed243d3SAndroid Build Coastguard Worker ///
737*bed243d3SAndroid Build Coastguard Worker /// \param __a
738*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
739*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
740*bed243d3SAndroid Build Coastguard Worker /// \param __b
741*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
742*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
743*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
744*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpgt_sd(__m128d __a,__m128d __b)745*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpgt_sd(__m128d __a,
746*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
747*bed243d3SAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmpltsd((__v2df)__b, (__v2df)__a);
748*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__c[0], __a[1]};
749*bed243d3SAndroid Build Coastguard Worker }
750*bed243d3SAndroid Build Coastguard Worker
751*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
752*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
753*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is greater than or equal to the
754*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
755*bed243d3SAndroid Build Coastguard Worker ///
756*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
757*bed243d3SAndroid Build Coastguard Worker ///
758*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
759*bed243d3SAndroid Build Coastguard Worker ///
760*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPLESD / CMPLESD </c> instruction.
761*bed243d3SAndroid Build Coastguard Worker ///
762*bed243d3SAndroid Build Coastguard Worker /// \param __a
763*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
764*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
765*bed243d3SAndroid Build Coastguard Worker /// \param __b
766*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
767*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
768*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
769*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpge_sd(__m128d __a,__m128d __b)770*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpge_sd(__m128d __a,
771*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
772*bed243d3SAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmplesd((__v2df)__b, (__v2df)__a);
773*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__c[0], __a[1]};
774*bed243d3SAndroid Build Coastguard Worker }
775*bed243d3SAndroid Build Coastguard Worker
776*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
777*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
778*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is "ordered" with respect to the
779*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
780*bed243d3SAndroid Build Coastguard Worker ///
781*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true. A pair
782*bed243d3SAndroid Build Coastguard Worker /// of double-precision values are "ordered" with respect to each other if
783*bed243d3SAndroid Build Coastguard Worker /// neither value is a NaN.
784*bed243d3SAndroid Build Coastguard Worker ///
785*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
786*bed243d3SAndroid Build Coastguard Worker ///
787*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPORDSD / CMPORDSD </c> instruction.
788*bed243d3SAndroid Build Coastguard Worker ///
789*bed243d3SAndroid Build Coastguard Worker /// \param __a
790*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
791*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
792*bed243d3SAndroid Build Coastguard Worker /// \param __b
793*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
794*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
795*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
796*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpord_sd(__m128d __a,__m128d __b)797*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpord_sd(__m128d __a,
798*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
799*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpordsd((__v2df)__a, (__v2df)__b);
800*bed243d3SAndroid Build Coastguard Worker }
801*bed243d3SAndroid Build Coastguard Worker
802*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
803*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
804*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is "unordered" with respect to the
805*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
806*bed243d3SAndroid Build Coastguard Worker ///
807*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true. A pair
808*bed243d3SAndroid Build Coastguard Worker /// of double-precision values are "unordered" with respect to each other if
809*bed243d3SAndroid Build Coastguard Worker /// one or both values are NaN.
810*bed243d3SAndroid Build Coastguard Worker ///
811*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
812*bed243d3SAndroid Build Coastguard Worker ///
813*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPUNORDSD / CMPUNORDSD </c>
814*bed243d3SAndroid Build Coastguard Worker /// instruction.
815*bed243d3SAndroid Build Coastguard Worker ///
816*bed243d3SAndroid Build Coastguard Worker /// \param __a
817*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
818*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
819*bed243d3SAndroid Build Coastguard Worker /// \param __b
820*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
821*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
822*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
823*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpunord_sd(__m128d __a,__m128d __b)824*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpunord_sd(__m128d __a,
825*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
826*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpunordsd((__v2df)__a, (__v2df)__b);
827*bed243d3SAndroid Build Coastguard Worker }
828*bed243d3SAndroid Build Coastguard Worker
829*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
830*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
831*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is unequal to the corresponding value in
832*bed243d3SAndroid Build Coastguard Worker /// the second parameter.
833*bed243d3SAndroid Build Coastguard Worker ///
834*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
835*bed243d3SAndroid Build Coastguard Worker ///
836*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
837*bed243d3SAndroid Build Coastguard Worker ///
838*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNEQSD / CMPNEQSD </c> instruction.
839*bed243d3SAndroid Build Coastguard Worker ///
840*bed243d3SAndroid Build Coastguard Worker /// \param __a
841*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
842*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
843*bed243d3SAndroid Build Coastguard Worker /// \param __b
844*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
845*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
846*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
847*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpneq_sd(__m128d __a,__m128d __b)848*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpneq_sd(__m128d __a,
849*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
850*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpneqsd((__v2df)__a, (__v2df)__b);
851*bed243d3SAndroid Build Coastguard Worker }
852*bed243d3SAndroid Build Coastguard Worker
853*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
854*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
855*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is not less than the corresponding
856*bed243d3SAndroid Build Coastguard Worker /// value in the second parameter.
857*bed243d3SAndroid Build Coastguard Worker ///
858*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
859*bed243d3SAndroid Build Coastguard Worker ///
860*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
861*bed243d3SAndroid Build Coastguard Worker ///
862*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLTSD / CMPNLTSD </c> instruction.
863*bed243d3SAndroid Build Coastguard Worker ///
864*bed243d3SAndroid Build Coastguard Worker /// \param __a
865*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
866*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
867*bed243d3SAndroid Build Coastguard Worker /// \param __b
868*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
869*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
870*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
871*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpnlt_sd(__m128d __a,__m128d __b)872*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnlt_sd(__m128d __a,
873*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
874*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnltsd((__v2df)__a, (__v2df)__b);
875*bed243d3SAndroid Build Coastguard Worker }
876*bed243d3SAndroid Build Coastguard Worker
877*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
878*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
879*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is not less than or equal to the
880*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
881*bed243d3SAndroid Build Coastguard Worker ///
882*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
883*bed243d3SAndroid Build Coastguard Worker ///
884*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
885*bed243d3SAndroid Build Coastguard Worker ///
886*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLESD / CMPNLESD </c> instruction.
887*bed243d3SAndroid Build Coastguard Worker ///
888*bed243d3SAndroid Build Coastguard Worker /// \param __a
889*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
890*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
891*bed243d3SAndroid Build Coastguard Worker /// \param __b
892*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
893*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
894*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
895*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpnle_sd(__m128d __a,__m128d __b)896*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnle_sd(__m128d __a,
897*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
898*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_cmpnlesd((__v2df)__a, (__v2df)__b);
899*bed243d3SAndroid Build Coastguard Worker }
900*bed243d3SAndroid Build Coastguard Worker
901*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
902*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
903*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is not greater than the corresponding
904*bed243d3SAndroid Build Coastguard Worker /// value in the second parameter.
905*bed243d3SAndroid Build Coastguard Worker ///
906*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
907*bed243d3SAndroid Build Coastguard Worker ///
908*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
909*bed243d3SAndroid Build Coastguard Worker ///
910*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLTSD / CMPNLTSD </c> instruction.
911*bed243d3SAndroid Build Coastguard Worker ///
912*bed243d3SAndroid Build Coastguard Worker /// \param __a
913*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
914*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
915*bed243d3SAndroid Build Coastguard Worker /// \param __b
916*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
917*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
918*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
919*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpngt_sd(__m128d __a,__m128d __b)920*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpngt_sd(__m128d __a,
921*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
922*bed243d3SAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmpnltsd((__v2df)__b, (__v2df)__a);
923*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__c[0], __a[1]};
924*bed243d3SAndroid Build Coastguard Worker }
925*bed243d3SAndroid Build Coastguard Worker
926*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
927*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
928*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is not greater than or equal to the
929*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
930*bed243d3SAndroid Build Coastguard Worker ///
931*bed243d3SAndroid Build Coastguard Worker /// The comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
932*bed243d3SAndroid Build Coastguard Worker ///
933*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
934*bed243d3SAndroid Build Coastguard Worker ///
935*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCMPNLESD / CMPNLESD </c> instruction.
936*bed243d3SAndroid Build Coastguard Worker ///
937*bed243d3SAndroid Build Coastguard Worker /// \param __a
938*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
939*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
940*bed243d3SAndroid Build Coastguard Worker /// \param __b
941*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
942*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
943*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector. The lower 64 bits contains the comparison
944*bed243d3SAndroid Build Coastguard Worker /// results. The upper 64 bits are copied from the upper 64 bits of \a __a.
_mm_cmpnge_sd(__m128d __a,__m128d __b)945*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cmpnge_sd(__m128d __a,
946*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
947*bed243d3SAndroid Build Coastguard Worker __m128d __c = __builtin_ia32_cmpnlesd((__v2df)__b, (__v2df)__a);
948*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__c[0], __a[1]};
949*bed243d3SAndroid Build Coastguard Worker }
950*bed243d3SAndroid Build Coastguard Worker
951*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
952*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] for equality.
953*bed243d3SAndroid Build Coastguard Worker ///
954*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
955*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
956*bed243d3SAndroid Build Coastguard Worker ///
957*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
958*bed243d3SAndroid Build Coastguard Worker ///
959*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCOMISD / COMISD </c> instruction.
960*bed243d3SAndroid Build Coastguard Worker ///
961*bed243d3SAndroid Build Coastguard Worker /// \param __a
962*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
963*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
964*bed243d3SAndroid Build Coastguard Worker /// \param __b
965*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
966*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
967*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_comieq_sd(__m128d __a,__m128d __b)968*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_comieq_sd(__m128d __a,
969*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
970*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_comisdeq((__v2df)__a, (__v2df)__b);
971*bed243d3SAndroid Build Coastguard Worker }
972*bed243d3SAndroid Build Coastguard Worker
973*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
974*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
975*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is less than the corresponding value in
976*bed243d3SAndroid Build Coastguard Worker /// the second parameter.
977*bed243d3SAndroid Build Coastguard Worker ///
978*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
979*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
980*bed243d3SAndroid Build Coastguard Worker ///
981*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
982*bed243d3SAndroid Build Coastguard Worker ///
983*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCOMISD / COMISD </c> instruction.
984*bed243d3SAndroid Build Coastguard Worker ///
985*bed243d3SAndroid Build Coastguard Worker /// \param __a
986*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
987*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
988*bed243d3SAndroid Build Coastguard Worker /// \param __b
989*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
990*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
991*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_comilt_sd(__m128d __a,__m128d __b)992*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_comilt_sd(__m128d __a,
993*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
994*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_comisdlt((__v2df)__a, (__v2df)__b);
995*bed243d3SAndroid Build Coastguard Worker }
996*bed243d3SAndroid Build Coastguard Worker
997*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
998*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
999*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is less than or equal to the
1000*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
1001*bed243d3SAndroid Build Coastguard Worker ///
1002*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1003*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1004*bed243d3SAndroid Build Coastguard Worker ///
1005*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1006*bed243d3SAndroid Build Coastguard Worker ///
1007*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCOMISD / COMISD </c> instruction.
1008*bed243d3SAndroid Build Coastguard Worker ///
1009*bed243d3SAndroid Build Coastguard Worker /// \param __a
1010*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1011*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1012*bed243d3SAndroid Build Coastguard Worker /// \param __b
1013*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1014*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1015*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_comile_sd(__m128d __a,__m128d __b)1016*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_comile_sd(__m128d __a,
1017*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1018*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_comisdle((__v2df)__a, (__v2df)__b);
1019*bed243d3SAndroid Build Coastguard Worker }
1020*bed243d3SAndroid Build Coastguard Worker
1021*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1022*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1023*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is greater than the corresponding value
1024*bed243d3SAndroid Build Coastguard Worker /// in the second parameter.
1025*bed243d3SAndroid Build Coastguard Worker ///
1026*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1027*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1028*bed243d3SAndroid Build Coastguard Worker ///
1029*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1030*bed243d3SAndroid Build Coastguard Worker ///
1031*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCOMISD / COMISD </c> instruction.
1032*bed243d3SAndroid Build Coastguard Worker ///
1033*bed243d3SAndroid Build Coastguard Worker /// \param __a
1034*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1035*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1036*bed243d3SAndroid Build Coastguard Worker /// \param __b
1037*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1038*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1039*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_comigt_sd(__m128d __a,__m128d __b)1040*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_comigt_sd(__m128d __a,
1041*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1042*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_comisdgt((__v2df)__a, (__v2df)__b);
1043*bed243d3SAndroid Build Coastguard Worker }
1044*bed243d3SAndroid Build Coastguard Worker
1045*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1046*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1047*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is greater than or equal to the
1048*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
1049*bed243d3SAndroid Build Coastguard Worker ///
1050*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1051*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1052*bed243d3SAndroid Build Coastguard Worker ///
1053*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1054*bed243d3SAndroid Build Coastguard Worker ///
1055*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCOMISD / COMISD </c> instruction.
1056*bed243d3SAndroid Build Coastguard Worker ///
1057*bed243d3SAndroid Build Coastguard Worker /// \param __a
1058*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1059*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1060*bed243d3SAndroid Build Coastguard Worker /// \param __b
1061*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1062*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1063*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_comige_sd(__m128d __a,__m128d __b)1064*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_comige_sd(__m128d __a,
1065*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1066*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_comisdge((__v2df)__a, (__v2df)__b);
1067*bed243d3SAndroid Build Coastguard Worker }
1068*bed243d3SAndroid Build Coastguard Worker
1069*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1070*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1071*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is unequal to the corresponding value in
1072*bed243d3SAndroid Build Coastguard Worker /// the second parameter.
1073*bed243d3SAndroid Build Coastguard Worker ///
1074*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1075*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, 1 is returned.
1076*bed243d3SAndroid Build Coastguard Worker ///
1077*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1078*bed243d3SAndroid Build Coastguard Worker ///
1079*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCOMISD / COMISD </c> instruction.
1080*bed243d3SAndroid Build Coastguard Worker ///
1081*bed243d3SAndroid Build Coastguard Worker /// \param __a
1082*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1083*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1084*bed243d3SAndroid Build Coastguard Worker /// \param __b
1085*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1086*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1087*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_comineq_sd(__m128d __a,__m128d __b)1088*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_comineq_sd(__m128d __a,
1089*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1090*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_comisdneq((__v2df)__a, (__v2df)__b);
1091*bed243d3SAndroid Build Coastguard Worker }
1092*bed243d3SAndroid Build Coastguard Worker
1093*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1094*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] for equality.
1095*bed243d3SAndroid Build Coastguard Worker ///
1096*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1097*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1098*bed243d3SAndroid Build Coastguard Worker ///
1099*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1100*bed243d3SAndroid Build Coastguard Worker ///
1101*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUCOMISD / UCOMISD </c> instruction.
1102*bed243d3SAndroid Build Coastguard Worker ///
1103*bed243d3SAndroid Build Coastguard Worker /// \param __a
1104*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1105*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1106*bed243d3SAndroid Build Coastguard Worker /// \param __b
1107*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1108*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1109*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_ucomieq_sd(__m128d __a,__m128d __b)1110*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomieq_sd(__m128d __a,
1111*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1112*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_ucomisdeq((__v2df)__a, (__v2df)__b);
1113*bed243d3SAndroid Build Coastguard Worker }
1114*bed243d3SAndroid Build Coastguard Worker
1115*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1116*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1117*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is less than the corresponding value in
1118*bed243d3SAndroid Build Coastguard Worker /// the second parameter.
1119*bed243d3SAndroid Build Coastguard Worker ///
1120*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1121*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1122*bed243d3SAndroid Build Coastguard Worker ///
1123*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1124*bed243d3SAndroid Build Coastguard Worker ///
1125*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUCOMISD / UCOMISD </c> instruction.
1126*bed243d3SAndroid Build Coastguard Worker ///
1127*bed243d3SAndroid Build Coastguard Worker /// \param __a
1128*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1129*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1130*bed243d3SAndroid Build Coastguard Worker /// \param __b
1131*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1132*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1133*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_ucomilt_sd(__m128d __a,__m128d __b)1134*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomilt_sd(__m128d __a,
1135*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1136*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_ucomisdlt((__v2df)__a, (__v2df)__b);
1137*bed243d3SAndroid Build Coastguard Worker }
1138*bed243d3SAndroid Build Coastguard Worker
1139*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1140*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1141*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is less than or equal to the
1142*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
1143*bed243d3SAndroid Build Coastguard Worker ///
1144*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1145*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1146*bed243d3SAndroid Build Coastguard Worker ///
1147*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1148*bed243d3SAndroid Build Coastguard Worker ///
1149*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUCOMISD / UCOMISD </c> instruction.
1150*bed243d3SAndroid Build Coastguard Worker ///
1151*bed243d3SAndroid Build Coastguard Worker /// \param __a
1152*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1153*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1154*bed243d3SAndroid Build Coastguard Worker /// \param __b
1155*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1156*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1157*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_ucomile_sd(__m128d __a,__m128d __b)1158*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomile_sd(__m128d __a,
1159*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1160*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_ucomisdle((__v2df)__a, (__v2df)__b);
1161*bed243d3SAndroid Build Coastguard Worker }
1162*bed243d3SAndroid Build Coastguard Worker
1163*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1164*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1165*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is greater than the corresponding value
1166*bed243d3SAndroid Build Coastguard Worker /// in the second parameter.
1167*bed243d3SAndroid Build Coastguard Worker ///
1168*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1169*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1170*bed243d3SAndroid Build Coastguard Worker ///
1171*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1172*bed243d3SAndroid Build Coastguard Worker ///
1173*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUCOMISD / UCOMISD </c> instruction.
1174*bed243d3SAndroid Build Coastguard Worker ///
1175*bed243d3SAndroid Build Coastguard Worker /// \param __a
1176*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1177*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1178*bed243d3SAndroid Build Coastguard Worker /// \param __b
1179*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1180*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1181*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_ucomigt_sd(__m128d __a,__m128d __b)1182*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomigt_sd(__m128d __a,
1183*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1184*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_ucomisdgt((__v2df)__a, (__v2df)__b);
1185*bed243d3SAndroid Build Coastguard Worker }
1186*bed243d3SAndroid Build Coastguard Worker
1187*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1188*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1189*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is greater than or equal to the
1190*bed243d3SAndroid Build Coastguard Worker /// corresponding value in the second parameter.
1191*bed243d3SAndroid Build Coastguard Worker ///
1192*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1193*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, returns 0.
1194*bed243d3SAndroid Build Coastguard Worker ///
1195*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1196*bed243d3SAndroid Build Coastguard Worker ///
1197*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUCOMISD / UCOMISD </c> instruction.
1198*bed243d3SAndroid Build Coastguard Worker ///
1199*bed243d3SAndroid Build Coastguard Worker /// \param __a
1200*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1201*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1202*bed243d3SAndroid Build Coastguard Worker /// \param __b
1203*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1204*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1205*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison results.
_mm_ucomige_sd(__m128d __a,__m128d __b)1206*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomige_sd(__m128d __a,
1207*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1208*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_ucomisdge((__v2df)__a, (__v2df)__b);
1209*bed243d3SAndroid Build Coastguard Worker }
1210*bed243d3SAndroid Build Coastguard Worker
1211*bed243d3SAndroid Build Coastguard Worker /// Compares the lower double-precision floating-point values in each of
1212*bed243d3SAndroid Build Coastguard Worker /// the two 128-bit floating-point vectors of [2 x double] to determine if
1213*bed243d3SAndroid Build Coastguard Worker /// the value in the first parameter is unequal to the corresponding value in
1214*bed243d3SAndroid Build Coastguard Worker /// the second parameter.
1215*bed243d3SAndroid Build Coastguard Worker ///
1216*bed243d3SAndroid Build Coastguard Worker /// The comparison returns 0 for false, 1 for true. If either of the two
1217*bed243d3SAndroid Build Coastguard Worker /// lower double-precision values is NaN, 1 is returned.
1218*bed243d3SAndroid Build Coastguard Worker ///
1219*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1220*bed243d3SAndroid Build Coastguard Worker ///
1221*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUCOMISD / UCOMISD </c> instruction.
1222*bed243d3SAndroid Build Coastguard Worker ///
1223*bed243d3SAndroid Build Coastguard Worker /// \param __a
1224*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1225*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __b.
1226*bed243d3SAndroid Build Coastguard Worker /// \param __b
1227*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision value is
1228*bed243d3SAndroid Build Coastguard Worker /// compared to the lower double-precision value of \a __a.
1229*bed243d3SAndroid Build Coastguard Worker /// \returns An integer containing the comparison result.
_mm_ucomineq_sd(__m128d __a,__m128d __b)1230*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_ucomineq_sd(__m128d __a,
1231*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1232*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_ucomisdneq((__v2df)__a, (__v2df)__b);
1233*bed243d3SAndroid Build Coastguard Worker }
1234*bed243d3SAndroid Build Coastguard Worker
1235*bed243d3SAndroid Build Coastguard Worker /// Converts the two double-precision floating-point elements of a
1236*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double] into two single-precision floating-point
1237*bed243d3SAndroid Build Coastguard Worker /// values, returned in the lower 64 bits of a 128-bit vector of [4 x float].
1238*bed243d3SAndroid Build Coastguard Worker /// The upper 64 bits of the result vector are set to zero.
1239*bed243d3SAndroid Build Coastguard Worker ///
1240*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1241*bed243d3SAndroid Build Coastguard Worker ///
1242*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTPD2PS / CVTPD2PS </c> instruction.
1243*bed243d3SAndroid Build Coastguard Worker ///
1244*bed243d3SAndroid Build Coastguard Worker /// \param __a
1245*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
1246*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x float] whose lower 64 bits contain the
1247*bed243d3SAndroid Build Coastguard Worker /// converted values. The upper 64 bits are set to zero.
_mm_cvtpd_ps(__m128d __a)1248*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_cvtpd_ps(__m128d __a) {
1249*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_cvtpd2ps((__v2df)__a);
1250*bed243d3SAndroid Build Coastguard Worker }
1251*bed243d3SAndroid Build Coastguard Worker
1252*bed243d3SAndroid Build Coastguard Worker /// Converts the lower two single-precision floating-point elements of a
1253*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [4 x float] into two double-precision floating-point
1254*bed243d3SAndroid Build Coastguard Worker /// values, returned in a 128-bit vector of [2 x double]. The upper two
1255*bed243d3SAndroid Build Coastguard Worker /// elements of the input vector are unused.
1256*bed243d3SAndroid Build Coastguard Worker ///
1257*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1258*bed243d3SAndroid Build Coastguard Worker ///
1259*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTPS2PD / CVTPS2PD </c> instruction.
1260*bed243d3SAndroid Build Coastguard Worker ///
1261*bed243d3SAndroid Build Coastguard Worker /// \param __a
1262*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x float]. The lower two single-precision
1263*bed243d3SAndroid Build Coastguard Worker /// floating-point elements are converted to double-precision values. The
1264*bed243d3SAndroid Build Coastguard Worker /// upper two elements are unused.
1265*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the converted values.
_mm_cvtps_pd(__m128 __a)1266*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtps_pd(__m128 __a) {
1267*bed243d3SAndroid Build Coastguard Worker return (__m128d) __builtin_convertvector(
1268*bed243d3SAndroid Build Coastguard Worker __builtin_shufflevector((__v4sf)__a, (__v4sf)__a, 0, 1), __v2df);
1269*bed243d3SAndroid Build Coastguard Worker }
1270*bed243d3SAndroid Build Coastguard Worker
1271*bed243d3SAndroid Build Coastguard Worker /// Converts the lower two integer elements of a 128-bit vector of
1272*bed243d3SAndroid Build Coastguard Worker /// [4 x i32] into two double-precision floating-point values, returned in a
1273*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double].
1274*bed243d3SAndroid Build Coastguard Worker ///
1275*bed243d3SAndroid Build Coastguard Worker /// The upper two elements of the input vector are unused.
1276*bed243d3SAndroid Build Coastguard Worker ///
1277*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1278*bed243d3SAndroid Build Coastguard Worker ///
1279*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTDQ2PD / CVTDQ2PD </c> instruction.
1280*bed243d3SAndroid Build Coastguard Worker ///
1281*bed243d3SAndroid Build Coastguard Worker /// \param __a
1282*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [4 x i32]. The lower two integer elements are
1283*bed243d3SAndroid Build Coastguard Worker /// converted to double-precision values.
1284*bed243d3SAndroid Build Coastguard Worker ///
1285*bed243d3SAndroid Build Coastguard Worker /// The upper two elements are unused.
1286*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the converted values.
_mm_cvtepi32_pd(__m128i __a)1287*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtepi32_pd(__m128i __a) {
1288*bed243d3SAndroid Build Coastguard Worker return (__m128d) __builtin_convertvector(
1289*bed243d3SAndroid Build Coastguard Worker __builtin_shufflevector((__v4si)__a, (__v4si)__a, 0, 1), __v2df);
1290*bed243d3SAndroid Build Coastguard Worker }
1291*bed243d3SAndroid Build Coastguard Worker
1292*bed243d3SAndroid Build Coastguard Worker /// Converts the two double-precision floating-point elements of a
1293*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double] into two signed 32-bit integer values,
1294*bed243d3SAndroid Build Coastguard Worker /// returned in the lower 64 bits of a 128-bit vector of [4 x i32]. The upper
1295*bed243d3SAndroid Build Coastguard Worker /// 64 bits of the result vector are set to zero.
1296*bed243d3SAndroid Build Coastguard Worker ///
1297*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1298*bed243d3SAndroid Build Coastguard Worker ///
1299*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTPD2DQ / CVTPD2DQ </c> instruction.
1300*bed243d3SAndroid Build Coastguard Worker ///
1301*bed243d3SAndroid Build Coastguard Worker /// \param __a
1302*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
1303*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] whose lower 64 bits contain the
1304*bed243d3SAndroid Build Coastguard Worker /// converted values. The upper 64 bits are set to zero.
_mm_cvtpd_epi32(__m128d __a)1305*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtpd_epi32(__m128d __a) {
1306*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_cvtpd2dq((__v2df)__a);
1307*bed243d3SAndroid Build Coastguard Worker }
1308*bed243d3SAndroid Build Coastguard Worker
1309*bed243d3SAndroid Build Coastguard Worker /// Converts the low-order element of a 128-bit vector of [2 x double]
1310*bed243d3SAndroid Build Coastguard Worker /// into a 32-bit signed integer value.
1311*bed243d3SAndroid Build Coastguard Worker ///
1312*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1313*bed243d3SAndroid Build Coastguard Worker ///
1314*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTSD2SI / CVTSD2SI </c> instruction.
1315*bed243d3SAndroid Build Coastguard Worker ///
1316*bed243d3SAndroid Build Coastguard Worker /// \param __a
1317*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are used in the
1318*bed243d3SAndroid Build Coastguard Worker /// conversion.
1319*bed243d3SAndroid Build Coastguard Worker /// \returns A 32-bit signed integer containing the converted value.
_mm_cvtsd_si32(__m128d __a)1320*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_cvtsd_si32(__m128d __a) {
1321*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_cvtsd2si((__v2df)__a);
1322*bed243d3SAndroid Build Coastguard Worker }
1323*bed243d3SAndroid Build Coastguard Worker
1324*bed243d3SAndroid Build Coastguard Worker /// Converts the lower double-precision floating-point element of a
1325*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double], in the second parameter, into a
1326*bed243d3SAndroid Build Coastguard Worker /// single-precision floating-point value, returned in the lower 32 bits of a
1327*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [4 x float]. The upper 96 bits of the result vector are
1328*bed243d3SAndroid Build Coastguard Worker /// copied from the upper 96 bits of the first parameter.
1329*bed243d3SAndroid Build Coastguard Worker ///
1330*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1331*bed243d3SAndroid Build Coastguard Worker ///
1332*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTSD2SS / CVTSD2SS </c> instruction.
1333*bed243d3SAndroid Build Coastguard Worker ///
1334*bed243d3SAndroid Build Coastguard Worker /// \param __a
1335*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x float]. The upper 96 bits of this parameter are
1336*bed243d3SAndroid Build Coastguard Worker /// copied to the upper 96 bits of the result.
1337*bed243d3SAndroid Build Coastguard Worker /// \param __b
1338*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower double-precision
1339*bed243d3SAndroid Build Coastguard Worker /// floating-point element is used in the conversion.
1340*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x float]. The lower 32 bits contain the
1341*bed243d3SAndroid Build Coastguard Worker /// converted value from the second parameter. The upper 96 bits are copied
1342*bed243d3SAndroid Build Coastguard Worker /// from the upper 96 bits of the first parameter.
_mm_cvtsd_ss(__m128 __a,__m128d __b)1343*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_cvtsd_ss(__m128 __a,
1344*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1345*bed243d3SAndroid Build Coastguard Worker return (__m128)__builtin_ia32_cvtsd2ss((__v4sf)__a, (__v2df)__b);
1346*bed243d3SAndroid Build Coastguard Worker }
1347*bed243d3SAndroid Build Coastguard Worker
1348*bed243d3SAndroid Build Coastguard Worker /// Converts a 32-bit signed integer value, in the second parameter, into
1349*bed243d3SAndroid Build Coastguard Worker /// a double-precision floating-point value, returned in the lower 64 bits of
1350*bed243d3SAndroid Build Coastguard Worker /// a 128-bit vector of [2 x double]. The upper 64 bits of the result vector
1351*bed243d3SAndroid Build Coastguard Worker /// are copied from the upper 64 bits of the first parameter.
1352*bed243d3SAndroid Build Coastguard Worker ///
1353*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1354*bed243d3SAndroid Build Coastguard Worker ///
1355*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTSI2SD / CVTSI2SD </c> instruction.
1356*bed243d3SAndroid Build Coastguard Worker ///
1357*bed243d3SAndroid Build Coastguard Worker /// \param __a
1358*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The upper 64 bits of this parameter are
1359*bed243d3SAndroid Build Coastguard Worker /// copied to the upper 64 bits of the result.
1360*bed243d3SAndroid Build Coastguard Worker /// \param __b
1361*bed243d3SAndroid Build Coastguard Worker /// A 32-bit signed integer containing the value to be converted.
1362*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double]. The lower 64 bits contain the
1363*bed243d3SAndroid Build Coastguard Worker /// converted value from the second parameter. The upper 64 bits are copied
1364*bed243d3SAndroid Build Coastguard Worker /// from the upper 64 bits of the first parameter.
_mm_cvtsi32_sd(__m128d __a,int __b)1365*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtsi32_sd(__m128d __a,
1366*bed243d3SAndroid Build Coastguard Worker int __b) {
1367*bed243d3SAndroid Build Coastguard Worker __a[0] = __b;
1368*bed243d3SAndroid Build Coastguard Worker return __a;
1369*bed243d3SAndroid Build Coastguard Worker }
1370*bed243d3SAndroid Build Coastguard Worker
1371*bed243d3SAndroid Build Coastguard Worker /// Converts the lower single-precision floating-point element of a
1372*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [4 x float], in the second parameter, into a
1373*bed243d3SAndroid Build Coastguard Worker /// double-precision floating-point value, returned in the lower 64 bits of
1374*bed243d3SAndroid Build Coastguard Worker /// a 128-bit vector of [2 x double]. The upper 64 bits of the result vector
1375*bed243d3SAndroid Build Coastguard Worker /// are copied from the upper 64 bits of the first parameter.
1376*bed243d3SAndroid Build Coastguard Worker ///
1377*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1378*bed243d3SAndroid Build Coastguard Worker ///
1379*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTSS2SD / CVTSS2SD </c> instruction.
1380*bed243d3SAndroid Build Coastguard Worker ///
1381*bed243d3SAndroid Build Coastguard Worker /// \param __a
1382*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The upper 64 bits of this parameter are
1383*bed243d3SAndroid Build Coastguard Worker /// copied to the upper 64 bits of the result.
1384*bed243d3SAndroid Build Coastguard Worker /// \param __b
1385*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x float]. The lower single-precision
1386*bed243d3SAndroid Build Coastguard Worker /// floating-point element is used in the conversion.
1387*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double]. The lower 64 bits contain the
1388*bed243d3SAndroid Build Coastguard Worker /// converted value from the second parameter. The upper 64 bits are copied
1389*bed243d3SAndroid Build Coastguard Worker /// from the upper 64 bits of the first parameter.
_mm_cvtss_sd(__m128d __a,__m128 __b)1390*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtss_sd(__m128d __a,
1391*bed243d3SAndroid Build Coastguard Worker __m128 __b) {
1392*bed243d3SAndroid Build Coastguard Worker __a[0] = __b[0];
1393*bed243d3SAndroid Build Coastguard Worker return __a;
1394*bed243d3SAndroid Build Coastguard Worker }
1395*bed243d3SAndroid Build Coastguard Worker
1396*bed243d3SAndroid Build Coastguard Worker /// Converts the two double-precision floating-point elements of a
1397*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double] into two signed 32-bit integer values,
1398*bed243d3SAndroid Build Coastguard Worker /// returned in the lower 64 bits of a 128-bit vector of [4 x i32].
1399*bed243d3SAndroid Build Coastguard Worker ///
1400*bed243d3SAndroid Build Coastguard Worker /// If the result of either conversion is inexact, the result is truncated
1401*bed243d3SAndroid Build Coastguard Worker /// (rounded towards zero) regardless of the current MXCSR setting. The upper
1402*bed243d3SAndroid Build Coastguard Worker /// 64 bits of the result vector are set to zero.
1403*bed243d3SAndroid Build Coastguard Worker ///
1404*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1405*bed243d3SAndroid Build Coastguard Worker ///
1406*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTTPD2DQ / CVTTPD2DQ </c>
1407*bed243d3SAndroid Build Coastguard Worker /// instruction.
1408*bed243d3SAndroid Build Coastguard Worker ///
1409*bed243d3SAndroid Build Coastguard Worker /// \param __a
1410*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
1411*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] whose lower 64 bits contain the
1412*bed243d3SAndroid Build Coastguard Worker /// converted values. The upper 64 bits are set to zero.
_mm_cvttpd_epi32(__m128d __a)1413*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvttpd_epi32(__m128d __a) {
1414*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_cvttpd2dq((__v2df)__a);
1415*bed243d3SAndroid Build Coastguard Worker }
1416*bed243d3SAndroid Build Coastguard Worker
1417*bed243d3SAndroid Build Coastguard Worker /// Converts the low-order element of a [2 x double] vector into a 32-bit
1418*bed243d3SAndroid Build Coastguard Worker /// signed integer value, truncating the result when it is inexact.
1419*bed243d3SAndroid Build Coastguard Worker ///
1420*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1421*bed243d3SAndroid Build Coastguard Worker ///
1422*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTTSD2SI / CVTTSD2SI </c>
1423*bed243d3SAndroid Build Coastguard Worker /// instruction.
1424*bed243d3SAndroid Build Coastguard Worker ///
1425*bed243d3SAndroid Build Coastguard Worker /// \param __a
1426*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are used in the
1427*bed243d3SAndroid Build Coastguard Worker /// conversion.
1428*bed243d3SAndroid Build Coastguard Worker /// \returns A 32-bit signed integer containing the converted value.
_mm_cvttsd_si32(__m128d __a)1429*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_cvttsd_si32(__m128d __a) {
1430*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_cvttsd2si((__v2df)__a);
1431*bed243d3SAndroid Build Coastguard Worker }
1432*bed243d3SAndroid Build Coastguard Worker
1433*bed243d3SAndroid Build Coastguard Worker /// Converts the two double-precision floating-point elements of a
1434*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double] into two signed 32-bit integer values,
1435*bed243d3SAndroid Build Coastguard Worker /// returned in a 64-bit vector of [2 x i32].
1436*bed243d3SAndroid Build Coastguard Worker ///
1437*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1438*bed243d3SAndroid Build Coastguard Worker ///
1439*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> CVTPD2PI </c> instruction.
1440*bed243d3SAndroid Build Coastguard Worker ///
1441*bed243d3SAndroid Build Coastguard Worker /// \param __a
1442*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
1443*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit vector of [2 x i32] containing the converted values.
_mm_cvtpd_pi32(__m128d __a)1444*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_cvtpd_pi32(__m128d __a) {
1445*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_cvtpd2pi((__v2df)__a);
1446*bed243d3SAndroid Build Coastguard Worker }
1447*bed243d3SAndroid Build Coastguard Worker
1448*bed243d3SAndroid Build Coastguard Worker /// Converts the two double-precision floating-point elements of a
1449*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double] into two signed 32-bit integer values,
1450*bed243d3SAndroid Build Coastguard Worker /// returned in a 64-bit vector of [2 x i32].
1451*bed243d3SAndroid Build Coastguard Worker ///
1452*bed243d3SAndroid Build Coastguard Worker /// If the result of either conversion is inexact, the result is truncated
1453*bed243d3SAndroid Build Coastguard Worker /// (rounded towards zero) regardless of the current MXCSR setting.
1454*bed243d3SAndroid Build Coastguard Worker ///
1455*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1456*bed243d3SAndroid Build Coastguard Worker ///
1457*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> CVTTPD2PI </c> instruction.
1458*bed243d3SAndroid Build Coastguard Worker ///
1459*bed243d3SAndroid Build Coastguard Worker /// \param __a
1460*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
1461*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit vector of [2 x i32] containing the converted values.
_mm_cvttpd_pi32(__m128d __a)1462*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_cvttpd_pi32(__m128d __a) {
1463*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_cvttpd2pi((__v2df)__a);
1464*bed243d3SAndroid Build Coastguard Worker }
1465*bed243d3SAndroid Build Coastguard Worker
1466*bed243d3SAndroid Build Coastguard Worker /// Converts the two signed 32-bit integer elements of a 64-bit vector of
1467*bed243d3SAndroid Build Coastguard Worker /// [2 x i32] into two double-precision floating-point values, returned in a
1468*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector of [2 x double].
1469*bed243d3SAndroid Build Coastguard Worker ///
1470*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1471*bed243d3SAndroid Build Coastguard Worker ///
1472*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> CVTPI2PD </c> instruction.
1473*bed243d3SAndroid Build Coastguard Worker ///
1474*bed243d3SAndroid Build Coastguard Worker /// \param __a
1475*bed243d3SAndroid Build Coastguard Worker /// A 64-bit vector of [2 x i32].
1476*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the converted values.
_mm_cvtpi32_pd(__m64 __a)1477*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS_MMX _mm_cvtpi32_pd(__m64 __a) {
1478*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_cvtpi2pd((__v2si)__a);
1479*bed243d3SAndroid Build Coastguard Worker }
1480*bed243d3SAndroid Build Coastguard Worker
1481*bed243d3SAndroid Build Coastguard Worker /// Returns the low-order element of a 128-bit vector of [2 x double] as
1482*bed243d3SAndroid Build Coastguard Worker /// a double-precision floating-point value.
1483*bed243d3SAndroid Build Coastguard Worker ///
1484*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1485*bed243d3SAndroid Build Coastguard Worker ///
1486*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
1487*bed243d3SAndroid Build Coastguard Worker ///
1488*bed243d3SAndroid Build Coastguard Worker /// \param __a
1489*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are returned.
1490*bed243d3SAndroid Build Coastguard Worker /// \returns A double-precision floating-point value copied from the lower 64
1491*bed243d3SAndroid Build Coastguard Worker /// bits of \a __a.
_mm_cvtsd_f64(__m128d __a)1492*bed243d3SAndroid Build Coastguard Worker static __inline__ double __DEFAULT_FN_ATTRS _mm_cvtsd_f64(__m128d __a) {
1493*bed243d3SAndroid Build Coastguard Worker return __a[0];
1494*bed243d3SAndroid Build Coastguard Worker }
1495*bed243d3SAndroid Build Coastguard Worker
1496*bed243d3SAndroid Build Coastguard Worker /// Loads a 128-bit floating-point vector of [2 x double] from an aligned
1497*bed243d3SAndroid Build Coastguard Worker /// memory location.
1498*bed243d3SAndroid Build Coastguard Worker ///
1499*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1500*bed243d3SAndroid Build Coastguard Worker ///
1501*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVAPD / MOVAPD </c> instruction.
1502*bed243d3SAndroid Build Coastguard Worker ///
1503*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1504*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 128-bit memory location. The address of the memory
1505*bed243d3SAndroid Build Coastguard Worker /// location has to be 16-byte aligned.
1506*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the loaded values.
_mm_load_pd(double const * __dp)1507*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_load_pd(double const *__dp) {
1508*bed243d3SAndroid Build Coastguard Worker return *(const __m128d *)__dp;
1509*bed243d3SAndroid Build Coastguard Worker }
1510*bed243d3SAndroid Build Coastguard Worker
1511*bed243d3SAndroid Build Coastguard Worker /// Loads a double-precision floating-point value from a specified memory
1512*bed243d3SAndroid Build Coastguard Worker /// location and duplicates it to both vector elements of a 128-bit vector of
1513*bed243d3SAndroid Build Coastguard Worker /// [2 x double].
1514*bed243d3SAndroid Build Coastguard Worker ///
1515*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1516*bed243d3SAndroid Build Coastguard Worker ///
1517*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVDDUP / MOVDDUP </c> instruction.
1518*bed243d3SAndroid Build Coastguard Worker ///
1519*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1520*bed243d3SAndroid Build Coastguard Worker /// A pointer to a memory location containing a double-precision value.
1521*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the loaded and
1522*bed243d3SAndroid Build Coastguard Worker /// duplicated values.
_mm_load1_pd(double const * __dp)1523*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_load1_pd(double const *__dp) {
1524*bed243d3SAndroid Build Coastguard Worker struct __mm_load1_pd_struct {
1525*bed243d3SAndroid Build Coastguard Worker double __u;
1526*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1527*bed243d3SAndroid Build Coastguard Worker double __u = ((const struct __mm_load1_pd_struct *)__dp)->__u;
1528*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__u, __u};
1529*bed243d3SAndroid Build Coastguard Worker }
1530*bed243d3SAndroid Build Coastguard Worker
1531*bed243d3SAndroid Build Coastguard Worker #define _mm_load_pd1(dp) _mm_load1_pd(dp)
1532*bed243d3SAndroid Build Coastguard Worker
1533*bed243d3SAndroid Build Coastguard Worker /// Loads two double-precision values, in reverse order, from an aligned
1534*bed243d3SAndroid Build Coastguard Worker /// memory location into a 128-bit vector of [2 x double].
1535*bed243d3SAndroid Build Coastguard Worker ///
1536*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1537*bed243d3SAndroid Build Coastguard Worker ///
1538*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVAPD / MOVAPD </c> instruction +
1539*bed243d3SAndroid Build Coastguard Worker /// needed shuffling instructions. In AVX mode, the shuffling may be combined
1540*bed243d3SAndroid Build Coastguard Worker /// with the \c VMOVAPD, resulting in only a \c VPERMILPD instruction.
1541*bed243d3SAndroid Build Coastguard Worker ///
1542*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1543*bed243d3SAndroid Build Coastguard Worker /// A 16-byte aligned pointer to an array of double-precision values to be
1544*bed243d3SAndroid Build Coastguard Worker /// loaded in reverse order.
1545*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the reversed loaded
1546*bed243d3SAndroid Build Coastguard Worker /// values.
_mm_loadr_pd(double const * __dp)1547*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_loadr_pd(double const *__dp) {
1548*bed243d3SAndroid Build Coastguard Worker __m128d __u = *(const __m128d *)__dp;
1549*bed243d3SAndroid Build Coastguard Worker return __builtin_shufflevector((__v2df)__u, (__v2df)__u, 1, 0);
1550*bed243d3SAndroid Build Coastguard Worker }
1551*bed243d3SAndroid Build Coastguard Worker
1552*bed243d3SAndroid Build Coastguard Worker /// Loads a 128-bit floating-point vector of [2 x double] from an
1553*bed243d3SAndroid Build Coastguard Worker /// unaligned memory location.
1554*bed243d3SAndroid Build Coastguard Worker ///
1555*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1556*bed243d3SAndroid Build Coastguard Worker ///
1557*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVUPD / MOVUPD </c> instruction.
1558*bed243d3SAndroid Build Coastguard Worker ///
1559*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1560*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 128-bit memory location. The address of the memory
1561*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
1562*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the loaded values.
_mm_loadu_pd(double const * __dp)1563*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_loadu_pd(double const *__dp) {
1564*bed243d3SAndroid Build Coastguard Worker struct __loadu_pd {
1565*bed243d3SAndroid Build Coastguard Worker __m128d_u __v;
1566*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1567*bed243d3SAndroid Build Coastguard Worker return ((const struct __loadu_pd *)__dp)->__v;
1568*bed243d3SAndroid Build Coastguard Worker }
1569*bed243d3SAndroid Build Coastguard Worker
1570*bed243d3SAndroid Build Coastguard Worker /// Loads a 64-bit integer value to the low element of a 128-bit integer
1571*bed243d3SAndroid Build Coastguard Worker /// vector and clears the upper element.
1572*bed243d3SAndroid Build Coastguard Worker ///
1573*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1574*bed243d3SAndroid Build Coastguard Worker ///
1575*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction.
1576*bed243d3SAndroid Build Coastguard Worker ///
1577*bed243d3SAndroid Build Coastguard Worker /// \param __a
1578*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location. The address of the memory
1579*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
1580*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64] containing the loaded value.
_mm_loadu_si64(void const * __a)1581*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_loadu_si64(void const *__a) {
1582*bed243d3SAndroid Build Coastguard Worker struct __loadu_si64 {
1583*bed243d3SAndroid Build Coastguard Worker long long __v;
1584*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1585*bed243d3SAndroid Build Coastguard Worker long long __u = ((const struct __loadu_si64 *)__a)->__v;
1586*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v2di){__u, 0LL};
1587*bed243d3SAndroid Build Coastguard Worker }
1588*bed243d3SAndroid Build Coastguard Worker
1589*bed243d3SAndroid Build Coastguard Worker /// Loads a 32-bit integer value to the low element of a 128-bit integer
1590*bed243d3SAndroid Build Coastguard Worker /// vector and clears the upper element.
1591*bed243d3SAndroid Build Coastguard Worker ///
1592*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1593*bed243d3SAndroid Build Coastguard Worker ///
1594*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
1595*bed243d3SAndroid Build Coastguard Worker ///
1596*bed243d3SAndroid Build Coastguard Worker /// \param __a
1597*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 32-bit memory location. The address of the memory
1598*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
1599*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] containing the loaded value.
_mm_loadu_si32(void const * __a)1600*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_loadu_si32(void const *__a) {
1601*bed243d3SAndroid Build Coastguard Worker struct __loadu_si32 {
1602*bed243d3SAndroid Build Coastguard Worker int __v;
1603*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1604*bed243d3SAndroid Build Coastguard Worker int __u = ((const struct __loadu_si32 *)__a)->__v;
1605*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v4si){__u, 0, 0, 0};
1606*bed243d3SAndroid Build Coastguard Worker }
1607*bed243d3SAndroid Build Coastguard Worker
1608*bed243d3SAndroid Build Coastguard Worker /// Loads a 16-bit integer value to the low element of a 128-bit integer
1609*bed243d3SAndroid Build Coastguard Worker /// vector and clears the upper element.
1610*bed243d3SAndroid Build Coastguard Worker ///
1611*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1612*bed243d3SAndroid Build Coastguard Worker ///
1613*bed243d3SAndroid Build Coastguard Worker /// This intrinsic does not correspond to a specific instruction.
1614*bed243d3SAndroid Build Coastguard Worker ///
1615*bed243d3SAndroid Build Coastguard Worker /// \param __a
1616*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 16-bit memory location. The address of the memory
1617*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
1618*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [8 x i16] containing the loaded value.
_mm_loadu_si16(void const * __a)1619*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_loadu_si16(void const *__a) {
1620*bed243d3SAndroid Build Coastguard Worker struct __loadu_si16 {
1621*bed243d3SAndroid Build Coastguard Worker short __v;
1622*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1623*bed243d3SAndroid Build Coastguard Worker short __u = ((const struct __loadu_si16 *)__a)->__v;
1624*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v8hi){__u, 0, 0, 0, 0, 0, 0, 0};
1625*bed243d3SAndroid Build Coastguard Worker }
1626*bed243d3SAndroid Build Coastguard Worker
1627*bed243d3SAndroid Build Coastguard Worker /// Loads a 64-bit double-precision value to the low element of a
1628*bed243d3SAndroid Build Coastguard Worker /// 128-bit integer vector and clears the upper element.
1629*bed243d3SAndroid Build Coastguard Worker ///
1630*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1631*bed243d3SAndroid Build Coastguard Worker ///
1632*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVSD / MOVSD </c> instruction.
1633*bed243d3SAndroid Build Coastguard Worker ///
1634*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1635*bed243d3SAndroid Build Coastguard Worker /// A pointer to a memory location containing a double-precision value.
1636*bed243d3SAndroid Build Coastguard Worker /// The address of the memory location does not have to be aligned.
1637*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the loaded value.
_mm_load_sd(double const * __dp)1638*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_load_sd(double const *__dp) {
1639*bed243d3SAndroid Build Coastguard Worker struct __mm_load_sd_struct {
1640*bed243d3SAndroid Build Coastguard Worker double __u;
1641*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1642*bed243d3SAndroid Build Coastguard Worker double __u = ((const struct __mm_load_sd_struct *)__dp)->__u;
1643*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__u, 0};
1644*bed243d3SAndroid Build Coastguard Worker }
1645*bed243d3SAndroid Build Coastguard Worker
1646*bed243d3SAndroid Build Coastguard Worker /// Loads a double-precision value into the high-order bits of a 128-bit
1647*bed243d3SAndroid Build Coastguard Worker /// vector of [2 x double]. The low-order bits are copied from the low-order
1648*bed243d3SAndroid Build Coastguard Worker /// bits of the first operand.
1649*bed243d3SAndroid Build Coastguard Worker ///
1650*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1651*bed243d3SAndroid Build Coastguard Worker ///
1652*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVHPD / MOVHPD </c> instruction.
1653*bed243d3SAndroid Build Coastguard Worker ///
1654*bed243d3SAndroid Build Coastguard Worker /// \param __a
1655*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. \n
1656*bed243d3SAndroid Build Coastguard Worker /// Bits [63:0] are written to bits [63:0] of the result.
1657*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1658*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location containing a double-precision
1659*bed243d3SAndroid Build Coastguard Worker /// floating-point value that is loaded. The loaded value is written to bits
1660*bed243d3SAndroid Build Coastguard Worker /// [127:64] of the result. The address of the memory location does not have
1661*bed243d3SAndroid Build Coastguard Worker /// to be aligned.
1662*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the moved values.
_mm_loadh_pd(__m128d __a,double const * __dp)1663*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_loadh_pd(__m128d __a,
1664*bed243d3SAndroid Build Coastguard Worker double const *__dp) {
1665*bed243d3SAndroid Build Coastguard Worker struct __mm_loadh_pd_struct {
1666*bed243d3SAndroid Build Coastguard Worker double __u;
1667*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1668*bed243d3SAndroid Build Coastguard Worker double __u = ((const struct __mm_loadh_pd_struct *)__dp)->__u;
1669*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__a[0], __u};
1670*bed243d3SAndroid Build Coastguard Worker }
1671*bed243d3SAndroid Build Coastguard Worker
1672*bed243d3SAndroid Build Coastguard Worker /// Loads a double-precision value into the low-order bits of a 128-bit
1673*bed243d3SAndroid Build Coastguard Worker /// vector of [2 x double]. The high-order bits are copied from the
1674*bed243d3SAndroid Build Coastguard Worker /// high-order bits of the first operand.
1675*bed243d3SAndroid Build Coastguard Worker ///
1676*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1677*bed243d3SAndroid Build Coastguard Worker ///
1678*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVLPD / MOVLPD </c> instruction.
1679*bed243d3SAndroid Build Coastguard Worker ///
1680*bed243d3SAndroid Build Coastguard Worker /// \param __a
1681*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. \n
1682*bed243d3SAndroid Build Coastguard Worker /// Bits [127:64] are written to bits [127:64] of the result.
1683*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1684*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location containing a double-precision
1685*bed243d3SAndroid Build Coastguard Worker /// floating-point value that is loaded. The loaded value is written to bits
1686*bed243d3SAndroid Build Coastguard Worker /// [63:0] of the result. The address of the memory location does not have to
1687*bed243d3SAndroid Build Coastguard Worker /// be aligned.
1688*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the moved values.
_mm_loadl_pd(__m128d __a,double const * __dp)1689*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_loadl_pd(__m128d __a,
1690*bed243d3SAndroid Build Coastguard Worker double const *__dp) {
1691*bed243d3SAndroid Build Coastguard Worker struct __mm_loadl_pd_struct {
1692*bed243d3SAndroid Build Coastguard Worker double __u;
1693*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1694*bed243d3SAndroid Build Coastguard Worker double __u = ((const struct __mm_loadl_pd_struct *)__dp)->__u;
1695*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__u, __a[1]};
1696*bed243d3SAndroid Build Coastguard Worker }
1697*bed243d3SAndroid Build Coastguard Worker
1698*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double] with
1699*bed243d3SAndroid Build Coastguard Worker /// unspecified content. This could be used as an argument to another
1700*bed243d3SAndroid Build Coastguard Worker /// intrinsic function where the argument is required but the value is not
1701*bed243d3SAndroid Build Coastguard Worker /// actually used.
1702*bed243d3SAndroid Build Coastguard Worker ///
1703*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1704*bed243d3SAndroid Build Coastguard Worker ///
1705*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
1706*bed243d3SAndroid Build Coastguard Worker ///
1707*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit floating-point vector of [2 x double] with unspecified
1708*bed243d3SAndroid Build Coastguard Worker /// content.
_mm_undefined_pd(void)1709*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_undefined_pd(void) {
1710*bed243d3SAndroid Build Coastguard Worker return (__m128d)__builtin_ia32_undef128();
1711*bed243d3SAndroid Build Coastguard Worker }
1712*bed243d3SAndroid Build Coastguard Worker
1713*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double]. The lower
1714*bed243d3SAndroid Build Coastguard Worker /// 64 bits of the vector are initialized with the specified double-precision
1715*bed243d3SAndroid Build Coastguard Worker /// floating-point value. The upper 64 bits are set to zero.
1716*bed243d3SAndroid Build Coastguard Worker ///
1717*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1718*bed243d3SAndroid Build Coastguard Worker ///
1719*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction.
1720*bed243d3SAndroid Build Coastguard Worker ///
1721*bed243d3SAndroid Build Coastguard Worker /// \param __w
1722*bed243d3SAndroid Build Coastguard Worker /// A double-precision floating-point value used to initialize the lower 64
1723*bed243d3SAndroid Build Coastguard Worker /// bits of the result.
1724*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit floating-point vector of [2 x double]. The
1725*bed243d3SAndroid Build Coastguard Worker /// lower 64 bits contain the value of the parameter. The upper 64 bits are
1726*bed243d3SAndroid Build Coastguard Worker /// set to zero.
_mm_set_sd(double __w)1727*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_sd(double __w) {
1728*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__w, 0};
1729*bed243d3SAndroid Build Coastguard Worker }
1730*bed243d3SAndroid Build Coastguard Worker
1731*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double], with each
1732*bed243d3SAndroid Build Coastguard Worker /// of the two double-precision floating-point vector elements set to the
1733*bed243d3SAndroid Build Coastguard Worker /// specified double-precision floating-point value.
1734*bed243d3SAndroid Build Coastguard Worker ///
1735*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1736*bed243d3SAndroid Build Coastguard Worker ///
1737*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVDDUP / MOVLHPS </c> instruction.
1738*bed243d3SAndroid Build Coastguard Worker ///
1739*bed243d3SAndroid Build Coastguard Worker /// \param __w
1740*bed243d3SAndroid Build Coastguard Worker /// A double-precision floating-point value used to initialize each vector
1741*bed243d3SAndroid Build Coastguard Worker /// element of the result.
1742*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit floating-point vector of [2 x double].
_mm_set1_pd(double __w)1743*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set1_pd(double __w) {
1744*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__w, __w};
1745*bed243d3SAndroid Build Coastguard Worker }
1746*bed243d3SAndroid Build Coastguard Worker
1747*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double], with each
1748*bed243d3SAndroid Build Coastguard Worker /// of the two double-precision floating-point vector elements set to the
1749*bed243d3SAndroid Build Coastguard Worker /// specified double-precision floating-point value.
1750*bed243d3SAndroid Build Coastguard Worker ///
1751*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1752*bed243d3SAndroid Build Coastguard Worker ///
1753*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVDDUP / MOVLHPS </c> instruction.
1754*bed243d3SAndroid Build Coastguard Worker ///
1755*bed243d3SAndroid Build Coastguard Worker /// \param __w
1756*bed243d3SAndroid Build Coastguard Worker /// A double-precision floating-point value used to initialize each vector
1757*bed243d3SAndroid Build Coastguard Worker /// element of the result.
1758*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit floating-point vector of [2 x double].
_mm_set_pd1(double __w)1759*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_pd1(double __w) {
1760*bed243d3SAndroid Build Coastguard Worker return _mm_set1_pd(__w);
1761*bed243d3SAndroid Build Coastguard Worker }
1762*bed243d3SAndroid Build Coastguard Worker
1763*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double]
1764*bed243d3SAndroid Build Coastguard Worker /// initialized with the specified double-precision floating-point values.
1765*bed243d3SAndroid Build Coastguard Worker ///
1766*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1767*bed243d3SAndroid Build Coastguard Worker ///
1768*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUNPCKLPD / UNPCKLPD </c> instruction.
1769*bed243d3SAndroid Build Coastguard Worker ///
1770*bed243d3SAndroid Build Coastguard Worker /// \param __w
1771*bed243d3SAndroid Build Coastguard Worker /// A double-precision floating-point value used to initialize the upper 64
1772*bed243d3SAndroid Build Coastguard Worker /// bits of the result.
1773*bed243d3SAndroid Build Coastguard Worker /// \param __x
1774*bed243d3SAndroid Build Coastguard Worker /// A double-precision floating-point value used to initialize the lower 64
1775*bed243d3SAndroid Build Coastguard Worker /// bits of the result.
1776*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit floating-point vector of [2 x double].
_mm_set_pd(double __w,double __x)1777*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_pd(double __w,
1778*bed243d3SAndroid Build Coastguard Worker double __x) {
1779*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__x, __w};
1780*bed243d3SAndroid Build Coastguard Worker }
1781*bed243d3SAndroid Build Coastguard Worker
1782*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double],
1783*bed243d3SAndroid Build Coastguard Worker /// initialized in reverse order with the specified double-precision
1784*bed243d3SAndroid Build Coastguard Worker /// floating-point values.
1785*bed243d3SAndroid Build Coastguard Worker ///
1786*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1787*bed243d3SAndroid Build Coastguard Worker ///
1788*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUNPCKLPD / UNPCKLPD </c> instruction.
1789*bed243d3SAndroid Build Coastguard Worker ///
1790*bed243d3SAndroid Build Coastguard Worker /// \param __w
1791*bed243d3SAndroid Build Coastguard Worker /// A double-precision floating-point value used to initialize the lower 64
1792*bed243d3SAndroid Build Coastguard Worker /// bits of the result.
1793*bed243d3SAndroid Build Coastguard Worker /// \param __x
1794*bed243d3SAndroid Build Coastguard Worker /// A double-precision floating-point value used to initialize the upper 64
1795*bed243d3SAndroid Build Coastguard Worker /// bits of the result.
1796*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit floating-point vector of [2 x double].
_mm_setr_pd(double __w,double __x)1797*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_setr_pd(double __w,
1798*bed243d3SAndroid Build Coastguard Worker double __x) {
1799*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){__w, __x};
1800*bed243d3SAndroid Build Coastguard Worker }
1801*bed243d3SAndroid Build Coastguard Worker
1802*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double]
1803*bed243d3SAndroid Build Coastguard Worker /// initialized to zero.
1804*bed243d3SAndroid Build Coastguard Worker ///
1805*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1806*bed243d3SAndroid Build Coastguard Worker ///
1807*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VXORPS / XORPS </c> instruction.
1808*bed243d3SAndroid Build Coastguard Worker ///
1809*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit floating-point vector of [2 x double] with
1810*bed243d3SAndroid Build Coastguard Worker /// all elements set to zero.
_mm_setzero_pd(void)1811*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_setzero_pd(void) {
1812*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128d){0.0, 0.0};
1813*bed243d3SAndroid Build Coastguard Worker }
1814*bed243d3SAndroid Build Coastguard Worker
1815*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double]. The lower
1816*bed243d3SAndroid Build Coastguard Worker /// 64 bits are set to the lower 64 bits of the second parameter. The upper
1817*bed243d3SAndroid Build Coastguard Worker /// 64 bits are set to the upper 64 bits of the first parameter.
1818*bed243d3SAndroid Build Coastguard Worker ///
1819*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1820*bed243d3SAndroid Build Coastguard Worker ///
1821*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VBLENDPD / BLENDPD </c> instruction.
1822*bed243d3SAndroid Build Coastguard Worker ///
1823*bed243d3SAndroid Build Coastguard Worker /// \param __a
1824*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The upper 64 bits are written to the
1825*bed243d3SAndroid Build Coastguard Worker /// upper 64 bits of the result.
1826*bed243d3SAndroid Build Coastguard Worker /// \param __b
1827*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are written to the
1828*bed243d3SAndroid Build Coastguard Worker /// lower 64 bits of the result.
1829*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the moved values.
_mm_move_sd(__m128d __a,__m128d __b)1830*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_move_sd(__m128d __a,
1831*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
1832*bed243d3SAndroid Build Coastguard Worker __a[0] = __b[0];
1833*bed243d3SAndroid Build Coastguard Worker return __a;
1834*bed243d3SAndroid Build Coastguard Worker }
1835*bed243d3SAndroid Build Coastguard Worker
1836*bed243d3SAndroid Build Coastguard Worker /// Stores the lower 64 bits of a 128-bit vector of [2 x double] to a
1837*bed243d3SAndroid Build Coastguard Worker /// memory location.
1838*bed243d3SAndroid Build Coastguard Worker ///
1839*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1840*bed243d3SAndroid Build Coastguard Worker ///
1841*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVSD / MOVSD </c> instruction.
1842*bed243d3SAndroid Build Coastguard Worker ///
1843*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1844*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location.
1845*bed243d3SAndroid Build Coastguard Worker /// \param __a
1846*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the value to be stored.
_mm_store_sd(double * __dp,__m128d __a)1847*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_store_sd(double *__dp,
1848*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1849*bed243d3SAndroid Build Coastguard Worker struct __mm_store_sd_struct {
1850*bed243d3SAndroid Build Coastguard Worker double __u;
1851*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1852*bed243d3SAndroid Build Coastguard Worker ((struct __mm_store_sd_struct *)__dp)->__u = __a[0];
1853*bed243d3SAndroid Build Coastguard Worker }
1854*bed243d3SAndroid Build Coastguard Worker
1855*bed243d3SAndroid Build Coastguard Worker /// Moves packed double-precision values from a 128-bit vector of
1856*bed243d3SAndroid Build Coastguard Worker /// [2 x double] to a memory location.
1857*bed243d3SAndroid Build Coastguard Worker ///
1858*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1859*bed243d3SAndroid Build Coastguard Worker ///
1860*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c>VMOVAPD / MOVAPS</c> instruction.
1861*bed243d3SAndroid Build Coastguard Worker ///
1862*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1863*bed243d3SAndroid Build Coastguard Worker /// A pointer to an aligned memory location that can store two
1864*bed243d3SAndroid Build Coastguard Worker /// double-precision values.
1865*bed243d3SAndroid Build Coastguard Worker /// \param __a
1866*bed243d3SAndroid Build Coastguard Worker /// A packed 128-bit vector of [2 x double] containing the values to be
1867*bed243d3SAndroid Build Coastguard Worker /// moved.
_mm_store_pd(double * __dp,__m128d __a)1868*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_store_pd(double *__dp,
1869*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1870*bed243d3SAndroid Build Coastguard Worker *(__m128d *)__dp = __a;
1871*bed243d3SAndroid Build Coastguard Worker }
1872*bed243d3SAndroid Build Coastguard Worker
1873*bed243d3SAndroid Build Coastguard Worker /// Moves the lower 64 bits of a 128-bit vector of [2 x double] twice to
1874*bed243d3SAndroid Build Coastguard Worker /// the upper and lower 64 bits of a memory location.
1875*bed243d3SAndroid Build Coastguard Worker ///
1876*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1877*bed243d3SAndroid Build Coastguard Worker ///
1878*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the
1879*bed243d3SAndroid Build Coastguard Worker /// <c> VMOVDDUP + VMOVAPD / MOVLHPS + MOVAPS </c> instruction.
1880*bed243d3SAndroid Build Coastguard Worker ///
1881*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1882*bed243d3SAndroid Build Coastguard Worker /// A pointer to a memory location that can store two double-precision
1883*bed243d3SAndroid Build Coastguard Worker /// values.
1884*bed243d3SAndroid Build Coastguard Worker /// \param __a
1885*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] whose lower 64 bits are copied to each
1886*bed243d3SAndroid Build Coastguard Worker /// of the values in \a __dp.
_mm_store1_pd(double * __dp,__m128d __a)1887*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_store1_pd(double *__dp,
1888*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1889*bed243d3SAndroid Build Coastguard Worker __a = __builtin_shufflevector((__v2df)__a, (__v2df)__a, 0, 0);
1890*bed243d3SAndroid Build Coastguard Worker _mm_store_pd(__dp, __a);
1891*bed243d3SAndroid Build Coastguard Worker }
1892*bed243d3SAndroid Build Coastguard Worker
1893*bed243d3SAndroid Build Coastguard Worker /// Moves the lower 64 bits of a 128-bit vector of [2 x double] twice to
1894*bed243d3SAndroid Build Coastguard Worker /// the upper and lower 64 bits of a memory location.
1895*bed243d3SAndroid Build Coastguard Worker ///
1896*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1897*bed243d3SAndroid Build Coastguard Worker ///
1898*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the
1899*bed243d3SAndroid Build Coastguard Worker /// <c> VMOVDDUP + VMOVAPD / MOVLHPS + MOVAPS </c> instruction.
1900*bed243d3SAndroid Build Coastguard Worker ///
1901*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1902*bed243d3SAndroid Build Coastguard Worker /// A pointer to a memory location that can store two double-precision
1903*bed243d3SAndroid Build Coastguard Worker /// values.
1904*bed243d3SAndroid Build Coastguard Worker /// \param __a
1905*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] whose lower 64 bits are copied to each
1906*bed243d3SAndroid Build Coastguard Worker /// of the values in \a __dp.
_mm_store_pd1(double * __dp,__m128d __a)1907*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_store_pd1(double *__dp,
1908*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1909*bed243d3SAndroid Build Coastguard Worker _mm_store1_pd(__dp, __a);
1910*bed243d3SAndroid Build Coastguard Worker }
1911*bed243d3SAndroid Build Coastguard Worker
1912*bed243d3SAndroid Build Coastguard Worker /// Stores a 128-bit vector of [2 x double] into an unaligned memory
1913*bed243d3SAndroid Build Coastguard Worker /// location.
1914*bed243d3SAndroid Build Coastguard Worker ///
1915*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1916*bed243d3SAndroid Build Coastguard Worker ///
1917*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVUPD / MOVUPD </c> instruction.
1918*bed243d3SAndroid Build Coastguard Worker ///
1919*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1920*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 128-bit memory location. The address of the memory
1921*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
1922*bed243d3SAndroid Build Coastguard Worker /// \param __a
1923*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the values to be stored.
_mm_storeu_pd(double * __dp,__m128d __a)1924*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storeu_pd(double *__dp,
1925*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1926*bed243d3SAndroid Build Coastguard Worker struct __storeu_pd {
1927*bed243d3SAndroid Build Coastguard Worker __m128d_u __v;
1928*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1929*bed243d3SAndroid Build Coastguard Worker ((struct __storeu_pd *)__dp)->__v = __a;
1930*bed243d3SAndroid Build Coastguard Worker }
1931*bed243d3SAndroid Build Coastguard Worker
1932*bed243d3SAndroid Build Coastguard Worker /// Stores two double-precision values, in reverse order, from a 128-bit
1933*bed243d3SAndroid Build Coastguard Worker /// vector of [2 x double] to a 16-byte aligned memory location.
1934*bed243d3SAndroid Build Coastguard Worker ///
1935*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1936*bed243d3SAndroid Build Coastguard Worker ///
1937*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to a shuffling instruction followed by a
1938*bed243d3SAndroid Build Coastguard Worker /// <c> VMOVAPD / MOVAPD </c> instruction.
1939*bed243d3SAndroid Build Coastguard Worker ///
1940*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1941*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 16-byte aligned memory location that can store two
1942*bed243d3SAndroid Build Coastguard Worker /// double-precision values.
1943*bed243d3SAndroid Build Coastguard Worker /// \param __a
1944*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the values to be reversed and
1945*bed243d3SAndroid Build Coastguard Worker /// stored.
_mm_storer_pd(double * __dp,__m128d __a)1946*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storer_pd(double *__dp,
1947*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1948*bed243d3SAndroid Build Coastguard Worker __a = __builtin_shufflevector((__v2df)__a, (__v2df)__a, 1, 0);
1949*bed243d3SAndroid Build Coastguard Worker *(__m128d *)__dp = __a;
1950*bed243d3SAndroid Build Coastguard Worker }
1951*bed243d3SAndroid Build Coastguard Worker
1952*bed243d3SAndroid Build Coastguard Worker /// Stores the upper 64 bits of a 128-bit vector of [2 x double] to a
1953*bed243d3SAndroid Build Coastguard Worker /// memory location.
1954*bed243d3SAndroid Build Coastguard Worker ///
1955*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1956*bed243d3SAndroid Build Coastguard Worker ///
1957*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVHPD / MOVHPD </c> instruction.
1958*bed243d3SAndroid Build Coastguard Worker ///
1959*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1960*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location.
1961*bed243d3SAndroid Build Coastguard Worker /// \param __a
1962*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the value to be stored.
_mm_storeh_pd(double * __dp,__m128d __a)1963*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storeh_pd(double *__dp,
1964*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1965*bed243d3SAndroid Build Coastguard Worker struct __mm_storeh_pd_struct {
1966*bed243d3SAndroid Build Coastguard Worker double __u;
1967*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1968*bed243d3SAndroid Build Coastguard Worker ((struct __mm_storeh_pd_struct *)__dp)->__u = __a[1];
1969*bed243d3SAndroid Build Coastguard Worker }
1970*bed243d3SAndroid Build Coastguard Worker
1971*bed243d3SAndroid Build Coastguard Worker /// Stores the lower 64 bits of a 128-bit vector of [2 x double] to a
1972*bed243d3SAndroid Build Coastguard Worker /// memory location.
1973*bed243d3SAndroid Build Coastguard Worker ///
1974*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1975*bed243d3SAndroid Build Coastguard Worker ///
1976*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVLPD / MOVLPD </c> instruction.
1977*bed243d3SAndroid Build Coastguard Worker ///
1978*bed243d3SAndroid Build Coastguard Worker /// \param __dp
1979*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location.
1980*bed243d3SAndroid Build Coastguard Worker /// \param __a
1981*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the value to be stored.
_mm_storel_pd(double * __dp,__m128d __a)1982*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storel_pd(double *__dp,
1983*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
1984*bed243d3SAndroid Build Coastguard Worker struct __mm_storeh_pd_struct {
1985*bed243d3SAndroid Build Coastguard Worker double __u;
1986*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
1987*bed243d3SAndroid Build Coastguard Worker ((struct __mm_storeh_pd_struct *)__dp)->__u = __a[0];
1988*bed243d3SAndroid Build Coastguard Worker }
1989*bed243d3SAndroid Build Coastguard Worker
1990*bed243d3SAndroid Build Coastguard Worker /// Adds the corresponding elements of two 128-bit vectors of [16 x i8],
1991*bed243d3SAndroid Build Coastguard Worker /// saving the lower 8 bits of each sum in the corresponding element of a
1992*bed243d3SAndroid Build Coastguard Worker /// 128-bit result vector of [16 x i8].
1993*bed243d3SAndroid Build Coastguard Worker ///
1994*bed243d3SAndroid Build Coastguard Worker /// The integer elements of both parameters can be either signed or unsigned.
1995*bed243d3SAndroid Build Coastguard Worker ///
1996*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
1997*bed243d3SAndroid Build Coastguard Worker ///
1998*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDB / PADDB </c> instruction.
1999*bed243d3SAndroid Build Coastguard Worker ///
2000*bed243d3SAndroid Build Coastguard Worker /// \param __a
2001*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [16 x i8].
2002*bed243d3SAndroid Build Coastguard Worker /// \param __b
2003*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [16 x i8].
2004*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [16 x i8] containing the sums of both
2005*bed243d3SAndroid Build Coastguard Worker /// parameters.
_mm_add_epi8(__m128i __a,__m128i __b)2006*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi8(__m128i __a,
2007*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2008*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v16qu)__a + (__v16qu)__b);
2009*bed243d3SAndroid Build Coastguard Worker }
2010*bed243d3SAndroid Build Coastguard Worker
2011*bed243d3SAndroid Build Coastguard Worker /// Adds the corresponding elements of two 128-bit vectors of [8 x i16],
2012*bed243d3SAndroid Build Coastguard Worker /// saving the lower 16 bits of each sum in the corresponding element of a
2013*bed243d3SAndroid Build Coastguard Worker /// 128-bit result vector of [8 x i16].
2014*bed243d3SAndroid Build Coastguard Worker ///
2015*bed243d3SAndroid Build Coastguard Worker /// The integer elements of both parameters can be either signed or unsigned.
2016*bed243d3SAndroid Build Coastguard Worker ///
2017*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2018*bed243d3SAndroid Build Coastguard Worker ///
2019*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDW / PADDW </c> instruction.
2020*bed243d3SAndroid Build Coastguard Worker ///
2021*bed243d3SAndroid Build Coastguard Worker /// \param __a
2022*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [8 x i16].
2023*bed243d3SAndroid Build Coastguard Worker /// \param __b
2024*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [8 x i16].
2025*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [8 x i16] containing the sums of both
2026*bed243d3SAndroid Build Coastguard Worker /// parameters.
_mm_add_epi16(__m128i __a,__m128i __b)2027*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi16(__m128i __a,
2028*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2029*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v8hu)__a + (__v8hu)__b);
2030*bed243d3SAndroid Build Coastguard Worker }
2031*bed243d3SAndroid Build Coastguard Worker
2032*bed243d3SAndroid Build Coastguard Worker /// Adds the corresponding elements of two 128-bit vectors of [4 x i32],
2033*bed243d3SAndroid Build Coastguard Worker /// saving the lower 32 bits of each sum in the corresponding element of a
2034*bed243d3SAndroid Build Coastguard Worker /// 128-bit result vector of [4 x i32].
2035*bed243d3SAndroid Build Coastguard Worker ///
2036*bed243d3SAndroid Build Coastguard Worker /// The integer elements of both parameters can be either signed or unsigned.
2037*bed243d3SAndroid Build Coastguard Worker ///
2038*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2039*bed243d3SAndroid Build Coastguard Worker ///
2040*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDD / PADDD </c> instruction.
2041*bed243d3SAndroid Build Coastguard Worker ///
2042*bed243d3SAndroid Build Coastguard Worker /// \param __a
2043*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x i32].
2044*bed243d3SAndroid Build Coastguard Worker /// \param __b
2045*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x i32].
2046*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] containing the sums of both
2047*bed243d3SAndroid Build Coastguard Worker /// parameters.
_mm_add_epi32(__m128i __a,__m128i __b)2048*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi32(__m128i __a,
2049*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2050*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v4su)__a + (__v4su)__b);
2051*bed243d3SAndroid Build Coastguard Worker }
2052*bed243d3SAndroid Build Coastguard Worker
2053*bed243d3SAndroid Build Coastguard Worker /// Adds two signed or unsigned 64-bit integer values, returning the
2054*bed243d3SAndroid Build Coastguard Worker /// lower 64 bits of the sum.
2055*bed243d3SAndroid Build Coastguard Worker ///
2056*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2057*bed243d3SAndroid Build Coastguard Worker ///
2058*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> PADDQ </c> instruction.
2059*bed243d3SAndroid Build Coastguard Worker ///
2060*bed243d3SAndroid Build Coastguard Worker /// \param __a
2061*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer.
2062*bed243d3SAndroid Build Coastguard Worker /// \param __b
2063*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer.
2064*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit integer containing the sum of both parameters.
_mm_add_si64(__m64 __a,__m64 __b)2065*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_add_si64(__m64 __a,
2066*bed243d3SAndroid Build Coastguard Worker __m64 __b) {
2067*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_paddq((__v1di)__a, (__v1di)__b);
2068*bed243d3SAndroid Build Coastguard Worker }
2069*bed243d3SAndroid Build Coastguard Worker
2070*bed243d3SAndroid Build Coastguard Worker /// Adds the corresponding elements of two 128-bit vectors of [2 x i64],
2071*bed243d3SAndroid Build Coastguard Worker /// saving the lower 64 bits of each sum in the corresponding element of a
2072*bed243d3SAndroid Build Coastguard Worker /// 128-bit result vector of [2 x i64].
2073*bed243d3SAndroid Build Coastguard Worker ///
2074*bed243d3SAndroid Build Coastguard Worker /// The integer elements of both parameters can be either signed or unsigned.
2075*bed243d3SAndroid Build Coastguard Worker ///
2076*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2077*bed243d3SAndroid Build Coastguard Worker ///
2078*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDQ / PADDQ </c> instruction.
2079*bed243d3SAndroid Build Coastguard Worker ///
2080*bed243d3SAndroid Build Coastguard Worker /// \param __a
2081*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64].
2082*bed243d3SAndroid Build Coastguard Worker /// \param __b
2083*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64].
2084*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64] containing the sums of both
2085*bed243d3SAndroid Build Coastguard Worker /// parameters.
_mm_add_epi64(__m128i __a,__m128i __b)2086*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_add_epi64(__m128i __a,
2087*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2088*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v2du)__a + (__v2du)__b);
2089*bed243d3SAndroid Build Coastguard Worker }
2090*bed243d3SAndroid Build Coastguard Worker
2091*bed243d3SAndroid Build Coastguard Worker /// Adds, with saturation, the corresponding elements of two 128-bit
2092*bed243d3SAndroid Build Coastguard Worker /// signed [16 x i8] vectors, saving each sum in the corresponding element
2093*bed243d3SAndroid Build Coastguard Worker /// of a 128-bit result vector of [16 x i8].
2094*bed243d3SAndroid Build Coastguard Worker ///
2095*bed243d3SAndroid Build Coastguard Worker /// Positive sums greater than 0x7F are saturated to 0x7F. Negative sums
2096*bed243d3SAndroid Build Coastguard Worker /// less than 0x80 are saturated to 0x80.
2097*bed243d3SAndroid Build Coastguard Worker ///
2098*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2099*bed243d3SAndroid Build Coastguard Worker ///
2100*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDSB / PADDSB </c> instruction.
2101*bed243d3SAndroid Build Coastguard Worker ///
2102*bed243d3SAndroid Build Coastguard Worker /// \param __a
2103*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [16 x i8] vector.
2104*bed243d3SAndroid Build Coastguard Worker /// \param __b
2105*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [16 x i8] vector.
2106*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit signed [16 x i8] vector containing the saturated sums of
2107*bed243d3SAndroid Build Coastguard Worker /// both parameters.
_mm_adds_epi8(__m128i __a,__m128i __b)2108*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_adds_epi8(__m128i __a,
2109*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2110*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_add_sat((__v16qs)__a, (__v16qs)__b);
2111*bed243d3SAndroid Build Coastguard Worker }
2112*bed243d3SAndroid Build Coastguard Worker
2113*bed243d3SAndroid Build Coastguard Worker /// Adds, with saturation, the corresponding elements of two 128-bit
2114*bed243d3SAndroid Build Coastguard Worker /// signed [8 x i16] vectors, saving each sum in the corresponding element
2115*bed243d3SAndroid Build Coastguard Worker /// of a 128-bit result vector of [8 x i16].
2116*bed243d3SAndroid Build Coastguard Worker ///
2117*bed243d3SAndroid Build Coastguard Worker /// Positive sums greater than 0x7FFF are saturated to 0x7FFF. Negative sums
2118*bed243d3SAndroid Build Coastguard Worker /// less than 0x8000 are saturated to 0x8000.
2119*bed243d3SAndroid Build Coastguard Worker ///
2120*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2121*bed243d3SAndroid Build Coastguard Worker ///
2122*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDSW / PADDSW </c> instruction.
2123*bed243d3SAndroid Build Coastguard Worker ///
2124*bed243d3SAndroid Build Coastguard Worker /// \param __a
2125*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2126*bed243d3SAndroid Build Coastguard Worker /// \param __b
2127*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2128*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit signed [8 x i16] vector containing the saturated sums of
2129*bed243d3SAndroid Build Coastguard Worker /// both parameters.
_mm_adds_epi16(__m128i __a,__m128i __b)2130*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_adds_epi16(__m128i __a,
2131*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2132*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_add_sat((__v8hi)__a, (__v8hi)__b);
2133*bed243d3SAndroid Build Coastguard Worker }
2134*bed243d3SAndroid Build Coastguard Worker
2135*bed243d3SAndroid Build Coastguard Worker /// Adds, with saturation, the corresponding elements of two 128-bit
2136*bed243d3SAndroid Build Coastguard Worker /// unsigned [16 x i8] vectors, saving each sum in the corresponding element
2137*bed243d3SAndroid Build Coastguard Worker /// of a 128-bit result vector of [16 x i8].
2138*bed243d3SAndroid Build Coastguard Worker ///
2139*bed243d3SAndroid Build Coastguard Worker /// Positive sums greater than 0xFF are saturated to 0xFF. Negative sums are
2140*bed243d3SAndroid Build Coastguard Worker /// saturated to 0x00.
2141*bed243d3SAndroid Build Coastguard Worker ///
2142*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2143*bed243d3SAndroid Build Coastguard Worker ///
2144*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDUSB / PADDUSB </c> instruction.
2145*bed243d3SAndroid Build Coastguard Worker ///
2146*bed243d3SAndroid Build Coastguard Worker /// \param __a
2147*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2148*bed243d3SAndroid Build Coastguard Worker /// \param __b
2149*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2150*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit unsigned [16 x i8] vector containing the saturated sums
2151*bed243d3SAndroid Build Coastguard Worker /// of both parameters.
_mm_adds_epu8(__m128i __a,__m128i __b)2152*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_adds_epu8(__m128i __a,
2153*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2154*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_add_sat((__v16qu)__a, (__v16qu)__b);
2155*bed243d3SAndroid Build Coastguard Worker }
2156*bed243d3SAndroid Build Coastguard Worker
2157*bed243d3SAndroid Build Coastguard Worker /// Adds, with saturation, the corresponding elements of two 128-bit
2158*bed243d3SAndroid Build Coastguard Worker /// unsigned [8 x i16] vectors, saving each sum in the corresponding element
2159*bed243d3SAndroid Build Coastguard Worker /// of a 128-bit result vector of [8 x i16].
2160*bed243d3SAndroid Build Coastguard Worker ///
2161*bed243d3SAndroid Build Coastguard Worker /// Positive sums greater than 0xFFFF are saturated to 0xFFFF. Negative sums
2162*bed243d3SAndroid Build Coastguard Worker /// are saturated to 0x0000.
2163*bed243d3SAndroid Build Coastguard Worker ///
2164*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2165*bed243d3SAndroid Build Coastguard Worker ///
2166*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPADDUSB / PADDUSB </c> instruction.
2167*bed243d3SAndroid Build Coastguard Worker ///
2168*bed243d3SAndroid Build Coastguard Worker /// \param __a
2169*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [8 x i16] vector.
2170*bed243d3SAndroid Build Coastguard Worker /// \param __b
2171*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [8 x i16] vector.
2172*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit unsigned [8 x i16] vector containing the saturated sums
2173*bed243d3SAndroid Build Coastguard Worker /// of both parameters.
_mm_adds_epu16(__m128i __a,__m128i __b)2174*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_adds_epu16(__m128i __a,
2175*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2176*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_add_sat((__v8hu)__a, (__v8hu)__b);
2177*bed243d3SAndroid Build Coastguard Worker }
2178*bed243d3SAndroid Build Coastguard Worker
2179*bed243d3SAndroid Build Coastguard Worker /// Computes the rounded averages of corresponding elements of two
2180*bed243d3SAndroid Build Coastguard Worker /// 128-bit unsigned [16 x i8] vectors, saving each result in the
2181*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit result vector of [16 x i8].
2182*bed243d3SAndroid Build Coastguard Worker ///
2183*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2184*bed243d3SAndroid Build Coastguard Worker ///
2185*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPAVGB / PAVGB </c> instruction.
2186*bed243d3SAndroid Build Coastguard Worker ///
2187*bed243d3SAndroid Build Coastguard Worker /// \param __a
2188*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2189*bed243d3SAndroid Build Coastguard Worker /// \param __b
2190*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2191*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit unsigned [16 x i8] vector containing the rounded
2192*bed243d3SAndroid Build Coastguard Worker /// averages of both parameters.
_mm_avg_epu8(__m128i __a,__m128i __b)2193*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_avg_epu8(__m128i __a,
2194*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2195*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pavgb128((__v16qi)__a, (__v16qi)__b);
2196*bed243d3SAndroid Build Coastguard Worker }
2197*bed243d3SAndroid Build Coastguard Worker
2198*bed243d3SAndroid Build Coastguard Worker /// Computes the rounded averages of corresponding elements of two
2199*bed243d3SAndroid Build Coastguard Worker /// 128-bit unsigned [8 x i16] vectors, saving each result in the
2200*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit result vector of [8 x i16].
2201*bed243d3SAndroid Build Coastguard Worker ///
2202*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2203*bed243d3SAndroid Build Coastguard Worker ///
2204*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPAVGW / PAVGW </c> instruction.
2205*bed243d3SAndroid Build Coastguard Worker ///
2206*bed243d3SAndroid Build Coastguard Worker /// \param __a
2207*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [8 x i16] vector.
2208*bed243d3SAndroid Build Coastguard Worker /// \param __b
2209*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [8 x i16] vector.
2210*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit unsigned [8 x i16] vector containing the rounded
2211*bed243d3SAndroid Build Coastguard Worker /// averages of both parameters.
_mm_avg_epu16(__m128i __a,__m128i __b)2212*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_avg_epu16(__m128i __a,
2213*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2214*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pavgw128((__v8hi)__a, (__v8hi)__b);
2215*bed243d3SAndroid Build Coastguard Worker }
2216*bed243d3SAndroid Build Coastguard Worker
2217*bed243d3SAndroid Build Coastguard Worker /// Multiplies the corresponding elements of two 128-bit signed [8 x i16]
2218*bed243d3SAndroid Build Coastguard Worker /// vectors, producing eight intermediate 32-bit signed integer products, and
2219*bed243d3SAndroid Build Coastguard Worker /// adds the consecutive pairs of 32-bit products to form a 128-bit signed
2220*bed243d3SAndroid Build Coastguard Worker /// [4 x i32] vector.
2221*bed243d3SAndroid Build Coastguard Worker ///
2222*bed243d3SAndroid Build Coastguard Worker /// For example, bits [15:0] of both parameters are multiplied producing a
2223*bed243d3SAndroid Build Coastguard Worker /// 32-bit product, bits [31:16] of both parameters are multiplied producing
2224*bed243d3SAndroid Build Coastguard Worker /// a 32-bit product, and the sum of those two products becomes bits [31:0]
2225*bed243d3SAndroid Build Coastguard Worker /// of the result.
2226*bed243d3SAndroid Build Coastguard Worker ///
2227*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2228*bed243d3SAndroid Build Coastguard Worker ///
2229*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMADDWD / PMADDWD </c> instruction.
2230*bed243d3SAndroid Build Coastguard Worker ///
2231*bed243d3SAndroid Build Coastguard Worker /// \param __a
2232*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2233*bed243d3SAndroid Build Coastguard Worker /// \param __b
2234*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2235*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit signed [4 x i32] vector containing the sums of products
2236*bed243d3SAndroid Build Coastguard Worker /// of both parameters.
_mm_madd_epi16(__m128i __a,__m128i __b)2237*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_madd_epi16(__m128i __a,
2238*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2239*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)__a, (__v8hi)__b);
2240*bed243d3SAndroid Build Coastguard Worker }
2241*bed243d3SAndroid Build Coastguard Worker
2242*bed243d3SAndroid Build Coastguard Worker /// Compares corresponding elements of two 128-bit signed [8 x i16]
2243*bed243d3SAndroid Build Coastguard Worker /// vectors, saving the greater value from each comparison in the
2244*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit result vector of [8 x i16].
2245*bed243d3SAndroid Build Coastguard Worker ///
2246*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2247*bed243d3SAndroid Build Coastguard Worker ///
2248*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMAXSW / PMAXSW </c> instruction.
2249*bed243d3SAndroid Build Coastguard Worker ///
2250*bed243d3SAndroid Build Coastguard Worker /// \param __a
2251*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2252*bed243d3SAndroid Build Coastguard Worker /// \param __b
2253*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2254*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit signed [8 x i16] vector containing the greater value of
2255*bed243d3SAndroid Build Coastguard Worker /// each comparison.
_mm_max_epi16(__m128i __a,__m128i __b)2256*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_max_epi16(__m128i __a,
2257*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2258*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_max((__v8hi)__a, (__v8hi)__b);
2259*bed243d3SAndroid Build Coastguard Worker }
2260*bed243d3SAndroid Build Coastguard Worker
2261*bed243d3SAndroid Build Coastguard Worker /// Compares corresponding elements of two 128-bit unsigned [16 x i8]
2262*bed243d3SAndroid Build Coastguard Worker /// vectors, saving the greater value from each comparison in the
2263*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit result vector of [16 x i8].
2264*bed243d3SAndroid Build Coastguard Worker ///
2265*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2266*bed243d3SAndroid Build Coastguard Worker ///
2267*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMAXUB / PMAXUB </c> instruction.
2268*bed243d3SAndroid Build Coastguard Worker ///
2269*bed243d3SAndroid Build Coastguard Worker /// \param __a
2270*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2271*bed243d3SAndroid Build Coastguard Worker /// \param __b
2272*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2273*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit unsigned [16 x i8] vector containing the greater value of
2274*bed243d3SAndroid Build Coastguard Worker /// each comparison.
_mm_max_epu8(__m128i __a,__m128i __b)2275*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_max_epu8(__m128i __a,
2276*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2277*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_max((__v16qu)__a, (__v16qu)__b);
2278*bed243d3SAndroid Build Coastguard Worker }
2279*bed243d3SAndroid Build Coastguard Worker
2280*bed243d3SAndroid Build Coastguard Worker /// Compares corresponding elements of two 128-bit signed [8 x i16]
2281*bed243d3SAndroid Build Coastguard Worker /// vectors, saving the smaller value from each comparison in the
2282*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit result vector of [8 x i16].
2283*bed243d3SAndroid Build Coastguard Worker ///
2284*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2285*bed243d3SAndroid Build Coastguard Worker ///
2286*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMINSW / PMINSW </c> instruction.
2287*bed243d3SAndroid Build Coastguard Worker ///
2288*bed243d3SAndroid Build Coastguard Worker /// \param __a
2289*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2290*bed243d3SAndroid Build Coastguard Worker /// \param __b
2291*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2292*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit signed [8 x i16] vector containing the smaller value of
2293*bed243d3SAndroid Build Coastguard Worker /// each comparison.
_mm_min_epi16(__m128i __a,__m128i __b)2294*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_min_epi16(__m128i __a,
2295*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2296*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_min((__v8hi)__a, (__v8hi)__b);
2297*bed243d3SAndroid Build Coastguard Worker }
2298*bed243d3SAndroid Build Coastguard Worker
2299*bed243d3SAndroid Build Coastguard Worker /// Compares corresponding elements of two 128-bit unsigned [16 x i8]
2300*bed243d3SAndroid Build Coastguard Worker /// vectors, saving the smaller value from each comparison in the
2301*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit result vector of [16 x i8].
2302*bed243d3SAndroid Build Coastguard Worker ///
2303*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2304*bed243d3SAndroid Build Coastguard Worker ///
2305*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMINUB / PMINUB </c> instruction.
2306*bed243d3SAndroid Build Coastguard Worker ///
2307*bed243d3SAndroid Build Coastguard Worker /// \param __a
2308*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2309*bed243d3SAndroid Build Coastguard Worker /// \param __b
2310*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [16 x i8] vector.
2311*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit unsigned [16 x i8] vector containing the smaller value of
2312*bed243d3SAndroid Build Coastguard Worker /// each comparison.
_mm_min_epu8(__m128i __a,__m128i __b)2313*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_min_epu8(__m128i __a,
2314*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2315*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_min((__v16qu)__a, (__v16qu)__b);
2316*bed243d3SAndroid Build Coastguard Worker }
2317*bed243d3SAndroid Build Coastguard Worker
2318*bed243d3SAndroid Build Coastguard Worker /// Multiplies the corresponding elements of two signed [8 x i16]
2319*bed243d3SAndroid Build Coastguard Worker /// vectors, saving the upper 16 bits of each 32-bit product in the
2320*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit signed [8 x i16] result vector.
2321*bed243d3SAndroid Build Coastguard Worker ///
2322*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2323*bed243d3SAndroid Build Coastguard Worker ///
2324*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMULHW / PMULHW </c> instruction.
2325*bed243d3SAndroid Build Coastguard Worker ///
2326*bed243d3SAndroid Build Coastguard Worker /// \param __a
2327*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2328*bed243d3SAndroid Build Coastguard Worker /// \param __b
2329*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2330*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit signed [8 x i16] vector containing the upper 16 bits of
2331*bed243d3SAndroid Build Coastguard Worker /// each of the eight 32-bit products.
_mm_mulhi_epi16(__m128i __a,__m128i __b)2332*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mulhi_epi16(__m128i __a,
2333*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2334*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmulhw128((__v8hi)__a, (__v8hi)__b);
2335*bed243d3SAndroid Build Coastguard Worker }
2336*bed243d3SAndroid Build Coastguard Worker
2337*bed243d3SAndroid Build Coastguard Worker /// Multiplies the corresponding elements of two unsigned [8 x i16]
2338*bed243d3SAndroid Build Coastguard Worker /// vectors, saving the upper 16 bits of each 32-bit product in the
2339*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit unsigned [8 x i16] result vector.
2340*bed243d3SAndroid Build Coastguard Worker ///
2341*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2342*bed243d3SAndroid Build Coastguard Worker ///
2343*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMULHUW / PMULHUW </c> instruction.
2344*bed243d3SAndroid Build Coastguard Worker ///
2345*bed243d3SAndroid Build Coastguard Worker /// \param __a
2346*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [8 x i16] vector.
2347*bed243d3SAndroid Build Coastguard Worker /// \param __b
2348*bed243d3SAndroid Build Coastguard Worker /// A 128-bit unsigned [8 x i16] vector.
2349*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit unsigned [8 x i16] vector containing the upper 16 bits
2350*bed243d3SAndroid Build Coastguard Worker /// of each of the eight 32-bit products.
_mm_mulhi_epu16(__m128i __a,__m128i __b)2351*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mulhi_epu16(__m128i __a,
2352*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2353*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)__a, (__v8hi)__b);
2354*bed243d3SAndroid Build Coastguard Worker }
2355*bed243d3SAndroid Build Coastguard Worker
2356*bed243d3SAndroid Build Coastguard Worker /// Multiplies the corresponding elements of two signed [8 x i16]
2357*bed243d3SAndroid Build Coastguard Worker /// vectors, saving the lower 16 bits of each 32-bit product in the
2358*bed243d3SAndroid Build Coastguard Worker /// corresponding element of a 128-bit signed [8 x i16] result vector.
2359*bed243d3SAndroid Build Coastguard Worker ///
2360*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2361*bed243d3SAndroid Build Coastguard Worker ///
2362*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMULLW / PMULLW </c> instruction.
2363*bed243d3SAndroid Build Coastguard Worker ///
2364*bed243d3SAndroid Build Coastguard Worker /// \param __a
2365*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2366*bed243d3SAndroid Build Coastguard Worker /// \param __b
2367*bed243d3SAndroid Build Coastguard Worker /// A 128-bit signed [8 x i16] vector.
2368*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit signed [8 x i16] vector containing the lower 16 bits of
2369*bed243d3SAndroid Build Coastguard Worker /// each of the eight 32-bit products.
_mm_mullo_epi16(__m128i __a,__m128i __b)2370*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mullo_epi16(__m128i __a,
2371*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2372*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v8hu)__a * (__v8hu)__b);
2373*bed243d3SAndroid Build Coastguard Worker }
2374*bed243d3SAndroid Build Coastguard Worker
2375*bed243d3SAndroid Build Coastguard Worker /// Multiplies 32-bit unsigned integer values contained in the lower bits
2376*bed243d3SAndroid Build Coastguard Worker /// of the two 64-bit integer vectors and returns the 64-bit unsigned
2377*bed243d3SAndroid Build Coastguard Worker /// product.
2378*bed243d3SAndroid Build Coastguard Worker ///
2379*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2380*bed243d3SAndroid Build Coastguard Worker ///
2381*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> PMULUDQ </c> instruction.
2382*bed243d3SAndroid Build Coastguard Worker ///
2383*bed243d3SAndroid Build Coastguard Worker /// \param __a
2384*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer containing one of the source operands.
2385*bed243d3SAndroid Build Coastguard Worker /// \param __b
2386*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer containing one of the source operands.
2387*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit integer vector containing the product of both operands.
_mm_mul_su32(__m64 __a,__m64 __b)2388*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_mul_su32(__m64 __a,
2389*bed243d3SAndroid Build Coastguard Worker __m64 __b) {
2390*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_pmuludq((__v2si)__a, (__v2si)__b);
2391*bed243d3SAndroid Build Coastguard Worker }
2392*bed243d3SAndroid Build Coastguard Worker
2393*bed243d3SAndroid Build Coastguard Worker /// Multiplies 32-bit unsigned integer values contained in the lower
2394*bed243d3SAndroid Build Coastguard Worker /// bits of the corresponding elements of two [2 x i64] vectors, and returns
2395*bed243d3SAndroid Build Coastguard Worker /// the 64-bit products in the corresponding elements of a [2 x i64] vector.
2396*bed243d3SAndroid Build Coastguard Worker ///
2397*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2398*bed243d3SAndroid Build Coastguard Worker ///
2399*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMULUDQ / PMULUDQ </c> instruction.
2400*bed243d3SAndroid Build Coastguard Worker ///
2401*bed243d3SAndroid Build Coastguard Worker /// \param __a
2402*bed243d3SAndroid Build Coastguard Worker /// A [2 x i64] vector containing one of the source operands.
2403*bed243d3SAndroid Build Coastguard Worker /// \param __b
2404*bed243d3SAndroid Build Coastguard Worker /// A [2 x i64] vector containing one of the source operands.
2405*bed243d3SAndroid Build Coastguard Worker /// \returns A [2 x i64] vector containing the product of both operands.
_mm_mul_epu32(__m128i __a,__m128i __b)2406*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_mul_epu32(__m128i __a,
2407*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2408*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_pmuludq128((__v4si)__a, (__v4si)__b);
2409*bed243d3SAndroid Build Coastguard Worker }
2410*bed243d3SAndroid Build Coastguard Worker
2411*bed243d3SAndroid Build Coastguard Worker /// Computes the absolute differences of corresponding 8-bit integer
2412*bed243d3SAndroid Build Coastguard Worker /// values in two 128-bit vectors. Sums the first 8 absolute differences, and
2413*bed243d3SAndroid Build Coastguard Worker /// separately sums the second 8 absolute differences. Packs these two
2414*bed243d3SAndroid Build Coastguard Worker /// unsigned 16-bit integer sums into the upper and lower elements of a
2415*bed243d3SAndroid Build Coastguard Worker /// [2 x i64] vector.
2416*bed243d3SAndroid Build Coastguard Worker ///
2417*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2418*bed243d3SAndroid Build Coastguard Worker ///
2419*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSADBW / PSADBW </c> instruction.
2420*bed243d3SAndroid Build Coastguard Worker ///
2421*bed243d3SAndroid Build Coastguard Worker /// \param __a
2422*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2423*bed243d3SAndroid Build Coastguard Worker /// \param __b
2424*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2425*bed243d3SAndroid Build Coastguard Worker /// \returns A [2 x i64] vector containing the sums of the sets of absolute
2426*bed243d3SAndroid Build Coastguard Worker /// differences between both operands.
_mm_sad_epu8(__m128i __a,__m128i __b)2427*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sad_epu8(__m128i __a,
2428*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2429*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_psadbw128((__v16qi)__a, (__v16qi)__b);
2430*bed243d3SAndroid Build Coastguard Worker }
2431*bed243d3SAndroid Build Coastguard Worker
2432*bed243d3SAndroid Build Coastguard Worker /// Subtracts the corresponding 8-bit integer values in the operands.
2433*bed243d3SAndroid Build Coastguard Worker ///
2434*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2435*bed243d3SAndroid Build Coastguard Worker ///
2436*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBB / PSUBB </c> instruction.
2437*bed243d3SAndroid Build Coastguard Worker ///
2438*bed243d3SAndroid Build Coastguard Worker /// \param __a
2439*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2440*bed243d3SAndroid Build Coastguard Worker /// \param __b
2441*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2442*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
2443*bed243d3SAndroid Build Coastguard Worker /// in the operands.
_mm_sub_epi8(__m128i __a,__m128i __b)2444*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi8(__m128i __a,
2445*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2446*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v16qu)__a - (__v16qu)__b);
2447*bed243d3SAndroid Build Coastguard Worker }
2448*bed243d3SAndroid Build Coastguard Worker
2449*bed243d3SAndroid Build Coastguard Worker /// Subtracts the corresponding 16-bit integer values in the operands.
2450*bed243d3SAndroid Build Coastguard Worker ///
2451*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2452*bed243d3SAndroid Build Coastguard Worker ///
2453*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBW / PSUBW </c> instruction.
2454*bed243d3SAndroid Build Coastguard Worker ///
2455*bed243d3SAndroid Build Coastguard Worker /// \param __a
2456*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2457*bed243d3SAndroid Build Coastguard Worker /// \param __b
2458*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2459*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
2460*bed243d3SAndroid Build Coastguard Worker /// in the operands.
_mm_sub_epi16(__m128i __a,__m128i __b)2461*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi16(__m128i __a,
2462*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2463*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v8hu)__a - (__v8hu)__b);
2464*bed243d3SAndroid Build Coastguard Worker }
2465*bed243d3SAndroid Build Coastguard Worker
2466*bed243d3SAndroid Build Coastguard Worker /// Subtracts the corresponding 32-bit integer values in the operands.
2467*bed243d3SAndroid Build Coastguard Worker ///
2468*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2469*bed243d3SAndroid Build Coastguard Worker ///
2470*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBD / PSUBD </c> instruction.
2471*bed243d3SAndroid Build Coastguard Worker ///
2472*bed243d3SAndroid Build Coastguard Worker /// \param __a
2473*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2474*bed243d3SAndroid Build Coastguard Worker /// \param __b
2475*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2476*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
2477*bed243d3SAndroid Build Coastguard Worker /// in the operands.
_mm_sub_epi32(__m128i __a,__m128i __b)2478*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi32(__m128i __a,
2479*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2480*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v4su)__a - (__v4su)__b);
2481*bed243d3SAndroid Build Coastguard Worker }
2482*bed243d3SAndroid Build Coastguard Worker
2483*bed243d3SAndroid Build Coastguard Worker /// Subtracts signed or unsigned 64-bit integer values and writes the
2484*bed243d3SAndroid Build Coastguard Worker /// difference to the corresponding bits in the destination.
2485*bed243d3SAndroid Build Coastguard Worker ///
2486*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2487*bed243d3SAndroid Build Coastguard Worker ///
2488*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> PSUBQ </c> instruction.
2489*bed243d3SAndroid Build Coastguard Worker ///
2490*bed243d3SAndroid Build Coastguard Worker /// \param __a
2491*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer vector containing the minuend.
2492*bed243d3SAndroid Build Coastguard Worker /// \param __b
2493*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer vector containing the subtrahend.
2494*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit integer vector containing the difference of the values in
2495*bed243d3SAndroid Build Coastguard Worker /// the operands.
_mm_sub_si64(__m64 __a,__m64 __b)2496*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS_MMX _mm_sub_si64(__m64 __a,
2497*bed243d3SAndroid Build Coastguard Worker __m64 __b) {
2498*bed243d3SAndroid Build Coastguard Worker return (__m64)__builtin_ia32_psubq((__v1di)__a, (__v1di)__b);
2499*bed243d3SAndroid Build Coastguard Worker }
2500*bed243d3SAndroid Build Coastguard Worker
2501*bed243d3SAndroid Build Coastguard Worker /// Subtracts the corresponding elements of two [2 x i64] vectors.
2502*bed243d3SAndroid Build Coastguard Worker ///
2503*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2504*bed243d3SAndroid Build Coastguard Worker ///
2505*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBQ / PSUBQ </c> instruction.
2506*bed243d3SAndroid Build Coastguard Worker ///
2507*bed243d3SAndroid Build Coastguard Worker /// \param __a
2508*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2509*bed243d3SAndroid Build Coastguard Worker /// \param __b
2510*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2511*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
2512*bed243d3SAndroid Build Coastguard Worker /// in the operands.
_mm_sub_epi64(__m128i __a,__m128i __b)2513*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sub_epi64(__m128i __a,
2514*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2515*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v2du)__a - (__v2du)__b);
2516*bed243d3SAndroid Build Coastguard Worker }
2517*bed243d3SAndroid Build Coastguard Worker
2518*bed243d3SAndroid Build Coastguard Worker /// Subtracts, with saturation, corresponding 8-bit signed integer values in
2519*bed243d3SAndroid Build Coastguard Worker /// the input and returns the differences in the corresponding bytes in the
2520*bed243d3SAndroid Build Coastguard Worker /// destination.
2521*bed243d3SAndroid Build Coastguard Worker ///
2522*bed243d3SAndroid Build Coastguard Worker /// Differences greater than 0x7F are saturated to 0x7F, and differences
2523*bed243d3SAndroid Build Coastguard Worker /// less than 0x80 are saturated to 0x80.
2524*bed243d3SAndroid Build Coastguard Worker ///
2525*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2526*bed243d3SAndroid Build Coastguard Worker ///
2527*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBSB / PSUBSB </c> instruction.
2528*bed243d3SAndroid Build Coastguard Worker ///
2529*bed243d3SAndroid Build Coastguard Worker /// \param __a
2530*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2531*bed243d3SAndroid Build Coastguard Worker /// \param __b
2532*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2533*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
2534*bed243d3SAndroid Build Coastguard Worker /// in the operands.
_mm_subs_epi8(__m128i __a,__m128i __b)2535*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epi8(__m128i __a,
2536*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2537*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_sub_sat((__v16qs)__a, (__v16qs)__b);
2538*bed243d3SAndroid Build Coastguard Worker }
2539*bed243d3SAndroid Build Coastguard Worker
2540*bed243d3SAndroid Build Coastguard Worker /// Subtracts, with saturation, corresponding 16-bit signed integer values in
2541*bed243d3SAndroid Build Coastguard Worker /// the input and returns the differences in the corresponding bytes in the
2542*bed243d3SAndroid Build Coastguard Worker /// destination.
2543*bed243d3SAndroid Build Coastguard Worker ///
2544*bed243d3SAndroid Build Coastguard Worker /// Differences greater than 0x7FFF are saturated to 0x7FFF, and values less
2545*bed243d3SAndroid Build Coastguard Worker /// than 0x8000 are saturated to 0x8000.
2546*bed243d3SAndroid Build Coastguard Worker ///
2547*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2548*bed243d3SAndroid Build Coastguard Worker ///
2549*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBSW / PSUBSW </c> instruction.
2550*bed243d3SAndroid Build Coastguard Worker ///
2551*bed243d3SAndroid Build Coastguard Worker /// \param __a
2552*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2553*bed243d3SAndroid Build Coastguard Worker /// \param __b
2554*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2555*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the differences of the values
2556*bed243d3SAndroid Build Coastguard Worker /// in the operands.
_mm_subs_epi16(__m128i __a,__m128i __b)2557*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epi16(__m128i __a,
2558*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2559*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_sub_sat((__v8hi)__a, (__v8hi)__b);
2560*bed243d3SAndroid Build Coastguard Worker }
2561*bed243d3SAndroid Build Coastguard Worker
2562*bed243d3SAndroid Build Coastguard Worker /// Subtracts, with saturation, corresponding 8-bit unsigned integer values in
2563*bed243d3SAndroid Build Coastguard Worker /// the input and returns the differences in the corresponding bytes in the
2564*bed243d3SAndroid Build Coastguard Worker /// destination.
2565*bed243d3SAndroid Build Coastguard Worker ///
2566*bed243d3SAndroid Build Coastguard Worker /// Differences less than 0x00 are saturated to 0x00.
2567*bed243d3SAndroid Build Coastguard Worker ///
2568*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2569*bed243d3SAndroid Build Coastguard Worker ///
2570*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBUSB / PSUBUSB </c> instruction.
2571*bed243d3SAndroid Build Coastguard Worker ///
2572*bed243d3SAndroid Build Coastguard Worker /// \param __a
2573*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2574*bed243d3SAndroid Build Coastguard Worker /// \param __b
2575*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2576*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the unsigned integer
2577*bed243d3SAndroid Build Coastguard Worker /// differences of the values in the operands.
_mm_subs_epu8(__m128i __a,__m128i __b)2578*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epu8(__m128i __a,
2579*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2580*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_sub_sat((__v16qu)__a, (__v16qu)__b);
2581*bed243d3SAndroid Build Coastguard Worker }
2582*bed243d3SAndroid Build Coastguard Worker
2583*bed243d3SAndroid Build Coastguard Worker /// Subtracts, with saturation, corresponding 16-bit unsigned integer values in
2584*bed243d3SAndroid Build Coastguard Worker /// the input and returns the differences in the corresponding bytes in the
2585*bed243d3SAndroid Build Coastguard Worker /// destination.
2586*bed243d3SAndroid Build Coastguard Worker ///
2587*bed243d3SAndroid Build Coastguard Worker /// Differences less than 0x0000 are saturated to 0x0000.
2588*bed243d3SAndroid Build Coastguard Worker ///
2589*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2590*bed243d3SAndroid Build Coastguard Worker ///
2591*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSUBUSW / PSUBUSW </c> instruction.
2592*bed243d3SAndroid Build Coastguard Worker ///
2593*bed243d3SAndroid Build Coastguard Worker /// \param __a
2594*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the minuends.
2595*bed243d3SAndroid Build Coastguard Worker /// \param __b
2596*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the subtrahends.
2597*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the unsigned integer
2598*bed243d3SAndroid Build Coastguard Worker /// differences of the values in the operands.
_mm_subs_epu16(__m128i __a,__m128i __b)2599*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epu16(__m128i __a,
2600*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2601*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_elementwise_sub_sat((__v8hu)__a, (__v8hu)__b);
2602*bed243d3SAndroid Build Coastguard Worker }
2603*bed243d3SAndroid Build Coastguard Worker
2604*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise AND of two 128-bit integer vectors.
2605*bed243d3SAndroid Build Coastguard Worker ///
2606*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2607*bed243d3SAndroid Build Coastguard Worker ///
2608*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPAND / PAND </c> instruction.
2609*bed243d3SAndroid Build Coastguard Worker ///
2610*bed243d3SAndroid Build Coastguard Worker /// \param __a
2611*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2612*bed243d3SAndroid Build Coastguard Worker /// \param __b
2613*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2614*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise AND of the values
2615*bed243d3SAndroid Build Coastguard Worker /// in both operands.
_mm_and_si128(__m128i __a,__m128i __b)2616*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_and_si128(__m128i __a,
2617*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2618*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v2du)__a & (__v2du)__b);
2619*bed243d3SAndroid Build Coastguard Worker }
2620*bed243d3SAndroid Build Coastguard Worker
2621*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise AND of two 128-bit integer vectors, using the
2622*bed243d3SAndroid Build Coastguard Worker /// one's complement of the values contained in the first source operand.
2623*bed243d3SAndroid Build Coastguard Worker ///
2624*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2625*bed243d3SAndroid Build Coastguard Worker ///
2626*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPANDN / PANDN </c> instruction.
2627*bed243d3SAndroid Build Coastguard Worker ///
2628*bed243d3SAndroid Build Coastguard Worker /// \param __a
2629*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector containing the left source operand. The one's complement
2630*bed243d3SAndroid Build Coastguard Worker /// of this value is used in the bitwise AND.
2631*bed243d3SAndroid Build Coastguard Worker /// \param __b
2632*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector containing the right source operand.
2633*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise AND of the one's
2634*bed243d3SAndroid Build Coastguard Worker /// complement of the first operand and the values in the second operand.
_mm_andnot_si128(__m128i __a,__m128i __b)2635*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_andnot_si128(__m128i __a,
2636*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2637*bed243d3SAndroid Build Coastguard Worker return (__m128i)(~(__v2du)__a & (__v2du)__b);
2638*bed243d3SAndroid Build Coastguard Worker }
2639*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise OR of two 128-bit integer vectors.
2640*bed243d3SAndroid Build Coastguard Worker ///
2641*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2642*bed243d3SAndroid Build Coastguard Worker ///
2643*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPOR / POR </c> instruction.
2644*bed243d3SAndroid Build Coastguard Worker ///
2645*bed243d3SAndroid Build Coastguard Worker /// \param __a
2646*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2647*bed243d3SAndroid Build Coastguard Worker /// \param __b
2648*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2649*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise OR of the values
2650*bed243d3SAndroid Build Coastguard Worker /// in both operands.
_mm_or_si128(__m128i __a,__m128i __b)2651*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_or_si128(__m128i __a,
2652*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2653*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v2du)__a | (__v2du)__b);
2654*bed243d3SAndroid Build Coastguard Worker }
2655*bed243d3SAndroid Build Coastguard Worker
2656*bed243d3SAndroid Build Coastguard Worker /// Performs a bitwise exclusive OR of two 128-bit integer vectors.
2657*bed243d3SAndroid Build Coastguard Worker ///
2658*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2659*bed243d3SAndroid Build Coastguard Worker ///
2660*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPXOR / PXOR </c> instruction.
2661*bed243d3SAndroid Build Coastguard Worker ///
2662*bed243d3SAndroid Build Coastguard Worker /// \param __a
2663*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2664*bed243d3SAndroid Build Coastguard Worker /// \param __b
2665*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing one of the source operands.
2666*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the bitwise exclusive OR of the
2667*bed243d3SAndroid Build Coastguard Worker /// values in both operands.
_mm_xor_si128(__m128i __a,__m128i __b)2668*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_xor_si128(__m128i __a,
2669*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
2670*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v2du)__a ^ (__v2du)__b);
2671*bed243d3SAndroid Build Coastguard Worker }
2672*bed243d3SAndroid Build Coastguard Worker
2673*bed243d3SAndroid Build Coastguard Worker /// Left-shifts the 128-bit integer vector operand by the specified
2674*bed243d3SAndroid Build Coastguard Worker /// number of bytes. Low-order bits are cleared.
2675*bed243d3SAndroid Build Coastguard Worker ///
2676*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2677*bed243d3SAndroid Build Coastguard Worker ///
2678*bed243d3SAndroid Build Coastguard Worker /// \code
2679*bed243d3SAndroid Build Coastguard Worker /// __m128i _mm_slli_si128(__m128i a, const int imm);
2680*bed243d3SAndroid Build Coastguard Worker /// \endcode
2681*bed243d3SAndroid Build Coastguard Worker ///
2682*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSLLDQ / PSLLDQ </c> instruction.
2683*bed243d3SAndroid Build Coastguard Worker ///
2684*bed243d3SAndroid Build Coastguard Worker /// \param a
2685*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2686*bed243d3SAndroid Build Coastguard Worker /// \param imm
2687*bed243d3SAndroid Build Coastguard Worker /// An immediate value specifying the number of bytes to left-shift operand
2688*bed243d3SAndroid Build Coastguard Worker /// \a a.
2689*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted value.
2690*bed243d3SAndroid Build Coastguard Worker #define _mm_slli_si128(a, imm) \
2691*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_pslldqi128_byteshift((__v2di)(__m128i)(a), \
2692*bed243d3SAndroid Build Coastguard Worker (int)(imm)))
2693*bed243d3SAndroid Build Coastguard Worker
2694*bed243d3SAndroid Build Coastguard Worker #define _mm_bslli_si128(a, imm) \
2695*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_pslldqi128_byteshift((__v2di)(__m128i)(a), \
2696*bed243d3SAndroid Build Coastguard Worker (int)(imm)))
2697*bed243d3SAndroid Build Coastguard Worker
2698*bed243d3SAndroid Build Coastguard Worker /// Left-shifts each 16-bit value in the 128-bit integer vector operand
2699*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
2700*bed243d3SAndroid Build Coastguard Worker ///
2701*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2702*bed243d3SAndroid Build Coastguard Worker ///
2703*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSLLW / PSLLW </c> instruction.
2704*bed243d3SAndroid Build Coastguard Worker ///
2705*bed243d3SAndroid Build Coastguard Worker /// \param __a
2706*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2707*bed243d3SAndroid Build Coastguard Worker /// \param __count
2708*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to left-shift each value
2709*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2710*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
_mm_slli_epi16(__m128i __a,int __count)2711*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_slli_epi16(__m128i __a,
2712*bed243d3SAndroid Build Coastguard Worker int __count) {
2713*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psllwi128((__v8hi)__a, __count);
2714*bed243d3SAndroid Build Coastguard Worker }
2715*bed243d3SAndroid Build Coastguard Worker
2716*bed243d3SAndroid Build Coastguard Worker /// Left-shifts each 16-bit value in the 128-bit integer vector operand
2717*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
2718*bed243d3SAndroid Build Coastguard Worker ///
2719*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2720*bed243d3SAndroid Build Coastguard Worker ///
2721*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSLLW / PSLLW </c> instruction.
2722*bed243d3SAndroid Build Coastguard Worker ///
2723*bed243d3SAndroid Build Coastguard Worker /// \param __a
2724*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2725*bed243d3SAndroid Build Coastguard Worker /// \param __count
2726*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
2727*bed243d3SAndroid Build Coastguard Worker /// to left-shift each value in operand \a __a.
2728*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
_mm_sll_epi16(__m128i __a,__m128i __count)2729*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sll_epi16(__m128i __a,
2730*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
2731*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psllw128((__v8hi)__a, (__v8hi)__count);
2732*bed243d3SAndroid Build Coastguard Worker }
2733*bed243d3SAndroid Build Coastguard Worker
2734*bed243d3SAndroid Build Coastguard Worker /// Left-shifts each 32-bit value in the 128-bit integer vector operand
2735*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
2736*bed243d3SAndroid Build Coastguard Worker ///
2737*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2738*bed243d3SAndroid Build Coastguard Worker ///
2739*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSLLD / PSLLD </c> instruction.
2740*bed243d3SAndroid Build Coastguard Worker ///
2741*bed243d3SAndroid Build Coastguard Worker /// \param __a
2742*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2743*bed243d3SAndroid Build Coastguard Worker /// \param __count
2744*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to left-shift each value
2745*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2746*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
_mm_slli_epi32(__m128i __a,int __count)2747*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_slli_epi32(__m128i __a,
2748*bed243d3SAndroid Build Coastguard Worker int __count) {
2749*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pslldi128((__v4si)__a, __count);
2750*bed243d3SAndroid Build Coastguard Worker }
2751*bed243d3SAndroid Build Coastguard Worker
2752*bed243d3SAndroid Build Coastguard Worker /// Left-shifts each 32-bit value in the 128-bit integer vector operand
2753*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
2754*bed243d3SAndroid Build Coastguard Worker ///
2755*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2756*bed243d3SAndroid Build Coastguard Worker ///
2757*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSLLD / PSLLD </c> instruction.
2758*bed243d3SAndroid Build Coastguard Worker ///
2759*bed243d3SAndroid Build Coastguard Worker /// \param __a
2760*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2761*bed243d3SAndroid Build Coastguard Worker /// \param __count
2762*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
2763*bed243d3SAndroid Build Coastguard Worker /// to left-shift each value in operand \a __a.
2764*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
_mm_sll_epi32(__m128i __a,__m128i __count)2765*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sll_epi32(__m128i __a,
2766*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
2767*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_pslld128((__v4si)__a, (__v4si)__count);
2768*bed243d3SAndroid Build Coastguard Worker }
2769*bed243d3SAndroid Build Coastguard Worker
2770*bed243d3SAndroid Build Coastguard Worker /// Left-shifts each 64-bit value in the 128-bit integer vector operand
2771*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
2772*bed243d3SAndroid Build Coastguard Worker ///
2773*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2774*bed243d3SAndroid Build Coastguard Worker ///
2775*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSLLQ / PSLLQ </c> instruction.
2776*bed243d3SAndroid Build Coastguard Worker ///
2777*bed243d3SAndroid Build Coastguard Worker /// \param __a
2778*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2779*bed243d3SAndroid Build Coastguard Worker /// \param __count
2780*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to left-shift each value
2781*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2782*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
_mm_slli_epi64(__m128i __a,int __count)2783*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_slli_epi64(__m128i __a,
2784*bed243d3SAndroid Build Coastguard Worker int __count) {
2785*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_psllqi128((__v2di)__a, __count);
2786*bed243d3SAndroid Build Coastguard Worker }
2787*bed243d3SAndroid Build Coastguard Worker
2788*bed243d3SAndroid Build Coastguard Worker /// Left-shifts each 64-bit value in the 128-bit integer vector operand
2789*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. Low-order bits are cleared.
2790*bed243d3SAndroid Build Coastguard Worker ///
2791*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2792*bed243d3SAndroid Build Coastguard Worker ///
2793*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSLLQ / PSLLQ </c> instruction.
2794*bed243d3SAndroid Build Coastguard Worker ///
2795*bed243d3SAndroid Build Coastguard Worker /// \param __a
2796*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2797*bed243d3SAndroid Build Coastguard Worker /// \param __count
2798*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
2799*bed243d3SAndroid Build Coastguard Worker /// to left-shift each value in operand \a __a.
2800*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the left-shifted values.
_mm_sll_epi64(__m128i __a,__m128i __count)2801*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sll_epi64(__m128i __a,
2802*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
2803*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_psllq128((__v2di)__a, (__v2di)__count);
2804*bed243d3SAndroid Build Coastguard Worker }
2805*bed243d3SAndroid Build Coastguard Worker
2806*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each 16-bit value in the 128-bit integer vector operand
2807*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
2808*bed243d3SAndroid Build Coastguard Worker /// bit of the initial value.
2809*bed243d3SAndroid Build Coastguard Worker ///
2810*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2811*bed243d3SAndroid Build Coastguard Worker ///
2812*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRAW / PSRAW </c> instruction.
2813*bed243d3SAndroid Build Coastguard Worker ///
2814*bed243d3SAndroid Build Coastguard Worker /// \param __a
2815*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2816*bed243d3SAndroid Build Coastguard Worker /// \param __count
2817*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
2818*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2819*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srai_epi16(__m128i __a,int __count)2820*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srai_epi16(__m128i __a,
2821*bed243d3SAndroid Build Coastguard Worker int __count) {
2822*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrawi128((__v8hi)__a, __count);
2823*bed243d3SAndroid Build Coastguard Worker }
2824*bed243d3SAndroid Build Coastguard Worker
2825*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each 16-bit value in the 128-bit integer vector operand
2826*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
2827*bed243d3SAndroid Build Coastguard Worker /// bit of the initial value.
2828*bed243d3SAndroid Build Coastguard Worker ///
2829*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2830*bed243d3SAndroid Build Coastguard Worker ///
2831*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRAW / PSRAW </c> instruction.
2832*bed243d3SAndroid Build Coastguard Worker ///
2833*bed243d3SAndroid Build Coastguard Worker /// \param __a
2834*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2835*bed243d3SAndroid Build Coastguard Worker /// \param __count
2836*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
2837*bed243d3SAndroid Build Coastguard Worker /// to right-shift each value in operand \a __a.
2838*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_sra_epi16(__m128i __a,__m128i __count)2839*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sra_epi16(__m128i __a,
2840*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
2841*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psraw128((__v8hi)__a, (__v8hi)__count);
2842*bed243d3SAndroid Build Coastguard Worker }
2843*bed243d3SAndroid Build Coastguard Worker
2844*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each 32-bit value in the 128-bit integer vector operand
2845*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
2846*bed243d3SAndroid Build Coastguard Worker /// bit of the initial value.
2847*bed243d3SAndroid Build Coastguard Worker ///
2848*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2849*bed243d3SAndroid Build Coastguard Worker ///
2850*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRAD / PSRAD </c> instruction.
2851*bed243d3SAndroid Build Coastguard Worker ///
2852*bed243d3SAndroid Build Coastguard Worker /// \param __a
2853*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2854*bed243d3SAndroid Build Coastguard Worker /// \param __count
2855*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
2856*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2857*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srai_epi32(__m128i __a,int __count)2858*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srai_epi32(__m128i __a,
2859*bed243d3SAndroid Build Coastguard Worker int __count) {
2860*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psradi128((__v4si)__a, __count);
2861*bed243d3SAndroid Build Coastguard Worker }
2862*bed243d3SAndroid Build Coastguard Worker
2863*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each 32-bit value in the 128-bit integer vector operand
2864*bed243d3SAndroid Build Coastguard Worker /// by the specified number of bits. High-order bits are filled with the sign
2865*bed243d3SAndroid Build Coastguard Worker /// bit of the initial value.
2866*bed243d3SAndroid Build Coastguard Worker ///
2867*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2868*bed243d3SAndroid Build Coastguard Worker ///
2869*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRAD / PSRAD </c> instruction.
2870*bed243d3SAndroid Build Coastguard Worker ///
2871*bed243d3SAndroid Build Coastguard Worker /// \param __a
2872*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2873*bed243d3SAndroid Build Coastguard Worker /// \param __count
2874*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
2875*bed243d3SAndroid Build Coastguard Worker /// to right-shift each value in operand \a __a.
2876*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_sra_epi32(__m128i __a,__m128i __count)2877*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_sra_epi32(__m128i __a,
2878*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
2879*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrad128((__v4si)__a, (__v4si)__count);
2880*bed243d3SAndroid Build Coastguard Worker }
2881*bed243d3SAndroid Build Coastguard Worker
2882*bed243d3SAndroid Build Coastguard Worker /// Right-shifts the 128-bit integer vector operand by the specified
2883*bed243d3SAndroid Build Coastguard Worker /// number of bytes. High-order bits are cleared.
2884*bed243d3SAndroid Build Coastguard Worker ///
2885*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2886*bed243d3SAndroid Build Coastguard Worker ///
2887*bed243d3SAndroid Build Coastguard Worker /// \code
2888*bed243d3SAndroid Build Coastguard Worker /// __m128i _mm_srli_si128(__m128i a, const int imm);
2889*bed243d3SAndroid Build Coastguard Worker /// \endcode
2890*bed243d3SAndroid Build Coastguard Worker ///
2891*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRLDQ / PSRLDQ </c> instruction.
2892*bed243d3SAndroid Build Coastguard Worker ///
2893*bed243d3SAndroid Build Coastguard Worker /// \param a
2894*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2895*bed243d3SAndroid Build Coastguard Worker /// \param imm
2896*bed243d3SAndroid Build Coastguard Worker /// An immediate value specifying the number of bytes to right-shift operand
2897*bed243d3SAndroid Build Coastguard Worker /// \a a.
2898*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted value.
2899*bed243d3SAndroid Build Coastguard Worker #define _mm_srli_si128(a, imm) \
2900*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_psrldqi128_byteshift((__v2di)(__m128i)(a), \
2901*bed243d3SAndroid Build Coastguard Worker (int)(imm)))
2902*bed243d3SAndroid Build Coastguard Worker
2903*bed243d3SAndroid Build Coastguard Worker #define _mm_bsrli_si128(a, imm) \
2904*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_psrldqi128_byteshift((__v2di)(__m128i)(a), \
2905*bed243d3SAndroid Build Coastguard Worker (int)(imm)))
2906*bed243d3SAndroid Build Coastguard Worker
2907*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each of 16-bit values in the 128-bit integer vector
2908*bed243d3SAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
2909*bed243d3SAndroid Build Coastguard Worker ///
2910*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2911*bed243d3SAndroid Build Coastguard Worker ///
2912*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRLW / PSRLW </c> instruction.
2913*bed243d3SAndroid Build Coastguard Worker ///
2914*bed243d3SAndroid Build Coastguard Worker /// \param __a
2915*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2916*bed243d3SAndroid Build Coastguard Worker /// \param __count
2917*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
2918*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2919*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srli_epi16(__m128i __a,int __count)2920*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srli_epi16(__m128i __a,
2921*bed243d3SAndroid Build Coastguard Worker int __count) {
2922*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrlwi128((__v8hi)__a, __count);
2923*bed243d3SAndroid Build Coastguard Worker }
2924*bed243d3SAndroid Build Coastguard Worker
2925*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each of 16-bit values in the 128-bit integer vector
2926*bed243d3SAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
2927*bed243d3SAndroid Build Coastguard Worker ///
2928*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2929*bed243d3SAndroid Build Coastguard Worker ///
2930*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRLW / PSRLW </c> instruction.
2931*bed243d3SAndroid Build Coastguard Worker ///
2932*bed243d3SAndroid Build Coastguard Worker /// \param __a
2933*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2934*bed243d3SAndroid Build Coastguard Worker /// \param __count
2935*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
2936*bed243d3SAndroid Build Coastguard Worker /// to right-shift each value in operand \a __a.
2937*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srl_epi16(__m128i __a,__m128i __count)2938*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srl_epi16(__m128i __a,
2939*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
2940*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrlw128((__v8hi)__a, (__v8hi)__count);
2941*bed243d3SAndroid Build Coastguard Worker }
2942*bed243d3SAndroid Build Coastguard Worker
2943*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each of 32-bit values in the 128-bit integer vector
2944*bed243d3SAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
2945*bed243d3SAndroid Build Coastguard Worker ///
2946*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2947*bed243d3SAndroid Build Coastguard Worker ///
2948*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRLD / PSRLD </c> instruction.
2949*bed243d3SAndroid Build Coastguard Worker ///
2950*bed243d3SAndroid Build Coastguard Worker /// \param __a
2951*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2952*bed243d3SAndroid Build Coastguard Worker /// \param __count
2953*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
2954*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2955*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srli_epi32(__m128i __a,int __count)2956*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srli_epi32(__m128i __a,
2957*bed243d3SAndroid Build Coastguard Worker int __count) {
2958*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrldi128((__v4si)__a, __count);
2959*bed243d3SAndroid Build Coastguard Worker }
2960*bed243d3SAndroid Build Coastguard Worker
2961*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each of 32-bit values in the 128-bit integer vector
2962*bed243d3SAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
2963*bed243d3SAndroid Build Coastguard Worker ///
2964*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2965*bed243d3SAndroid Build Coastguard Worker ///
2966*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRLD / PSRLD </c> instruction.
2967*bed243d3SAndroid Build Coastguard Worker ///
2968*bed243d3SAndroid Build Coastguard Worker /// \param __a
2969*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2970*bed243d3SAndroid Build Coastguard Worker /// \param __count
2971*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
2972*bed243d3SAndroid Build Coastguard Worker /// to right-shift each value in operand \a __a.
2973*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srl_epi32(__m128i __a,__m128i __count)2974*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srl_epi32(__m128i __a,
2975*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
2976*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_psrld128((__v4si)__a, (__v4si)__count);
2977*bed243d3SAndroid Build Coastguard Worker }
2978*bed243d3SAndroid Build Coastguard Worker
2979*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each of 64-bit values in the 128-bit integer vector
2980*bed243d3SAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
2981*bed243d3SAndroid Build Coastguard Worker ///
2982*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
2983*bed243d3SAndroid Build Coastguard Worker ///
2984*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRLQ / PSRLQ </c> instruction.
2985*bed243d3SAndroid Build Coastguard Worker ///
2986*bed243d3SAndroid Build Coastguard Worker /// \param __a
2987*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
2988*bed243d3SAndroid Build Coastguard Worker /// \param __count
2989*bed243d3SAndroid Build Coastguard Worker /// An integer value specifying the number of bits to right-shift each value
2990*bed243d3SAndroid Build Coastguard Worker /// in operand \a __a.
2991*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srli_epi64(__m128i __a,int __count)2992*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srli_epi64(__m128i __a,
2993*bed243d3SAndroid Build Coastguard Worker int __count) {
2994*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_psrlqi128((__v2di)__a, __count);
2995*bed243d3SAndroid Build Coastguard Worker }
2996*bed243d3SAndroid Build Coastguard Worker
2997*bed243d3SAndroid Build Coastguard Worker /// Right-shifts each of 64-bit values in the 128-bit integer vector
2998*bed243d3SAndroid Build Coastguard Worker /// operand by the specified number of bits. High-order bits are cleared.
2999*bed243d3SAndroid Build Coastguard Worker ///
3000*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3001*bed243d3SAndroid Build Coastguard Worker ///
3002*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSRLQ / PSRLQ </c> instruction.
3003*bed243d3SAndroid Build Coastguard Worker ///
3004*bed243d3SAndroid Build Coastguard Worker /// \param __a
3005*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the source operand.
3006*bed243d3SAndroid Build Coastguard Worker /// \param __count
3007*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector in which bits [63:0] specify the number of bits
3008*bed243d3SAndroid Build Coastguard Worker /// to right-shift each value in operand \a __a.
3009*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the right-shifted values.
_mm_srl_epi64(__m128i __a,__m128i __count)3010*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_srl_epi64(__m128i __a,
3011*bed243d3SAndroid Build Coastguard Worker __m128i __count) {
3012*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_psrlq128((__v2di)__a, (__v2di)__count);
3013*bed243d3SAndroid Build Coastguard Worker }
3014*bed243d3SAndroid Build Coastguard Worker
3015*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding 8-bit values of the 128-bit
3016*bed243d3SAndroid Build Coastguard Worker /// integer vectors for equality.
3017*bed243d3SAndroid Build Coastguard Worker ///
3018*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFF for true.
3019*bed243d3SAndroid Build Coastguard Worker ///
3020*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3021*bed243d3SAndroid Build Coastguard Worker ///
3022*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPEQB / PCMPEQB </c> instruction.
3023*bed243d3SAndroid Build Coastguard Worker ///
3024*bed243d3SAndroid Build Coastguard Worker /// \param __a
3025*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3026*bed243d3SAndroid Build Coastguard Worker /// \param __b
3027*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3028*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmpeq_epi8(__m128i __a,__m128i __b)3029*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi8(__m128i __a,
3030*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3031*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v16qi)__a == (__v16qi)__b);
3032*bed243d3SAndroid Build Coastguard Worker }
3033*bed243d3SAndroid Build Coastguard Worker
3034*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding 16-bit values of the 128-bit
3035*bed243d3SAndroid Build Coastguard Worker /// integer vectors for equality.
3036*bed243d3SAndroid Build Coastguard Worker ///
3037*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFF for true.
3038*bed243d3SAndroid Build Coastguard Worker ///
3039*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3040*bed243d3SAndroid Build Coastguard Worker ///
3041*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPEQW / PCMPEQW </c> instruction.
3042*bed243d3SAndroid Build Coastguard Worker ///
3043*bed243d3SAndroid Build Coastguard Worker /// \param __a
3044*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3045*bed243d3SAndroid Build Coastguard Worker /// \param __b
3046*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3047*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmpeq_epi16(__m128i __a,__m128i __b)3048*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi16(__m128i __a,
3049*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3050*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v8hi)__a == (__v8hi)__b);
3051*bed243d3SAndroid Build Coastguard Worker }
3052*bed243d3SAndroid Build Coastguard Worker
3053*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding 32-bit values of the 128-bit
3054*bed243d3SAndroid Build Coastguard Worker /// integer vectors for equality.
3055*bed243d3SAndroid Build Coastguard Worker ///
3056*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFF for true.
3057*bed243d3SAndroid Build Coastguard Worker ///
3058*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3059*bed243d3SAndroid Build Coastguard Worker ///
3060*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPEQD / PCMPEQD </c> instruction.
3061*bed243d3SAndroid Build Coastguard Worker ///
3062*bed243d3SAndroid Build Coastguard Worker /// \param __a
3063*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3064*bed243d3SAndroid Build Coastguard Worker /// \param __b
3065*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3066*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmpeq_epi32(__m128i __a,__m128i __b)3067*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpeq_epi32(__m128i __a,
3068*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3069*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v4si)__a == (__v4si)__b);
3070*bed243d3SAndroid Build Coastguard Worker }
3071*bed243d3SAndroid Build Coastguard Worker
3072*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding signed 8-bit values of the 128-bit
3073*bed243d3SAndroid Build Coastguard Worker /// integer vectors to determine if the values in the first operand are
3074*bed243d3SAndroid Build Coastguard Worker /// greater than those in the second operand.
3075*bed243d3SAndroid Build Coastguard Worker ///
3076*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFF for true.
3077*bed243d3SAndroid Build Coastguard Worker ///
3078*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3079*bed243d3SAndroid Build Coastguard Worker ///
3080*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPGTB / PCMPGTB </c> instruction.
3081*bed243d3SAndroid Build Coastguard Worker ///
3082*bed243d3SAndroid Build Coastguard Worker /// \param __a
3083*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3084*bed243d3SAndroid Build Coastguard Worker /// \param __b
3085*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3086*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmpgt_epi8(__m128i __a,__m128i __b)3087*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi8(__m128i __a,
3088*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3089*bed243d3SAndroid Build Coastguard Worker /* This function always performs a signed comparison, but __v16qi is a char
3090*bed243d3SAndroid Build Coastguard Worker which may be signed or unsigned, so use __v16qs. */
3091*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v16qs)__a > (__v16qs)__b);
3092*bed243d3SAndroid Build Coastguard Worker }
3093*bed243d3SAndroid Build Coastguard Worker
3094*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding signed 16-bit values of the
3095*bed243d3SAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
3096*bed243d3SAndroid Build Coastguard Worker /// are greater than those in the second operand.
3097*bed243d3SAndroid Build Coastguard Worker ///
3098*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFF for true.
3099*bed243d3SAndroid Build Coastguard Worker ///
3100*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3101*bed243d3SAndroid Build Coastguard Worker ///
3102*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPGTW / PCMPGTW </c> instruction.
3103*bed243d3SAndroid Build Coastguard Worker ///
3104*bed243d3SAndroid Build Coastguard Worker /// \param __a
3105*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3106*bed243d3SAndroid Build Coastguard Worker /// \param __b
3107*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3108*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmpgt_epi16(__m128i __a,__m128i __b)3109*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi16(__m128i __a,
3110*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3111*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v8hi)__a > (__v8hi)__b);
3112*bed243d3SAndroid Build Coastguard Worker }
3113*bed243d3SAndroid Build Coastguard Worker
3114*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding signed 32-bit values of the
3115*bed243d3SAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
3116*bed243d3SAndroid Build Coastguard Worker /// are greater than those in the second operand.
3117*bed243d3SAndroid Build Coastguard Worker ///
3118*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFF for true.
3119*bed243d3SAndroid Build Coastguard Worker ///
3120*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3121*bed243d3SAndroid Build Coastguard Worker ///
3122*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPGTD / PCMPGTD </c> instruction.
3123*bed243d3SAndroid Build Coastguard Worker ///
3124*bed243d3SAndroid Build Coastguard Worker /// \param __a
3125*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3126*bed243d3SAndroid Build Coastguard Worker /// \param __b
3127*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3128*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmpgt_epi32(__m128i __a,__m128i __b)3129*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmpgt_epi32(__m128i __a,
3130*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3131*bed243d3SAndroid Build Coastguard Worker return (__m128i)((__v4si)__a > (__v4si)__b);
3132*bed243d3SAndroid Build Coastguard Worker }
3133*bed243d3SAndroid Build Coastguard Worker
3134*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding signed 8-bit values of the 128-bit
3135*bed243d3SAndroid Build Coastguard Worker /// integer vectors to determine if the values in the first operand are less
3136*bed243d3SAndroid Build Coastguard Worker /// than those in the second operand.
3137*bed243d3SAndroid Build Coastguard Worker ///
3138*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFF for true.
3139*bed243d3SAndroid Build Coastguard Worker ///
3140*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3141*bed243d3SAndroid Build Coastguard Worker ///
3142*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPGTB / PCMPGTB </c> instruction.
3143*bed243d3SAndroid Build Coastguard Worker ///
3144*bed243d3SAndroid Build Coastguard Worker /// \param __a
3145*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3146*bed243d3SAndroid Build Coastguard Worker /// \param __b
3147*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3148*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmplt_epi8(__m128i __a,__m128i __b)3149*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi8(__m128i __a,
3150*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3151*bed243d3SAndroid Build Coastguard Worker return _mm_cmpgt_epi8(__b, __a);
3152*bed243d3SAndroid Build Coastguard Worker }
3153*bed243d3SAndroid Build Coastguard Worker
3154*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding signed 16-bit values of the
3155*bed243d3SAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
3156*bed243d3SAndroid Build Coastguard Worker /// are less than those in the second operand.
3157*bed243d3SAndroid Build Coastguard Worker ///
3158*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFF for true.
3159*bed243d3SAndroid Build Coastguard Worker ///
3160*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3161*bed243d3SAndroid Build Coastguard Worker ///
3162*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPGTW / PCMPGTW </c> instruction.
3163*bed243d3SAndroid Build Coastguard Worker ///
3164*bed243d3SAndroid Build Coastguard Worker /// \param __a
3165*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3166*bed243d3SAndroid Build Coastguard Worker /// \param __b
3167*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3168*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmplt_epi16(__m128i __a,__m128i __b)3169*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi16(__m128i __a,
3170*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3171*bed243d3SAndroid Build Coastguard Worker return _mm_cmpgt_epi16(__b, __a);
3172*bed243d3SAndroid Build Coastguard Worker }
3173*bed243d3SAndroid Build Coastguard Worker
3174*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding signed 32-bit values of the
3175*bed243d3SAndroid Build Coastguard Worker /// 128-bit integer vectors to determine if the values in the first operand
3176*bed243d3SAndroid Build Coastguard Worker /// are less than those in the second operand.
3177*bed243d3SAndroid Build Coastguard Worker ///
3178*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFF for true.
3179*bed243d3SAndroid Build Coastguard Worker ///
3180*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3181*bed243d3SAndroid Build Coastguard Worker ///
3182*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPCMPGTD / PCMPGTD </c> instruction.
3183*bed243d3SAndroid Build Coastguard Worker ///
3184*bed243d3SAndroid Build Coastguard Worker /// \param __a
3185*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3186*bed243d3SAndroid Build Coastguard Worker /// \param __b
3187*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3188*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the comparison results.
_mm_cmplt_epi32(__m128i __a,__m128i __b)3189*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cmplt_epi32(__m128i __a,
3190*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3191*bed243d3SAndroid Build Coastguard Worker return _mm_cmpgt_epi32(__b, __a);
3192*bed243d3SAndroid Build Coastguard Worker }
3193*bed243d3SAndroid Build Coastguard Worker
3194*bed243d3SAndroid Build Coastguard Worker #ifdef __x86_64__
3195*bed243d3SAndroid Build Coastguard Worker /// Converts a 64-bit signed integer value from the second operand into a
3196*bed243d3SAndroid Build Coastguard Worker /// double-precision value and returns it in the lower element of a [2 x
3197*bed243d3SAndroid Build Coastguard Worker /// double] vector; the upper element of the returned vector is copied from
3198*bed243d3SAndroid Build Coastguard Worker /// the upper element of the first operand.
3199*bed243d3SAndroid Build Coastguard Worker ///
3200*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3201*bed243d3SAndroid Build Coastguard Worker ///
3202*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTSI2SD / CVTSI2SD </c> instruction.
3203*bed243d3SAndroid Build Coastguard Worker ///
3204*bed243d3SAndroid Build Coastguard Worker /// \param __a
3205*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The upper 64 bits of this operand are
3206*bed243d3SAndroid Build Coastguard Worker /// copied to the upper 64 bits of the destination.
3207*bed243d3SAndroid Build Coastguard Worker /// \param __b
3208*bed243d3SAndroid Build Coastguard Worker /// A 64-bit signed integer operand containing the value to be converted.
3209*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] whose lower 64 bits contain the
3210*bed243d3SAndroid Build Coastguard Worker /// converted value of the second operand. The upper 64 bits are copied from
3211*bed243d3SAndroid Build Coastguard Worker /// the upper 64 bits of the first operand.
_mm_cvtsi64_sd(__m128d __a,long long __b)3212*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_cvtsi64_sd(__m128d __a,
3213*bed243d3SAndroid Build Coastguard Worker long long __b) {
3214*bed243d3SAndroid Build Coastguard Worker __a[0] = __b;
3215*bed243d3SAndroid Build Coastguard Worker return __a;
3216*bed243d3SAndroid Build Coastguard Worker }
3217*bed243d3SAndroid Build Coastguard Worker
3218*bed243d3SAndroid Build Coastguard Worker /// Converts the first (lower) element of a vector of [2 x double] into a
3219*bed243d3SAndroid Build Coastguard Worker /// 64-bit signed integer value, according to the current rounding mode.
3220*bed243d3SAndroid Build Coastguard Worker ///
3221*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3222*bed243d3SAndroid Build Coastguard Worker ///
3223*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTSD2SI / CVTSD2SI </c> instruction.
3224*bed243d3SAndroid Build Coastguard Worker ///
3225*bed243d3SAndroid Build Coastguard Worker /// \param __a
3226*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are used in the
3227*bed243d3SAndroid Build Coastguard Worker /// conversion.
3228*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit signed integer containing the converted value.
_mm_cvtsd_si64(__m128d __a)3229*bed243d3SAndroid Build Coastguard Worker static __inline__ long long __DEFAULT_FN_ATTRS _mm_cvtsd_si64(__m128d __a) {
3230*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_cvtsd2si64((__v2df)__a);
3231*bed243d3SAndroid Build Coastguard Worker }
3232*bed243d3SAndroid Build Coastguard Worker
3233*bed243d3SAndroid Build Coastguard Worker /// Converts the first (lower) element of a vector of [2 x double] into a
3234*bed243d3SAndroid Build Coastguard Worker /// 64-bit signed integer value, truncating the result when it is inexact.
3235*bed243d3SAndroid Build Coastguard Worker ///
3236*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3237*bed243d3SAndroid Build Coastguard Worker ///
3238*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTTSD2SI / CVTTSD2SI </c>
3239*bed243d3SAndroid Build Coastguard Worker /// instruction.
3240*bed243d3SAndroid Build Coastguard Worker ///
3241*bed243d3SAndroid Build Coastguard Worker /// \param __a
3242*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. The lower 64 bits are used in the
3243*bed243d3SAndroid Build Coastguard Worker /// conversion.
3244*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit signed integer containing the converted value.
_mm_cvttsd_si64(__m128d __a)3245*bed243d3SAndroid Build Coastguard Worker static __inline__ long long __DEFAULT_FN_ATTRS _mm_cvttsd_si64(__m128d __a) {
3246*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_cvttsd2si64((__v2df)__a);
3247*bed243d3SAndroid Build Coastguard Worker }
3248*bed243d3SAndroid Build Coastguard Worker #endif
3249*bed243d3SAndroid Build Coastguard Worker
3250*bed243d3SAndroid Build Coastguard Worker /// Converts a vector of [4 x i32] into a vector of [4 x float].
3251*bed243d3SAndroid Build Coastguard Worker ///
3252*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3253*bed243d3SAndroid Build Coastguard Worker ///
3254*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTDQ2PS / CVTDQ2PS </c> instruction.
3255*bed243d3SAndroid Build Coastguard Worker ///
3256*bed243d3SAndroid Build Coastguard Worker /// \param __a
3257*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
3258*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x float] containing the converted values.
_mm_cvtepi32_ps(__m128i __a)3259*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_cvtepi32_ps(__m128i __a) {
3260*bed243d3SAndroid Build Coastguard Worker return (__m128) __builtin_convertvector((__v4si)__a, __v4sf);
3261*bed243d3SAndroid Build Coastguard Worker }
3262*bed243d3SAndroid Build Coastguard Worker
3263*bed243d3SAndroid Build Coastguard Worker /// Converts a vector of [4 x float] into a vector of [4 x i32].
3264*bed243d3SAndroid Build Coastguard Worker ///
3265*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3266*bed243d3SAndroid Build Coastguard Worker ///
3267*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTPS2DQ / CVTPS2DQ </c> instruction.
3268*bed243d3SAndroid Build Coastguard Worker ///
3269*bed243d3SAndroid Build Coastguard Worker /// \param __a
3270*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x float].
3271*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector of [4 x i32] containing the converted
3272*bed243d3SAndroid Build Coastguard Worker /// values.
_mm_cvtps_epi32(__m128 __a)3273*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtps_epi32(__m128 __a) {
3274*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_cvtps2dq((__v4sf)__a);
3275*bed243d3SAndroid Build Coastguard Worker }
3276*bed243d3SAndroid Build Coastguard Worker
3277*bed243d3SAndroid Build Coastguard Worker /// Converts a vector of [4 x float] into a vector of [4 x i32],
3278*bed243d3SAndroid Build Coastguard Worker /// truncating the result when it is inexact.
3279*bed243d3SAndroid Build Coastguard Worker ///
3280*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3281*bed243d3SAndroid Build Coastguard Worker ///
3282*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VCVTTPS2DQ / CVTTPS2DQ </c>
3283*bed243d3SAndroid Build Coastguard Worker /// instruction.
3284*bed243d3SAndroid Build Coastguard Worker ///
3285*bed243d3SAndroid Build Coastguard Worker /// \param __a
3286*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x float].
3287*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] containing the converted values.
_mm_cvttps_epi32(__m128 __a)3288*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvttps_epi32(__m128 __a) {
3289*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_cvttps2dq((__v4sf)__a);
3290*bed243d3SAndroid Build Coastguard Worker }
3291*bed243d3SAndroid Build Coastguard Worker
3292*bed243d3SAndroid Build Coastguard Worker /// Returns a vector of [4 x i32] where the lowest element is the input
3293*bed243d3SAndroid Build Coastguard Worker /// operand and the remaining elements are zero.
3294*bed243d3SAndroid Build Coastguard Worker ///
3295*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3296*bed243d3SAndroid Build Coastguard Worker ///
3297*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
3298*bed243d3SAndroid Build Coastguard Worker ///
3299*bed243d3SAndroid Build Coastguard Worker /// \param __a
3300*bed243d3SAndroid Build Coastguard Worker /// A 32-bit signed integer operand.
3301*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32].
_mm_cvtsi32_si128(int __a)3302*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtsi32_si128(int __a) {
3303*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v4si){__a, 0, 0, 0};
3304*bed243d3SAndroid Build Coastguard Worker }
3305*bed243d3SAndroid Build Coastguard Worker
3306*bed243d3SAndroid Build Coastguard Worker /// Returns a vector of [2 x i64] where the lower element is the input
3307*bed243d3SAndroid Build Coastguard Worker /// operand and the upper element is zero.
3308*bed243d3SAndroid Build Coastguard Worker ///
3309*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3310*bed243d3SAndroid Build Coastguard Worker ///
3311*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction
3312*bed243d3SAndroid Build Coastguard Worker /// in 64-bit mode.
3313*bed243d3SAndroid Build Coastguard Worker ///
3314*bed243d3SAndroid Build Coastguard Worker /// \param __a
3315*bed243d3SAndroid Build Coastguard Worker /// A 64-bit signed integer operand containing the value to be converted.
3316*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64] containing the converted value.
_mm_cvtsi64_si128(long long __a)3317*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_cvtsi64_si128(long long __a) {
3318*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v2di){__a, 0};
3319*bed243d3SAndroid Build Coastguard Worker }
3320*bed243d3SAndroid Build Coastguard Worker
3321*bed243d3SAndroid Build Coastguard Worker /// Moves the least significant 32 bits of a vector of [4 x i32] to a
3322*bed243d3SAndroid Build Coastguard Worker /// 32-bit signed integer value.
3323*bed243d3SAndroid Build Coastguard Worker ///
3324*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3325*bed243d3SAndroid Build Coastguard Worker ///
3326*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
3327*bed243d3SAndroid Build Coastguard Worker ///
3328*bed243d3SAndroid Build Coastguard Worker /// \param __a
3329*bed243d3SAndroid Build Coastguard Worker /// A vector of [4 x i32]. The least significant 32 bits are moved to the
3330*bed243d3SAndroid Build Coastguard Worker /// destination.
3331*bed243d3SAndroid Build Coastguard Worker /// \returns A 32-bit signed integer containing the moved value.
_mm_cvtsi128_si32(__m128i __a)3332*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_cvtsi128_si32(__m128i __a) {
3333*bed243d3SAndroid Build Coastguard Worker __v4si __b = (__v4si)__a;
3334*bed243d3SAndroid Build Coastguard Worker return __b[0];
3335*bed243d3SAndroid Build Coastguard Worker }
3336*bed243d3SAndroid Build Coastguard Worker
3337*bed243d3SAndroid Build Coastguard Worker /// Moves the least significant 64 bits of a vector of [2 x i64] to a
3338*bed243d3SAndroid Build Coastguard Worker /// 64-bit signed integer value.
3339*bed243d3SAndroid Build Coastguard Worker ///
3340*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3341*bed243d3SAndroid Build Coastguard Worker ///
3342*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction.
3343*bed243d3SAndroid Build Coastguard Worker ///
3344*bed243d3SAndroid Build Coastguard Worker /// \param __a
3345*bed243d3SAndroid Build Coastguard Worker /// A vector of [2 x i64]. The least significant 64 bits are moved to the
3346*bed243d3SAndroid Build Coastguard Worker /// destination.
3347*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit signed integer containing the moved value.
_mm_cvtsi128_si64(__m128i __a)3348*bed243d3SAndroid Build Coastguard Worker static __inline__ long long __DEFAULT_FN_ATTRS _mm_cvtsi128_si64(__m128i __a) {
3349*bed243d3SAndroid Build Coastguard Worker return __a[0];
3350*bed243d3SAndroid Build Coastguard Worker }
3351*bed243d3SAndroid Build Coastguard Worker
3352*bed243d3SAndroid Build Coastguard Worker /// Moves packed integer values from an aligned 128-bit memory location
3353*bed243d3SAndroid Build Coastguard Worker /// to elements in a 128-bit integer vector.
3354*bed243d3SAndroid Build Coastguard Worker ///
3355*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3356*bed243d3SAndroid Build Coastguard Worker ///
3357*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVDQA / MOVDQA </c> instruction.
3358*bed243d3SAndroid Build Coastguard Worker ///
3359*bed243d3SAndroid Build Coastguard Worker /// \param __p
3360*bed243d3SAndroid Build Coastguard Worker /// An aligned pointer to a memory location containing integer values.
3361*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the moved values.
3362*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_load_si128(__m128i const * __p)3363*bed243d3SAndroid Build Coastguard Worker _mm_load_si128(__m128i const *__p) {
3364*bed243d3SAndroid Build Coastguard Worker return *__p;
3365*bed243d3SAndroid Build Coastguard Worker }
3366*bed243d3SAndroid Build Coastguard Worker
3367*bed243d3SAndroid Build Coastguard Worker /// Moves packed integer values from an unaligned 128-bit memory location
3368*bed243d3SAndroid Build Coastguard Worker /// to elements in a 128-bit integer vector.
3369*bed243d3SAndroid Build Coastguard Worker ///
3370*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3371*bed243d3SAndroid Build Coastguard Worker ///
3372*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVDQU / MOVDQU </c> instruction.
3373*bed243d3SAndroid Build Coastguard Worker ///
3374*bed243d3SAndroid Build Coastguard Worker /// \param __p
3375*bed243d3SAndroid Build Coastguard Worker /// A pointer to a memory location containing integer values.
3376*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the moved values.
3377*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_loadu_si128(__m128i_u const * __p)3378*bed243d3SAndroid Build Coastguard Worker _mm_loadu_si128(__m128i_u const *__p) {
3379*bed243d3SAndroid Build Coastguard Worker struct __loadu_si128 {
3380*bed243d3SAndroid Build Coastguard Worker __m128i_u __v;
3381*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
3382*bed243d3SAndroid Build Coastguard Worker return ((const struct __loadu_si128 *)__p)->__v;
3383*bed243d3SAndroid Build Coastguard Worker }
3384*bed243d3SAndroid Build Coastguard Worker
3385*bed243d3SAndroid Build Coastguard Worker /// Returns a vector of [2 x i64] where the lower element is taken from
3386*bed243d3SAndroid Build Coastguard Worker /// the lower element of the operand, and the upper element is zero.
3387*bed243d3SAndroid Build Coastguard Worker ///
3388*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3389*bed243d3SAndroid Build Coastguard Worker ///
3390*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction.
3391*bed243d3SAndroid Build Coastguard Worker ///
3392*bed243d3SAndroid Build Coastguard Worker /// \param __p
3393*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64]. Bits [63:0] are written to bits [63:0] of
3394*bed243d3SAndroid Build Coastguard Worker /// the destination.
3395*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64]. The lower order bits contain the
3396*bed243d3SAndroid Build Coastguard Worker /// moved value. The higher order bits are cleared.
3397*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_loadl_epi64(__m128i_u const * __p)3398*bed243d3SAndroid Build Coastguard Worker _mm_loadl_epi64(__m128i_u const *__p) {
3399*bed243d3SAndroid Build Coastguard Worker struct __mm_loadl_epi64_struct {
3400*bed243d3SAndroid Build Coastguard Worker long long __u;
3401*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
3402*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i){
3403*bed243d3SAndroid Build Coastguard Worker ((const struct __mm_loadl_epi64_struct *)__p)->__u, 0};
3404*bed243d3SAndroid Build Coastguard Worker }
3405*bed243d3SAndroid Build Coastguard Worker
3406*bed243d3SAndroid Build Coastguard Worker /// Generates a 128-bit vector of [4 x i32] with unspecified content.
3407*bed243d3SAndroid Build Coastguard Worker /// This could be used as an argument to another intrinsic function where the
3408*bed243d3SAndroid Build Coastguard Worker /// argument is required but the value is not actually used.
3409*bed243d3SAndroid Build Coastguard Worker ///
3410*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3411*bed243d3SAndroid Build Coastguard Worker ///
3412*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
3413*bed243d3SAndroid Build Coastguard Worker ///
3414*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] with unspecified content.
_mm_undefined_si128(void)3415*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_undefined_si128(void) {
3416*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_undef128();
3417*bed243d3SAndroid Build Coastguard Worker }
3418*bed243d3SAndroid Build Coastguard Worker
3419*bed243d3SAndroid Build Coastguard Worker /// Initializes both 64-bit values in a 128-bit vector of [2 x i64] with
3420*bed243d3SAndroid Build Coastguard Worker /// the specified 64-bit integer values.
3421*bed243d3SAndroid Build Coastguard Worker ///
3422*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3423*bed243d3SAndroid Build Coastguard Worker ///
3424*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3425*bed243d3SAndroid Build Coastguard Worker /// instruction.
3426*bed243d3SAndroid Build Coastguard Worker ///
3427*bed243d3SAndroid Build Coastguard Worker /// \param __q1
3428*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the upper 64 bits of the
3429*bed243d3SAndroid Build Coastguard Worker /// destination vector of [2 x i64].
3430*bed243d3SAndroid Build Coastguard Worker /// \param __q0
3431*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the lower 64 bits of the
3432*bed243d3SAndroid Build Coastguard Worker /// destination vector of [2 x i64].
3433*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [2 x i64] containing the values
3434*bed243d3SAndroid Build Coastguard Worker /// provided in the operands.
_mm_set_epi64x(long long __q1,long long __q0)3435*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi64x(long long __q1,
3436*bed243d3SAndroid Build Coastguard Worker long long __q0) {
3437*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v2di){__q0, __q1};
3438*bed243d3SAndroid Build Coastguard Worker }
3439*bed243d3SAndroid Build Coastguard Worker
3440*bed243d3SAndroid Build Coastguard Worker /// Initializes both 64-bit values in a 128-bit vector of [2 x i64] with
3441*bed243d3SAndroid Build Coastguard Worker /// the specified 64-bit integer values.
3442*bed243d3SAndroid Build Coastguard Worker ///
3443*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3444*bed243d3SAndroid Build Coastguard Worker ///
3445*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3446*bed243d3SAndroid Build Coastguard Worker /// instruction.
3447*bed243d3SAndroid Build Coastguard Worker ///
3448*bed243d3SAndroid Build Coastguard Worker /// \param __q1
3449*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the upper 64 bits of the
3450*bed243d3SAndroid Build Coastguard Worker /// destination vector of [2 x i64].
3451*bed243d3SAndroid Build Coastguard Worker /// \param __q0
3452*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer value used to initialize the lower 64 bits of the
3453*bed243d3SAndroid Build Coastguard Worker /// destination vector of [2 x i64].
3454*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [2 x i64] containing the values
3455*bed243d3SAndroid Build Coastguard Worker /// provided in the operands.
_mm_set_epi64(__m64 __q1,__m64 __q0)3456*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi64(__m64 __q1,
3457*bed243d3SAndroid Build Coastguard Worker __m64 __q0) {
3458*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi64x((long long)__q1, (long long)__q0);
3459*bed243d3SAndroid Build Coastguard Worker }
3460*bed243d3SAndroid Build Coastguard Worker
3461*bed243d3SAndroid Build Coastguard Worker /// Initializes the 32-bit values in a 128-bit vector of [4 x i32] with
3462*bed243d3SAndroid Build Coastguard Worker /// the specified 32-bit integer values.
3463*bed243d3SAndroid Build Coastguard Worker ///
3464*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3465*bed243d3SAndroid Build Coastguard Worker ///
3466*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3467*bed243d3SAndroid Build Coastguard Worker /// instruction.
3468*bed243d3SAndroid Build Coastguard Worker ///
3469*bed243d3SAndroid Build Coastguard Worker /// \param __i3
3470*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [127:96] of the
3471*bed243d3SAndroid Build Coastguard Worker /// destination vector.
3472*bed243d3SAndroid Build Coastguard Worker /// \param __i2
3473*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [95:64] of the destination
3474*bed243d3SAndroid Build Coastguard Worker /// vector.
3475*bed243d3SAndroid Build Coastguard Worker /// \param __i1
3476*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [63:32] of the destination
3477*bed243d3SAndroid Build Coastguard Worker /// vector.
3478*bed243d3SAndroid Build Coastguard Worker /// \param __i0
3479*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integer value used to initialize bits [31:0] of the destination
3480*bed243d3SAndroid Build Coastguard Worker /// vector.
3481*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [4 x i32] containing the values
3482*bed243d3SAndroid Build Coastguard Worker /// provided in the operands.
_mm_set_epi32(int __i3,int __i2,int __i1,int __i0)3483*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set_epi32(int __i3, int __i2,
3484*bed243d3SAndroid Build Coastguard Worker int __i1, int __i0) {
3485*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v4si){__i0, __i1, __i2, __i3};
3486*bed243d3SAndroid Build Coastguard Worker }
3487*bed243d3SAndroid Build Coastguard Worker
3488*bed243d3SAndroid Build Coastguard Worker /// Initializes the 16-bit values in a 128-bit vector of [8 x i16] with
3489*bed243d3SAndroid Build Coastguard Worker /// the specified 16-bit integer values.
3490*bed243d3SAndroid Build Coastguard Worker ///
3491*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3492*bed243d3SAndroid Build Coastguard Worker ///
3493*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3494*bed243d3SAndroid Build Coastguard Worker /// instruction.
3495*bed243d3SAndroid Build Coastguard Worker ///
3496*bed243d3SAndroid Build Coastguard Worker /// \param __w7
3497*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [127:112] of the
3498*bed243d3SAndroid Build Coastguard Worker /// destination vector.
3499*bed243d3SAndroid Build Coastguard Worker /// \param __w6
3500*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [111:96] of the
3501*bed243d3SAndroid Build Coastguard Worker /// destination vector.
3502*bed243d3SAndroid Build Coastguard Worker /// \param __w5
3503*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [95:80] of the destination
3504*bed243d3SAndroid Build Coastguard Worker /// vector.
3505*bed243d3SAndroid Build Coastguard Worker /// \param __w4
3506*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [79:64] of the destination
3507*bed243d3SAndroid Build Coastguard Worker /// vector.
3508*bed243d3SAndroid Build Coastguard Worker /// \param __w3
3509*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [63:48] of the destination
3510*bed243d3SAndroid Build Coastguard Worker /// vector.
3511*bed243d3SAndroid Build Coastguard Worker /// \param __w2
3512*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [47:32] of the destination
3513*bed243d3SAndroid Build Coastguard Worker /// vector.
3514*bed243d3SAndroid Build Coastguard Worker /// \param __w1
3515*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [31:16] of the destination
3516*bed243d3SAndroid Build Coastguard Worker /// vector.
3517*bed243d3SAndroid Build Coastguard Worker /// \param __w0
3518*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integer value used to initialize bits [15:0] of the destination
3519*bed243d3SAndroid Build Coastguard Worker /// vector.
3520*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [8 x i16] containing the values
3521*bed243d3SAndroid Build Coastguard Worker /// provided in the operands.
3522*bed243d3SAndroid 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)3523*bed243d3SAndroid Build Coastguard Worker _mm_set_epi16(short __w7, short __w6, short __w5, short __w4, short __w3,
3524*bed243d3SAndroid Build Coastguard Worker short __w2, short __w1, short __w0) {
3525*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v8hi){__w0, __w1, __w2, __w3,
3526*bed243d3SAndroid Build Coastguard Worker __w4, __w5, __w6, __w7};
3527*bed243d3SAndroid Build Coastguard Worker }
3528*bed243d3SAndroid Build Coastguard Worker
3529*bed243d3SAndroid Build Coastguard Worker /// Initializes the 8-bit values in a 128-bit vector of [16 x i8] with
3530*bed243d3SAndroid Build Coastguard Worker /// the specified 8-bit integer values.
3531*bed243d3SAndroid Build Coastguard Worker ///
3532*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3533*bed243d3SAndroid Build Coastguard Worker ///
3534*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3535*bed243d3SAndroid Build Coastguard Worker /// instruction.
3536*bed243d3SAndroid Build Coastguard Worker ///
3537*bed243d3SAndroid Build Coastguard Worker /// \param __b15
3538*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [127:120] of the destination vector.
3539*bed243d3SAndroid Build Coastguard Worker /// \param __b14
3540*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [119:112] of the destination vector.
3541*bed243d3SAndroid Build Coastguard Worker /// \param __b13
3542*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [111:104] of the destination vector.
3543*bed243d3SAndroid Build Coastguard Worker /// \param __b12
3544*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [103:96] of the destination vector.
3545*bed243d3SAndroid Build Coastguard Worker /// \param __b11
3546*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [95:88] of the destination vector.
3547*bed243d3SAndroid Build Coastguard Worker /// \param __b10
3548*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [87:80] of the destination vector.
3549*bed243d3SAndroid Build Coastguard Worker /// \param __b9
3550*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [79:72] of the destination vector.
3551*bed243d3SAndroid Build Coastguard Worker /// \param __b8
3552*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [71:64] of the destination vector.
3553*bed243d3SAndroid Build Coastguard Worker /// \param __b7
3554*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [63:56] of the destination vector.
3555*bed243d3SAndroid Build Coastguard Worker /// \param __b6
3556*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [55:48] of the destination vector.
3557*bed243d3SAndroid Build Coastguard Worker /// \param __b5
3558*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [47:40] of the destination vector.
3559*bed243d3SAndroid Build Coastguard Worker /// \param __b4
3560*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [39:32] of the destination vector.
3561*bed243d3SAndroid Build Coastguard Worker /// \param __b3
3562*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [31:24] of the destination vector.
3563*bed243d3SAndroid Build Coastguard Worker /// \param __b2
3564*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [23:16] of the destination vector.
3565*bed243d3SAndroid Build Coastguard Worker /// \param __b1
3566*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [15:8] of the destination vector.
3567*bed243d3SAndroid Build Coastguard Worker /// \param __b0
3568*bed243d3SAndroid Build Coastguard Worker /// Initializes bits [7:0] of the destination vector.
3569*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [16 x i8] containing the values
3570*bed243d3SAndroid Build Coastguard Worker /// provided in the operands.
3571*bed243d3SAndroid 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)3572*bed243d3SAndroid Build Coastguard Worker _mm_set_epi8(char __b15, char __b14, char __b13, char __b12, char __b11,
3573*bed243d3SAndroid Build Coastguard Worker char __b10, char __b9, char __b8, char __b7, char __b6, char __b5,
3574*bed243d3SAndroid Build Coastguard Worker char __b4, char __b3, char __b2, char __b1, char __b0) {
3575*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v16qi){
3576*bed243d3SAndroid Build Coastguard Worker __b0, __b1, __b2, __b3, __b4, __b5, __b6, __b7,
3577*bed243d3SAndroid Build Coastguard Worker __b8, __b9, __b10, __b11, __b12, __b13, __b14, __b15};
3578*bed243d3SAndroid Build Coastguard Worker }
3579*bed243d3SAndroid Build Coastguard Worker
3580*bed243d3SAndroid Build Coastguard Worker /// Initializes both values in a 128-bit integer vector with the
3581*bed243d3SAndroid Build Coastguard Worker /// specified 64-bit integer value.
3582*bed243d3SAndroid Build Coastguard Worker ///
3583*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3584*bed243d3SAndroid Build Coastguard Worker ///
3585*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3586*bed243d3SAndroid Build Coastguard Worker /// instruction.
3587*bed243d3SAndroid Build Coastguard Worker ///
3588*bed243d3SAndroid Build Coastguard Worker /// \param __q
3589*bed243d3SAndroid Build Coastguard Worker /// Integer value used to initialize the elements of the destination integer
3590*bed243d3SAndroid Build Coastguard Worker /// vector.
3591*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit integer vector of [2 x i64] with both
3592*bed243d3SAndroid Build Coastguard Worker /// elements containing the value provided in the operand.
_mm_set1_epi64x(long long __q)3593*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi64x(long long __q) {
3594*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi64x(__q, __q);
3595*bed243d3SAndroid Build Coastguard Worker }
3596*bed243d3SAndroid Build Coastguard Worker
3597*bed243d3SAndroid Build Coastguard Worker /// Initializes both values in a 128-bit vector of [2 x i64] with the
3598*bed243d3SAndroid Build Coastguard Worker /// specified 64-bit value.
3599*bed243d3SAndroid Build Coastguard Worker ///
3600*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3601*bed243d3SAndroid Build Coastguard Worker ///
3602*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3603*bed243d3SAndroid Build Coastguard Worker /// instruction.
3604*bed243d3SAndroid Build Coastguard Worker ///
3605*bed243d3SAndroid Build Coastguard Worker /// \param __q
3606*bed243d3SAndroid Build Coastguard Worker /// A 64-bit value used to initialize the elements of the destination integer
3607*bed243d3SAndroid Build Coastguard Worker /// vector.
3608*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [2 x i64] with all elements
3609*bed243d3SAndroid Build Coastguard Worker /// containing the value provided in the operand.
_mm_set1_epi64(__m64 __q)3610*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi64(__m64 __q) {
3611*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi64(__q, __q);
3612*bed243d3SAndroid Build Coastguard Worker }
3613*bed243d3SAndroid Build Coastguard Worker
3614*bed243d3SAndroid Build Coastguard Worker /// Initializes all values in a 128-bit vector of [4 x i32] with the
3615*bed243d3SAndroid Build Coastguard Worker /// specified 32-bit value.
3616*bed243d3SAndroid Build Coastguard Worker ///
3617*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3618*bed243d3SAndroid Build Coastguard Worker ///
3619*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3620*bed243d3SAndroid Build Coastguard Worker /// instruction.
3621*bed243d3SAndroid Build Coastguard Worker ///
3622*bed243d3SAndroid Build Coastguard Worker /// \param __i
3623*bed243d3SAndroid Build Coastguard Worker /// A 32-bit value used to initialize the elements of the destination integer
3624*bed243d3SAndroid Build Coastguard Worker /// vector.
3625*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [4 x i32] with all elements
3626*bed243d3SAndroid Build Coastguard Worker /// containing the value provided in the operand.
_mm_set1_epi32(int __i)3627*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi32(int __i) {
3628*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi32(__i, __i, __i, __i);
3629*bed243d3SAndroid Build Coastguard Worker }
3630*bed243d3SAndroid Build Coastguard Worker
3631*bed243d3SAndroid Build Coastguard Worker /// Initializes all values in a 128-bit vector of [8 x i16] with the
3632*bed243d3SAndroid Build Coastguard Worker /// specified 16-bit value.
3633*bed243d3SAndroid Build Coastguard Worker ///
3634*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3635*bed243d3SAndroid Build Coastguard Worker ///
3636*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3637*bed243d3SAndroid Build Coastguard Worker /// instruction.
3638*bed243d3SAndroid Build Coastguard Worker ///
3639*bed243d3SAndroid Build Coastguard Worker /// \param __w
3640*bed243d3SAndroid Build Coastguard Worker /// A 16-bit value used to initialize the elements of the destination integer
3641*bed243d3SAndroid Build Coastguard Worker /// vector.
3642*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [8 x i16] with all elements
3643*bed243d3SAndroid Build Coastguard Worker /// containing the value provided in the operand.
_mm_set1_epi16(short __w)3644*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi16(short __w) {
3645*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi16(__w, __w, __w, __w, __w, __w, __w, __w);
3646*bed243d3SAndroid Build Coastguard Worker }
3647*bed243d3SAndroid Build Coastguard Worker
3648*bed243d3SAndroid Build Coastguard Worker /// Initializes all values in a 128-bit vector of [16 x i8] with the
3649*bed243d3SAndroid Build Coastguard Worker /// specified 8-bit value.
3650*bed243d3SAndroid Build Coastguard Worker ///
3651*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3652*bed243d3SAndroid Build Coastguard Worker ///
3653*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3654*bed243d3SAndroid Build Coastguard Worker /// instruction.
3655*bed243d3SAndroid Build Coastguard Worker ///
3656*bed243d3SAndroid Build Coastguard Worker /// \param __b
3657*bed243d3SAndroid Build Coastguard Worker /// An 8-bit value used to initialize the elements of the destination integer
3658*bed243d3SAndroid Build Coastguard Worker /// vector.
3659*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit vector of [16 x i8] with all elements
3660*bed243d3SAndroid Build Coastguard Worker /// containing the value provided in the operand.
_mm_set1_epi8(char __b)3661*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_set1_epi8(char __b) {
3662*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi8(__b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b,
3663*bed243d3SAndroid Build Coastguard Worker __b, __b, __b, __b, __b);
3664*bed243d3SAndroid Build Coastguard Worker }
3665*bed243d3SAndroid Build Coastguard Worker
3666*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector, initialized in reverse order
3667*bed243d3SAndroid Build Coastguard Worker /// with the specified 64-bit integral values.
3668*bed243d3SAndroid Build Coastguard Worker ///
3669*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3670*bed243d3SAndroid Build Coastguard Worker ///
3671*bed243d3SAndroid Build Coastguard Worker /// This intrinsic does not correspond to a specific instruction.
3672*bed243d3SAndroid Build Coastguard Worker ///
3673*bed243d3SAndroid Build Coastguard Worker /// \param __q0
3674*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integral value used to initialize the lower 64 bits of the
3675*bed243d3SAndroid Build Coastguard Worker /// result.
3676*bed243d3SAndroid Build Coastguard Worker /// \param __q1
3677*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integral value used to initialize the upper 64 bits of the
3678*bed243d3SAndroid Build Coastguard Worker /// result.
3679*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit integer vector.
_mm_setr_epi64(__m64 __q0,__m64 __q1)3680*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setr_epi64(__m64 __q0,
3681*bed243d3SAndroid Build Coastguard Worker __m64 __q1) {
3682*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi64(__q1, __q0);
3683*bed243d3SAndroid Build Coastguard Worker }
3684*bed243d3SAndroid Build Coastguard Worker
3685*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector, initialized in reverse order
3686*bed243d3SAndroid Build Coastguard Worker /// with the specified 32-bit integral values.
3687*bed243d3SAndroid Build Coastguard Worker ///
3688*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3689*bed243d3SAndroid Build Coastguard Worker ///
3690*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3691*bed243d3SAndroid Build Coastguard Worker /// instruction.
3692*bed243d3SAndroid Build Coastguard Worker ///
3693*bed243d3SAndroid Build Coastguard Worker /// \param __i0
3694*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integral value used to initialize bits [31:0] of the result.
3695*bed243d3SAndroid Build Coastguard Worker /// \param __i1
3696*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integral value used to initialize bits [63:32] of the result.
3697*bed243d3SAndroid Build Coastguard Worker /// \param __i2
3698*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integral value used to initialize bits [95:64] of the result.
3699*bed243d3SAndroid Build Coastguard Worker /// \param __i3
3700*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integral value used to initialize bits [127:96] of the result.
3701*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit integer vector.
_mm_setr_epi32(int __i0,int __i1,int __i2,int __i3)3702*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setr_epi32(int __i0, int __i1,
3703*bed243d3SAndroid Build Coastguard Worker int __i2,
3704*bed243d3SAndroid Build Coastguard Worker int __i3) {
3705*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi32(__i3, __i2, __i1, __i0);
3706*bed243d3SAndroid Build Coastguard Worker }
3707*bed243d3SAndroid Build Coastguard Worker
3708*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector, initialized in reverse order
3709*bed243d3SAndroid Build Coastguard Worker /// with the specified 16-bit integral values.
3710*bed243d3SAndroid Build Coastguard Worker ///
3711*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3712*bed243d3SAndroid Build Coastguard Worker ///
3713*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3714*bed243d3SAndroid Build Coastguard Worker /// instruction.
3715*bed243d3SAndroid Build Coastguard Worker ///
3716*bed243d3SAndroid Build Coastguard Worker /// \param __w0
3717*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [15:0] of the result.
3718*bed243d3SAndroid Build Coastguard Worker /// \param __w1
3719*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [31:16] of the result.
3720*bed243d3SAndroid Build Coastguard Worker /// \param __w2
3721*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [47:32] of the result.
3722*bed243d3SAndroid Build Coastguard Worker /// \param __w3
3723*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [63:48] of the result.
3724*bed243d3SAndroid Build Coastguard Worker /// \param __w4
3725*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [79:64] of the result.
3726*bed243d3SAndroid Build Coastguard Worker /// \param __w5
3727*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [95:80] of the result.
3728*bed243d3SAndroid Build Coastguard Worker /// \param __w6
3729*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [111:96] of the result.
3730*bed243d3SAndroid Build Coastguard Worker /// \param __w7
3731*bed243d3SAndroid Build Coastguard Worker /// A 16-bit integral value used to initialize bits [127:112] of the result.
3732*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit integer vector.
3733*bed243d3SAndroid 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)3734*bed243d3SAndroid Build Coastguard Worker _mm_setr_epi16(short __w0, short __w1, short __w2, short __w3, short __w4,
3735*bed243d3SAndroid Build Coastguard Worker short __w5, short __w6, short __w7) {
3736*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi16(__w7, __w6, __w5, __w4, __w3, __w2, __w1, __w0);
3737*bed243d3SAndroid Build Coastguard Worker }
3738*bed243d3SAndroid Build Coastguard Worker
3739*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector, initialized in reverse order
3740*bed243d3SAndroid Build Coastguard Worker /// with the specified 8-bit integral values.
3741*bed243d3SAndroid Build Coastguard Worker ///
3742*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3743*bed243d3SAndroid Build Coastguard Worker ///
3744*bed243d3SAndroid Build Coastguard Worker /// This intrinsic is a utility function and does not correspond to a specific
3745*bed243d3SAndroid Build Coastguard Worker /// instruction.
3746*bed243d3SAndroid Build Coastguard Worker ///
3747*bed243d3SAndroid Build Coastguard Worker /// \param __b0
3748*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [7:0] of the result.
3749*bed243d3SAndroid Build Coastguard Worker /// \param __b1
3750*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [15:8] of the result.
3751*bed243d3SAndroid Build Coastguard Worker /// \param __b2
3752*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [23:16] of the result.
3753*bed243d3SAndroid Build Coastguard Worker /// \param __b3
3754*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [31:24] of the result.
3755*bed243d3SAndroid Build Coastguard Worker /// \param __b4
3756*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [39:32] of the result.
3757*bed243d3SAndroid Build Coastguard Worker /// \param __b5
3758*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [47:40] of the result.
3759*bed243d3SAndroid Build Coastguard Worker /// \param __b6
3760*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [55:48] of the result.
3761*bed243d3SAndroid Build Coastguard Worker /// \param __b7
3762*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [63:56] of the result.
3763*bed243d3SAndroid Build Coastguard Worker /// \param __b8
3764*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [71:64] of the result.
3765*bed243d3SAndroid Build Coastguard Worker /// \param __b9
3766*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [79:72] of the result.
3767*bed243d3SAndroid Build Coastguard Worker /// \param __b10
3768*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [87:80] of the result.
3769*bed243d3SAndroid Build Coastguard Worker /// \param __b11
3770*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [95:88] of the result.
3771*bed243d3SAndroid Build Coastguard Worker /// \param __b12
3772*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [103:96] of the result.
3773*bed243d3SAndroid Build Coastguard Worker /// \param __b13
3774*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [111:104] of the result.
3775*bed243d3SAndroid Build Coastguard Worker /// \param __b14
3776*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [119:112] of the result.
3777*bed243d3SAndroid Build Coastguard Worker /// \param __b15
3778*bed243d3SAndroid Build Coastguard Worker /// An 8-bit integral value used to initialize bits [127:120] of the result.
3779*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit integer vector.
3780*bed243d3SAndroid 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)3781*bed243d3SAndroid Build Coastguard Worker _mm_setr_epi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5,
3782*bed243d3SAndroid Build Coastguard Worker char __b6, char __b7, char __b8, char __b9, char __b10,
3783*bed243d3SAndroid Build Coastguard Worker char __b11, char __b12, char __b13, char __b14, char __b15) {
3784*bed243d3SAndroid Build Coastguard Worker return _mm_set_epi8(__b15, __b14, __b13, __b12, __b11, __b10, __b9, __b8,
3785*bed243d3SAndroid Build Coastguard Worker __b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0);
3786*bed243d3SAndroid Build Coastguard Worker }
3787*bed243d3SAndroid Build Coastguard Worker
3788*bed243d3SAndroid Build Coastguard Worker /// Creates a 128-bit integer vector initialized to zero.
3789*bed243d3SAndroid Build Coastguard Worker ///
3790*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3791*bed243d3SAndroid Build Coastguard Worker ///
3792*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VXORPS / XORPS </c> instruction.
3793*bed243d3SAndroid Build Coastguard Worker ///
3794*bed243d3SAndroid Build Coastguard Worker /// \returns An initialized 128-bit integer vector with all elements set to
3795*bed243d3SAndroid Build Coastguard Worker /// zero.
_mm_setzero_si128(void)3796*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_setzero_si128(void) {
3797*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v2di){0LL, 0LL};
3798*bed243d3SAndroid Build Coastguard Worker }
3799*bed243d3SAndroid Build Coastguard Worker
3800*bed243d3SAndroid Build Coastguard Worker /// Stores a 128-bit integer vector to a memory location aligned on a
3801*bed243d3SAndroid Build Coastguard Worker /// 128-bit boundary.
3802*bed243d3SAndroid Build Coastguard Worker ///
3803*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3804*bed243d3SAndroid Build Coastguard Worker ///
3805*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVAPS / MOVAPS </c> instruction.
3806*bed243d3SAndroid Build Coastguard Worker ///
3807*bed243d3SAndroid Build Coastguard Worker /// \param __p
3808*bed243d3SAndroid Build Coastguard Worker /// A pointer to an aligned memory location that will receive the integer
3809*bed243d3SAndroid Build Coastguard Worker /// values.
3810*bed243d3SAndroid Build Coastguard Worker /// \param __b
3811*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the values to be moved.
_mm_store_si128(__m128i * __p,__m128i __b)3812*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_store_si128(__m128i *__p,
3813*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3814*bed243d3SAndroid Build Coastguard Worker *__p = __b;
3815*bed243d3SAndroid Build Coastguard Worker }
3816*bed243d3SAndroid Build Coastguard Worker
3817*bed243d3SAndroid Build Coastguard Worker /// Stores a 128-bit integer vector to an unaligned memory location.
3818*bed243d3SAndroid Build Coastguard Worker ///
3819*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3820*bed243d3SAndroid Build Coastguard Worker ///
3821*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVUPS / MOVUPS </c> instruction.
3822*bed243d3SAndroid Build Coastguard Worker ///
3823*bed243d3SAndroid Build Coastguard Worker /// \param __p
3824*bed243d3SAndroid Build Coastguard Worker /// A pointer to a memory location that will receive the integer values.
3825*bed243d3SAndroid Build Coastguard Worker /// \param __b
3826*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the values to be moved.
_mm_storeu_si128(__m128i_u * __p,__m128i __b)3827*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storeu_si128(__m128i_u *__p,
3828*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3829*bed243d3SAndroid Build Coastguard Worker struct __storeu_si128 {
3830*bed243d3SAndroid Build Coastguard Worker __m128i_u __v;
3831*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
3832*bed243d3SAndroid Build Coastguard Worker ((struct __storeu_si128 *)__p)->__v = __b;
3833*bed243d3SAndroid Build Coastguard Worker }
3834*bed243d3SAndroid Build Coastguard Worker
3835*bed243d3SAndroid Build Coastguard Worker /// Stores a 64-bit integer value from the low element of a 128-bit integer
3836*bed243d3SAndroid Build Coastguard Worker /// vector.
3837*bed243d3SAndroid Build Coastguard Worker ///
3838*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3839*bed243d3SAndroid Build Coastguard Worker ///
3840*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction.
3841*bed243d3SAndroid Build Coastguard Worker ///
3842*bed243d3SAndroid Build Coastguard Worker /// \param __p
3843*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location. The address of the memory
3844*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
3845*bed243d3SAndroid Build Coastguard Worker /// \param __b
3846*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the value to be stored.
_mm_storeu_si64(void * __p,__m128i __b)3847*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storeu_si64(void *__p,
3848*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3849*bed243d3SAndroid Build Coastguard Worker struct __storeu_si64 {
3850*bed243d3SAndroid Build Coastguard Worker long long __v;
3851*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
3852*bed243d3SAndroid Build Coastguard Worker ((struct __storeu_si64 *)__p)->__v = ((__v2di)__b)[0];
3853*bed243d3SAndroid Build Coastguard Worker }
3854*bed243d3SAndroid Build Coastguard Worker
3855*bed243d3SAndroid Build Coastguard Worker /// Stores a 32-bit integer value from the low element of a 128-bit integer
3856*bed243d3SAndroid Build Coastguard Worker /// vector.
3857*bed243d3SAndroid Build Coastguard Worker ///
3858*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3859*bed243d3SAndroid Build Coastguard Worker ///
3860*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
3861*bed243d3SAndroid Build Coastguard Worker ///
3862*bed243d3SAndroid Build Coastguard Worker /// \param __p
3863*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 32-bit memory location. The address of the memory
3864*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
3865*bed243d3SAndroid Build Coastguard Worker /// \param __b
3866*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the value to be stored.
_mm_storeu_si32(void * __p,__m128i __b)3867*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storeu_si32(void *__p,
3868*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3869*bed243d3SAndroid Build Coastguard Worker struct __storeu_si32 {
3870*bed243d3SAndroid Build Coastguard Worker int __v;
3871*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
3872*bed243d3SAndroid Build Coastguard Worker ((struct __storeu_si32 *)__p)->__v = ((__v4si)__b)[0];
3873*bed243d3SAndroid Build Coastguard Worker }
3874*bed243d3SAndroid Build Coastguard Worker
3875*bed243d3SAndroid Build Coastguard Worker /// Stores a 16-bit integer value from the low element of a 128-bit integer
3876*bed243d3SAndroid Build Coastguard Worker /// vector.
3877*bed243d3SAndroid Build Coastguard Worker ///
3878*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3879*bed243d3SAndroid Build Coastguard Worker ///
3880*bed243d3SAndroid Build Coastguard Worker /// This intrinsic does not correspond to a specific instruction.
3881*bed243d3SAndroid Build Coastguard Worker ///
3882*bed243d3SAndroid Build Coastguard Worker /// \param __p
3883*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 16-bit memory location. The address of the memory
3884*bed243d3SAndroid Build Coastguard Worker /// location does not have to be aligned.
3885*bed243d3SAndroid Build Coastguard Worker /// \param __b
3886*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the value to be stored.
_mm_storeu_si16(void * __p,__m128i __b)3887*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storeu_si16(void *__p,
3888*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
3889*bed243d3SAndroid Build Coastguard Worker struct __storeu_si16 {
3890*bed243d3SAndroid Build Coastguard Worker short __v;
3891*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
3892*bed243d3SAndroid Build Coastguard Worker ((struct __storeu_si16 *)__p)->__v = ((__v8hi)__b)[0];
3893*bed243d3SAndroid Build Coastguard Worker }
3894*bed243d3SAndroid Build Coastguard Worker
3895*bed243d3SAndroid Build Coastguard Worker /// Moves bytes selected by the mask from the first operand to the
3896*bed243d3SAndroid Build Coastguard Worker /// specified unaligned memory location. When a mask bit is 1, the
3897*bed243d3SAndroid Build Coastguard Worker /// corresponding byte is written, otherwise it is not written.
3898*bed243d3SAndroid Build Coastguard Worker ///
3899*bed243d3SAndroid Build Coastguard Worker /// To minimize caching, the data is flagged as non-temporal (unlikely to be
3900*bed243d3SAndroid Build Coastguard Worker /// used again soon). Exception and trap behavior for elements not selected
3901*bed243d3SAndroid Build Coastguard Worker /// for storage to memory are implementation dependent.
3902*bed243d3SAndroid Build Coastguard Worker ///
3903*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3904*bed243d3SAndroid Build Coastguard Worker ///
3905*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMASKMOVDQU / MASKMOVDQU </c>
3906*bed243d3SAndroid Build Coastguard Worker /// instruction.
3907*bed243d3SAndroid Build Coastguard Worker ///
3908*bed243d3SAndroid Build Coastguard Worker /// \param __d
3909*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the values to be moved.
3910*bed243d3SAndroid Build Coastguard Worker /// \param __n
3911*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the mask. The most significant bit of
3912*bed243d3SAndroid Build Coastguard Worker /// each byte represents the mask bits.
3913*bed243d3SAndroid Build Coastguard Worker /// \param __p
3914*bed243d3SAndroid Build Coastguard Worker /// A pointer to an unaligned 128-bit memory location where the specified
3915*bed243d3SAndroid Build Coastguard Worker /// values are moved.
_mm_maskmoveu_si128(__m128i __d,__m128i __n,char * __p)3916*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_maskmoveu_si128(__m128i __d,
3917*bed243d3SAndroid Build Coastguard Worker __m128i __n,
3918*bed243d3SAndroid Build Coastguard Worker char *__p) {
3919*bed243d3SAndroid Build Coastguard Worker __builtin_ia32_maskmovdqu((__v16qi)__d, (__v16qi)__n, __p);
3920*bed243d3SAndroid Build Coastguard Worker }
3921*bed243d3SAndroid Build Coastguard Worker
3922*bed243d3SAndroid Build Coastguard Worker /// Stores the lower 64 bits of a 128-bit integer vector of [2 x i64] to
3923*bed243d3SAndroid Build Coastguard Worker /// a memory location.
3924*bed243d3SAndroid Build Coastguard Worker ///
3925*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3926*bed243d3SAndroid Build Coastguard Worker ///
3927*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVLPS / MOVLPS </c> instruction.
3928*bed243d3SAndroid Build Coastguard Worker ///
3929*bed243d3SAndroid Build Coastguard Worker /// \param __p
3930*bed243d3SAndroid Build Coastguard Worker /// A pointer to a 64-bit memory location that will receive the lower 64 bits
3931*bed243d3SAndroid Build Coastguard Worker /// of the integer vector parameter.
3932*bed243d3SAndroid Build Coastguard Worker /// \param __a
3933*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [2 x i64]. The lower 64 bits contain the
3934*bed243d3SAndroid Build Coastguard Worker /// value to be stored.
_mm_storel_epi64(__m128i_u * __p,__m128i __a)3935*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_storel_epi64(__m128i_u *__p,
3936*bed243d3SAndroid Build Coastguard Worker __m128i __a) {
3937*bed243d3SAndroid Build Coastguard Worker struct __mm_storel_epi64_struct {
3938*bed243d3SAndroid Build Coastguard Worker long long __u;
3939*bed243d3SAndroid Build Coastguard Worker } __attribute__((__packed__, __may_alias__));
3940*bed243d3SAndroid Build Coastguard Worker ((struct __mm_storel_epi64_struct *)__p)->__u = __a[0];
3941*bed243d3SAndroid Build Coastguard Worker }
3942*bed243d3SAndroid Build Coastguard Worker
3943*bed243d3SAndroid Build Coastguard Worker /// Stores a 128-bit floating point vector of [2 x double] to a 128-bit
3944*bed243d3SAndroid Build Coastguard Worker /// aligned memory location.
3945*bed243d3SAndroid Build Coastguard Worker ///
3946*bed243d3SAndroid Build Coastguard Worker /// To minimize caching, the data is flagged as non-temporal (unlikely to be
3947*bed243d3SAndroid Build Coastguard Worker /// used again soon).
3948*bed243d3SAndroid Build Coastguard Worker ///
3949*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3950*bed243d3SAndroid Build Coastguard Worker ///
3951*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVNTPS / MOVNTPS </c> instruction.
3952*bed243d3SAndroid Build Coastguard Worker ///
3953*bed243d3SAndroid Build Coastguard Worker /// \param __p
3954*bed243d3SAndroid Build Coastguard Worker /// A pointer to the 128-bit aligned memory location used to store the value.
3955*bed243d3SAndroid Build Coastguard Worker /// \param __a
3956*bed243d3SAndroid Build Coastguard Worker /// A vector of [2 x double] containing the 64-bit values to be stored.
_mm_stream_pd(void * __p,__m128d __a)3957*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_stream_pd(void *__p,
3958*bed243d3SAndroid Build Coastguard Worker __m128d __a) {
3959*bed243d3SAndroid Build Coastguard Worker __builtin_nontemporal_store((__v2df)__a, (__v2df *)__p);
3960*bed243d3SAndroid Build Coastguard Worker }
3961*bed243d3SAndroid Build Coastguard Worker
3962*bed243d3SAndroid Build Coastguard Worker /// Stores a 128-bit integer vector to a 128-bit aligned memory location.
3963*bed243d3SAndroid Build Coastguard Worker ///
3964*bed243d3SAndroid Build Coastguard Worker /// To minimize caching, the data is flagged as non-temporal (unlikely to be
3965*bed243d3SAndroid Build Coastguard Worker /// used again soon).
3966*bed243d3SAndroid Build Coastguard Worker ///
3967*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3968*bed243d3SAndroid Build Coastguard Worker ///
3969*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVNTPS / MOVNTPS </c> instruction.
3970*bed243d3SAndroid Build Coastguard Worker ///
3971*bed243d3SAndroid Build Coastguard Worker /// \param __p
3972*bed243d3SAndroid Build Coastguard Worker /// A pointer to the 128-bit aligned memory location used to store the value.
3973*bed243d3SAndroid Build Coastguard Worker /// \param __a
3974*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the values to be stored.
_mm_stream_si128(void * __p,__m128i __a)3975*bed243d3SAndroid Build Coastguard Worker static __inline__ void __DEFAULT_FN_ATTRS _mm_stream_si128(void *__p,
3976*bed243d3SAndroid Build Coastguard Worker __m128i __a) {
3977*bed243d3SAndroid Build Coastguard Worker __builtin_nontemporal_store((__v2di)__a, (__v2di *)__p);
3978*bed243d3SAndroid Build Coastguard Worker }
3979*bed243d3SAndroid Build Coastguard Worker
3980*bed243d3SAndroid Build Coastguard Worker /// Stores a 32-bit integer value in the specified memory location.
3981*bed243d3SAndroid Build Coastguard Worker ///
3982*bed243d3SAndroid Build Coastguard Worker /// To minimize caching, the data is flagged as non-temporal (unlikely to be
3983*bed243d3SAndroid Build Coastguard Worker /// used again soon).
3984*bed243d3SAndroid Build Coastguard Worker ///
3985*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
3986*bed243d3SAndroid Build Coastguard Worker ///
3987*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> MOVNTI </c> instruction.
3988*bed243d3SAndroid Build Coastguard Worker ///
3989*bed243d3SAndroid Build Coastguard Worker /// \param __p
3990*bed243d3SAndroid Build Coastguard Worker /// A pointer to the 32-bit memory location used to store the value.
3991*bed243d3SAndroid Build Coastguard Worker /// \param __a
3992*bed243d3SAndroid Build Coastguard Worker /// A 32-bit integer containing the value to be stored.
3993*bed243d3SAndroid Build Coastguard Worker static __inline__ void
3994*bed243d3SAndroid Build Coastguard Worker __attribute__((__always_inline__, __nodebug__, __target__("sse2")))
_mm_stream_si32(void * __p,int __a)3995*bed243d3SAndroid Build Coastguard Worker _mm_stream_si32(void *__p, int __a) {
3996*bed243d3SAndroid Build Coastguard Worker __builtin_ia32_movnti((int *)__p, __a);
3997*bed243d3SAndroid Build Coastguard Worker }
3998*bed243d3SAndroid Build Coastguard Worker
3999*bed243d3SAndroid Build Coastguard Worker #ifdef __x86_64__
4000*bed243d3SAndroid Build Coastguard Worker /// Stores a 64-bit integer value in the specified memory location.
4001*bed243d3SAndroid Build Coastguard Worker ///
4002*bed243d3SAndroid Build Coastguard Worker /// To minimize caching, the data is flagged as non-temporal (unlikely to be
4003*bed243d3SAndroid Build Coastguard Worker /// used again soon).
4004*bed243d3SAndroid Build Coastguard Worker ///
4005*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4006*bed243d3SAndroid Build Coastguard Worker ///
4007*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> MOVNTIQ </c> instruction.
4008*bed243d3SAndroid Build Coastguard Worker ///
4009*bed243d3SAndroid Build Coastguard Worker /// \param __p
4010*bed243d3SAndroid Build Coastguard Worker /// A pointer to the 64-bit memory location used to store the value.
4011*bed243d3SAndroid Build Coastguard Worker /// \param __a
4012*bed243d3SAndroid Build Coastguard Worker /// A 64-bit integer containing the value to be stored.
4013*bed243d3SAndroid Build Coastguard Worker static __inline__ void
4014*bed243d3SAndroid Build Coastguard Worker __attribute__((__always_inline__, __nodebug__, __target__("sse2")))
_mm_stream_si64(void * __p,long long __a)4015*bed243d3SAndroid Build Coastguard Worker _mm_stream_si64(void *__p, long long __a) {
4016*bed243d3SAndroid Build Coastguard Worker __builtin_ia32_movnti64((long long *)__p, __a);
4017*bed243d3SAndroid Build Coastguard Worker }
4018*bed243d3SAndroid Build Coastguard Worker #endif
4019*bed243d3SAndroid Build Coastguard Worker
4020*bed243d3SAndroid Build Coastguard Worker #if defined(__cplusplus)
4021*bed243d3SAndroid Build Coastguard Worker extern "C" {
4022*bed243d3SAndroid Build Coastguard Worker #endif
4023*bed243d3SAndroid Build Coastguard Worker
4024*bed243d3SAndroid Build Coastguard Worker /// The cache line containing \a __p is flushed and invalidated from all
4025*bed243d3SAndroid Build Coastguard Worker /// caches in the coherency domain.
4026*bed243d3SAndroid Build Coastguard Worker ///
4027*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4028*bed243d3SAndroid Build Coastguard Worker ///
4029*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> CLFLUSH </c> instruction.
4030*bed243d3SAndroid Build Coastguard Worker ///
4031*bed243d3SAndroid Build Coastguard Worker /// \param __p
4032*bed243d3SAndroid Build Coastguard Worker /// A pointer to the memory location used to identify the cache line to be
4033*bed243d3SAndroid Build Coastguard Worker /// flushed.
4034*bed243d3SAndroid Build Coastguard Worker void _mm_clflush(void const *__p);
4035*bed243d3SAndroid Build Coastguard Worker
4036*bed243d3SAndroid Build Coastguard Worker /// Forces strong memory ordering (serialization) between load
4037*bed243d3SAndroid Build Coastguard Worker /// instructions preceding this instruction and load instructions following
4038*bed243d3SAndroid Build Coastguard Worker /// this instruction, ensuring the system completes all previous loads before
4039*bed243d3SAndroid Build Coastguard Worker /// executing subsequent loads.
4040*bed243d3SAndroid Build Coastguard Worker ///
4041*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4042*bed243d3SAndroid Build Coastguard Worker ///
4043*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> LFENCE </c> instruction.
4044*bed243d3SAndroid Build Coastguard Worker ///
4045*bed243d3SAndroid Build Coastguard Worker void _mm_lfence(void);
4046*bed243d3SAndroid Build Coastguard Worker
4047*bed243d3SAndroid Build Coastguard Worker /// Forces strong memory ordering (serialization) between load and store
4048*bed243d3SAndroid Build Coastguard Worker /// instructions preceding this instruction and load and store instructions
4049*bed243d3SAndroid Build Coastguard Worker /// following this instruction, ensuring that the system completes all
4050*bed243d3SAndroid Build Coastguard Worker /// previous memory accesses before executing subsequent memory accesses.
4051*bed243d3SAndroid Build Coastguard Worker ///
4052*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4053*bed243d3SAndroid Build Coastguard Worker ///
4054*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> MFENCE </c> instruction.
4055*bed243d3SAndroid Build Coastguard Worker ///
4056*bed243d3SAndroid Build Coastguard Worker void _mm_mfence(void);
4057*bed243d3SAndroid Build Coastguard Worker
4058*bed243d3SAndroid Build Coastguard Worker #if defined(__cplusplus)
4059*bed243d3SAndroid Build Coastguard Worker } // extern "C"
4060*bed243d3SAndroid Build Coastguard Worker #endif
4061*bed243d3SAndroid Build Coastguard Worker
4062*bed243d3SAndroid Build Coastguard Worker /// Converts, with saturation, 16-bit signed integers from both 128-bit integer
4063*bed243d3SAndroid Build Coastguard Worker /// vector operands into 8-bit signed integers, and packs the results into
4064*bed243d3SAndroid Build Coastguard Worker /// the destination.
4065*bed243d3SAndroid Build Coastguard Worker ///
4066*bed243d3SAndroid Build Coastguard Worker /// Positive values greater than 0x7F are saturated to 0x7F. Negative values
4067*bed243d3SAndroid Build Coastguard Worker /// less than 0x80 are saturated to 0x80.
4068*bed243d3SAndroid Build Coastguard Worker ///
4069*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4070*bed243d3SAndroid Build Coastguard Worker ///
4071*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPACKSSWB / PACKSSWB </c> instruction.
4072*bed243d3SAndroid Build Coastguard Worker ///
4073*bed243d3SAndroid Build Coastguard Worker /// \param __a
4074*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4075*bed243d3SAndroid Build Coastguard Worker /// written to the lower 64 bits of the result.
4076*bed243d3SAndroid Build Coastguard Worker /// \param __b
4077*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4078*bed243d3SAndroid Build Coastguard Worker /// written to the higher 64 bits of the result.
4079*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [16 x i8] containing the converted values.
_mm_packs_epi16(__m128i __a,__m128i __b)4080*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packs_epi16(__m128i __a,
4081*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4082*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_packsswb128((__v8hi)__a, (__v8hi)__b);
4083*bed243d3SAndroid Build Coastguard Worker }
4084*bed243d3SAndroid Build Coastguard Worker
4085*bed243d3SAndroid Build Coastguard Worker /// Converts, with saturation, 32-bit signed integers from both 128-bit integer
4086*bed243d3SAndroid Build Coastguard Worker /// vector operands into 16-bit signed integers, and packs the results into
4087*bed243d3SAndroid Build Coastguard Worker /// the destination.
4088*bed243d3SAndroid Build Coastguard Worker ///
4089*bed243d3SAndroid Build Coastguard Worker /// Positive values greater than 0x7FFF are saturated to 0x7FFF. Negative
4090*bed243d3SAndroid Build Coastguard Worker /// values less than 0x8000 are saturated to 0x8000.
4091*bed243d3SAndroid Build Coastguard Worker ///
4092*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4093*bed243d3SAndroid Build Coastguard Worker ///
4094*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPACKSSDW / PACKSSDW </c> instruction.
4095*bed243d3SAndroid Build Coastguard Worker ///
4096*bed243d3SAndroid Build Coastguard Worker /// \param __a
4097*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [4 x i32]. The converted [4 x i16] values
4098*bed243d3SAndroid Build Coastguard Worker /// are written to the lower 64 bits of the result.
4099*bed243d3SAndroid Build Coastguard Worker /// \param __b
4100*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [4 x i32]. The converted [4 x i16] values
4101*bed243d3SAndroid Build Coastguard Worker /// are written to the higher 64 bits of the result.
4102*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [8 x i16] containing the converted values.
_mm_packs_epi32(__m128i __a,__m128i __b)4103*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packs_epi32(__m128i __a,
4104*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4105*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_packssdw128((__v4si)__a, (__v4si)__b);
4106*bed243d3SAndroid Build Coastguard Worker }
4107*bed243d3SAndroid Build Coastguard Worker
4108*bed243d3SAndroid Build Coastguard Worker /// Converts, with saturation, 16-bit signed integers from both 128-bit integer
4109*bed243d3SAndroid Build Coastguard Worker /// vector operands into 8-bit unsigned integers, and packs the results into
4110*bed243d3SAndroid Build Coastguard Worker /// the destination.
4111*bed243d3SAndroid Build Coastguard Worker ///
4112*bed243d3SAndroid Build Coastguard Worker /// Values greater than 0xFF are saturated to 0xFF. Values less than 0x00
4113*bed243d3SAndroid Build Coastguard Worker /// are saturated to 0x00.
4114*bed243d3SAndroid Build Coastguard Worker ///
4115*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4116*bed243d3SAndroid Build Coastguard Worker ///
4117*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPACKUSWB / PACKUSWB </c> instruction.
4118*bed243d3SAndroid Build Coastguard Worker ///
4119*bed243d3SAndroid Build Coastguard Worker /// \param __a
4120*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4121*bed243d3SAndroid Build Coastguard Worker /// written to the lower 64 bits of the result.
4122*bed243d3SAndroid Build Coastguard Worker /// \param __b
4123*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [8 x i16]. The converted [8 x i8] values are
4124*bed243d3SAndroid Build Coastguard Worker /// written to the higher 64 bits of the result.
4125*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [16 x i8] containing the converted values.
_mm_packus_epi16(__m128i __a,__m128i __b)4126*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_packus_epi16(__m128i __a,
4127*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4128*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_ia32_packuswb128((__v8hi)__a, (__v8hi)__b);
4129*bed243d3SAndroid Build Coastguard Worker }
4130*bed243d3SAndroid Build Coastguard Worker
4131*bed243d3SAndroid Build Coastguard Worker /// Extracts 16 bits from a 128-bit integer vector of [8 x i16], using
4132*bed243d3SAndroid Build Coastguard Worker /// the immediate-value parameter as a selector.
4133*bed243d3SAndroid Build Coastguard Worker ///
4134*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4135*bed243d3SAndroid Build Coastguard Worker ///
4136*bed243d3SAndroid Build Coastguard Worker /// \code
4137*bed243d3SAndroid Build Coastguard Worker /// __m128i _mm_extract_epi16(__m128i a, const int imm);
4138*bed243d3SAndroid Build Coastguard Worker /// \endcode
4139*bed243d3SAndroid Build Coastguard Worker ///
4140*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPEXTRW / PEXTRW </c> instruction.
4141*bed243d3SAndroid Build Coastguard Worker ///
4142*bed243d3SAndroid Build Coastguard Worker /// \param a
4143*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
4144*bed243d3SAndroid Build Coastguard Worker /// \param imm
4145*bed243d3SAndroid Build Coastguard Worker /// An immediate value. Bits [2:0] selects values from \a a to be assigned
4146*bed243d3SAndroid Build Coastguard Worker /// to bits[15:0] of the result. \n
4147*bed243d3SAndroid Build Coastguard Worker /// 000: assign values from bits [15:0] of \a a. \n
4148*bed243d3SAndroid Build Coastguard Worker /// 001: assign values from bits [31:16] of \a a. \n
4149*bed243d3SAndroid Build Coastguard Worker /// 010: assign values from bits [47:32] of \a a. \n
4150*bed243d3SAndroid Build Coastguard Worker /// 011: assign values from bits [63:48] of \a a. \n
4151*bed243d3SAndroid Build Coastguard Worker /// 100: assign values from bits [79:64] of \a a. \n
4152*bed243d3SAndroid Build Coastguard Worker /// 101: assign values from bits [95:80] of \a a. \n
4153*bed243d3SAndroid Build Coastguard Worker /// 110: assign values from bits [111:96] of \a a. \n
4154*bed243d3SAndroid Build Coastguard Worker /// 111: assign values from bits [127:112] of \a a.
4155*bed243d3SAndroid Build Coastguard Worker /// \returns An integer, whose lower 16 bits are selected from the 128-bit
4156*bed243d3SAndroid Build Coastguard Worker /// integer vector parameter and the remaining bits are assigned zeros.
4157*bed243d3SAndroid Build Coastguard Worker #define _mm_extract_epi16(a, imm) \
4158*bed243d3SAndroid Build Coastguard Worker ((int)(unsigned short)__builtin_ia32_vec_ext_v8hi((__v8hi)(__m128i)(a), \
4159*bed243d3SAndroid Build Coastguard Worker (int)(imm)))
4160*bed243d3SAndroid Build Coastguard Worker
4161*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector by first making a copy of the
4162*bed243d3SAndroid Build Coastguard Worker /// 128-bit integer vector parameter, and then inserting the lower 16 bits
4163*bed243d3SAndroid Build Coastguard Worker /// of an integer parameter into an offset specified by the immediate-value
4164*bed243d3SAndroid Build Coastguard Worker /// parameter.
4165*bed243d3SAndroid Build Coastguard Worker ///
4166*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4167*bed243d3SAndroid Build Coastguard Worker ///
4168*bed243d3SAndroid Build Coastguard Worker /// \code
4169*bed243d3SAndroid Build Coastguard Worker /// __m128i _mm_insert_epi16(__m128i a, int b, const int imm);
4170*bed243d3SAndroid Build Coastguard Worker /// \endcode
4171*bed243d3SAndroid Build Coastguard Worker ///
4172*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPINSRW / PINSRW </c> instruction.
4173*bed243d3SAndroid Build Coastguard Worker ///
4174*bed243d3SAndroid Build Coastguard Worker /// \param a
4175*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [8 x i16]. This vector is copied to the
4176*bed243d3SAndroid Build Coastguard Worker /// result and then one of the eight elements in the result is replaced by
4177*bed243d3SAndroid Build Coastguard Worker /// the lower 16 bits of \a b.
4178*bed243d3SAndroid Build Coastguard Worker /// \param b
4179*bed243d3SAndroid Build Coastguard Worker /// An integer. The lower 16 bits of this parameter are written to the
4180*bed243d3SAndroid Build Coastguard Worker /// result beginning at an offset specified by \a imm.
4181*bed243d3SAndroid Build Coastguard Worker /// \param imm
4182*bed243d3SAndroid Build Coastguard Worker /// An immediate value specifying the bit offset in the result at which the
4183*bed243d3SAndroid Build Coastguard Worker /// lower 16 bits of \a b are written.
4184*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the constructed values.
4185*bed243d3SAndroid Build Coastguard Worker #define _mm_insert_epi16(a, b, imm) \
4186*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_vec_set_v8hi((__v8hi)(__m128i)(a), (int)(b), \
4187*bed243d3SAndroid Build Coastguard Worker (int)(imm)))
4188*bed243d3SAndroid Build Coastguard Worker
4189*bed243d3SAndroid Build Coastguard Worker /// Copies the values of the most significant bits from each 8-bit
4190*bed243d3SAndroid Build Coastguard Worker /// element in a 128-bit integer vector of [16 x i8] to create a 16-bit mask
4191*bed243d3SAndroid Build Coastguard Worker /// value, zero-extends the value, and writes it to the destination.
4192*bed243d3SAndroid Build Coastguard Worker ///
4193*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4194*bed243d3SAndroid Build Coastguard Worker ///
4195*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPMOVMSKB / PMOVMSKB </c> instruction.
4196*bed243d3SAndroid Build Coastguard Worker ///
4197*bed243d3SAndroid Build Coastguard Worker /// \param __a
4198*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the values with bits to be extracted.
4199*bed243d3SAndroid Build Coastguard Worker /// \returns The most significant bits from each 8-bit element in \a __a,
4200*bed243d3SAndroid Build Coastguard Worker /// written to bits [15:0]. The other bits are assigned zeros.
_mm_movemask_epi8(__m128i __a)4201*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_movemask_epi8(__m128i __a) {
4202*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_pmovmskb128((__v16qi)__a);
4203*bed243d3SAndroid Build Coastguard Worker }
4204*bed243d3SAndroid Build Coastguard Worker
4205*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector by shuffling four 32-bit
4206*bed243d3SAndroid Build Coastguard Worker /// elements of a 128-bit integer vector parameter, using the immediate-value
4207*bed243d3SAndroid Build Coastguard Worker /// parameter as a specifier.
4208*bed243d3SAndroid Build Coastguard Worker ///
4209*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4210*bed243d3SAndroid Build Coastguard Worker ///
4211*bed243d3SAndroid Build Coastguard Worker /// \code
4212*bed243d3SAndroid Build Coastguard Worker /// __m128i _mm_shuffle_epi32(__m128i a, const int imm);
4213*bed243d3SAndroid Build Coastguard Worker /// \endcode
4214*bed243d3SAndroid Build Coastguard Worker ///
4215*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSHUFD / PSHUFD </c> instruction.
4216*bed243d3SAndroid Build Coastguard Worker ///
4217*bed243d3SAndroid Build Coastguard Worker /// \param a
4218*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector containing the values to be copied.
4219*bed243d3SAndroid Build Coastguard Worker /// \param imm
4220*bed243d3SAndroid Build Coastguard Worker /// An immediate value containing an 8-bit value specifying which elements to
4221*bed243d3SAndroid Build Coastguard Worker /// copy from a. The destinations within the 128-bit destination are assigned
4222*bed243d3SAndroid Build Coastguard Worker /// values as follows: \n
4223*bed243d3SAndroid Build Coastguard Worker /// Bits [1:0] are used to assign values to bits [31:0] of the result. \n
4224*bed243d3SAndroid Build Coastguard Worker /// Bits [3:2] are used to assign values to bits [63:32] of the result. \n
4225*bed243d3SAndroid Build Coastguard Worker /// Bits [5:4] are used to assign values to bits [95:64] of the result. \n
4226*bed243d3SAndroid Build Coastguard Worker /// Bits [7:6] are used to assign values to bits [127:96] of the result. \n
4227*bed243d3SAndroid Build Coastguard Worker /// Bit value assignments: \n
4228*bed243d3SAndroid Build Coastguard Worker /// 00: assign values from bits [31:0] of \a a. \n
4229*bed243d3SAndroid Build Coastguard Worker /// 01: assign values from bits [63:32] of \a a. \n
4230*bed243d3SAndroid Build Coastguard Worker /// 10: assign values from bits [95:64] of \a a. \n
4231*bed243d3SAndroid Build Coastguard Worker /// 11: assign values from bits [127:96] of \a a. \n
4232*bed243d3SAndroid Build Coastguard Worker /// Note: To generate a mask, you can use the \c _MM_SHUFFLE macro.
4233*bed243d3SAndroid Build Coastguard Worker /// <c>_MM_SHUFFLE(b6, b4, b2, b0)</c> can create an 8-bit mask of the form
4234*bed243d3SAndroid Build Coastguard Worker /// <c>[b6, b4, b2, b0]</c>.
4235*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the shuffled values.
4236*bed243d3SAndroid Build Coastguard Worker #define _mm_shuffle_epi32(a, imm) \
4237*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_pshufd((__v4si)(__m128i)(a), (int)(imm)))
4238*bed243d3SAndroid Build Coastguard Worker
4239*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector by shuffling four lower 16-bit
4240*bed243d3SAndroid Build Coastguard Worker /// elements of a 128-bit integer vector of [8 x i16], using the immediate
4241*bed243d3SAndroid Build Coastguard Worker /// value parameter as a specifier.
4242*bed243d3SAndroid Build Coastguard Worker ///
4243*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4244*bed243d3SAndroid Build Coastguard Worker ///
4245*bed243d3SAndroid Build Coastguard Worker /// \code
4246*bed243d3SAndroid Build Coastguard Worker /// __m128i _mm_shufflelo_epi16(__m128i a, const int imm);
4247*bed243d3SAndroid Build Coastguard Worker /// \endcode
4248*bed243d3SAndroid Build Coastguard Worker ///
4249*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSHUFLW / PSHUFLW </c> instruction.
4250*bed243d3SAndroid Build Coastguard Worker ///
4251*bed243d3SAndroid Build Coastguard Worker /// \param a
4252*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [8 x i16]. Bits [127:64] are copied to bits
4253*bed243d3SAndroid Build Coastguard Worker /// [127:64] of the result.
4254*bed243d3SAndroid Build Coastguard Worker /// \param imm
4255*bed243d3SAndroid Build Coastguard Worker /// An 8-bit immediate value specifying which elements to copy from \a a. \n
4256*bed243d3SAndroid Build Coastguard Worker /// Bits[1:0] are used to assign values to bits [15:0] of the result. \n
4257*bed243d3SAndroid Build Coastguard Worker /// Bits[3:2] are used to assign values to bits [31:16] of the result. \n
4258*bed243d3SAndroid Build Coastguard Worker /// Bits[5:4] are used to assign values to bits [47:32] of the result. \n
4259*bed243d3SAndroid Build Coastguard Worker /// Bits[7:6] are used to assign values to bits [63:48] of the result. \n
4260*bed243d3SAndroid Build Coastguard Worker /// Bit value assignments: \n
4261*bed243d3SAndroid Build Coastguard Worker /// 00: assign values from bits [15:0] of \a a. \n
4262*bed243d3SAndroid Build Coastguard Worker /// 01: assign values from bits [31:16] of \a a. \n
4263*bed243d3SAndroid Build Coastguard Worker /// 10: assign values from bits [47:32] of \a a. \n
4264*bed243d3SAndroid Build Coastguard Worker /// 11: assign values from bits [63:48] of \a a. \n
4265*bed243d3SAndroid Build Coastguard Worker /// Note: To generate a mask, you can use the \c _MM_SHUFFLE macro.
4266*bed243d3SAndroid Build Coastguard Worker /// <c>_MM_SHUFFLE(b6, b4, b2, b0)</c> can create an 8-bit mask of the form
4267*bed243d3SAndroid Build Coastguard Worker /// <c>[b6, b4, b2, b0]</c>.
4268*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the shuffled values.
4269*bed243d3SAndroid Build Coastguard Worker #define _mm_shufflelo_epi16(a, imm) \
4270*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_pshuflw((__v8hi)(__m128i)(a), (int)(imm)))
4271*bed243d3SAndroid Build Coastguard Worker
4272*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit integer vector by shuffling four upper 16-bit
4273*bed243d3SAndroid Build Coastguard Worker /// elements of a 128-bit integer vector of [8 x i16], using the immediate
4274*bed243d3SAndroid Build Coastguard Worker /// value parameter as a specifier.
4275*bed243d3SAndroid Build Coastguard Worker ///
4276*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4277*bed243d3SAndroid Build Coastguard Worker ///
4278*bed243d3SAndroid Build Coastguard Worker /// \code
4279*bed243d3SAndroid Build Coastguard Worker /// __m128i _mm_shufflehi_epi16(__m128i a, const int imm);
4280*bed243d3SAndroid Build Coastguard Worker /// \endcode
4281*bed243d3SAndroid Build Coastguard Worker ///
4282*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPSHUFHW / PSHUFHW </c> instruction.
4283*bed243d3SAndroid Build Coastguard Worker ///
4284*bed243d3SAndroid Build Coastguard Worker /// \param a
4285*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector of [8 x i16]. Bits [63:0] are copied to bits
4286*bed243d3SAndroid Build Coastguard Worker /// [63:0] of the result.
4287*bed243d3SAndroid Build Coastguard Worker /// \param imm
4288*bed243d3SAndroid Build Coastguard Worker /// An 8-bit immediate value specifying which elements to copy from \a a. \n
4289*bed243d3SAndroid Build Coastguard Worker /// Bits[1:0] are used to assign values to bits [79:64] of the result. \n
4290*bed243d3SAndroid Build Coastguard Worker /// Bits[3:2] are used to assign values to bits [95:80] of the result. \n
4291*bed243d3SAndroid Build Coastguard Worker /// Bits[5:4] are used to assign values to bits [111:96] of the result. \n
4292*bed243d3SAndroid Build Coastguard Worker /// Bits[7:6] are used to assign values to bits [127:112] of the result. \n
4293*bed243d3SAndroid Build Coastguard Worker /// Bit value assignments: \n
4294*bed243d3SAndroid Build Coastguard Worker /// 00: assign values from bits [79:64] of \a a. \n
4295*bed243d3SAndroid Build Coastguard Worker /// 01: assign values from bits [95:80] of \a a. \n
4296*bed243d3SAndroid Build Coastguard Worker /// 10: assign values from bits [111:96] of \a a. \n
4297*bed243d3SAndroid Build Coastguard Worker /// 11: assign values from bits [127:112] of \a a. \n
4298*bed243d3SAndroid Build Coastguard Worker /// Note: To generate a mask, you can use the \c _MM_SHUFFLE macro.
4299*bed243d3SAndroid Build Coastguard Worker /// <c>_MM_SHUFFLE(b6, b4, b2, b0)</c> can create an 8-bit mask of the form
4300*bed243d3SAndroid Build Coastguard Worker /// <c>[b6, b4, b2, b0]</c>.
4301*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the shuffled values.
4302*bed243d3SAndroid Build Coastguard Worker #define _mm_shufflehi_epi16(a, imm) \
4303*bed243d3SAndroid Build Coastguard Worker ((__m128i)__builtin_ia32_pshufhw((__v8hi)(__m128i)(a), (int)(imm)))
4304*bed243d3SAndroid Build Coastguard Worker
4305*bed243d3SAndroid Build Coastguard Worker /// Unpacks the high-order (index 8-15) values from two 128-bit vectors
4306*bed243d3SAndroid Build Coastguard Worker /// of [16 x i8] and interleaves them into a 128-bit vector of [16 x i8].
4307*bed243d3SAndroid Build Coastguard Worker ///
4308*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4309*bed243d3SAndroid Build Coastguard Worker ///
4310*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKHBW / PUNPCKHBW </c>
4311*bed243d3SAndroid Build Coastguard Worker /// instruction.
4312*bed243d3SAndroid Build Coastguard Worker ///
4313*bed243d3SAndroid Build Coastguard Worker /// \param __a
4314*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [16 x i8].
4315*bed243d3SAndroid Build Coastguard Worker /// Bits [71:64] are written to bits [7:0] of the result. \n
4316*bed243d3SAndroid Build Coastguard Worker /// Bits [79:72] are written to bits [23:16] of the result. \n
4317*bed243d3SAndroid Build Coastguard Worker /// Bits [87:80] are written to bits [39:32] of the result. \n
4318*bed243d3SAndroid Build Coastguard Worker /// Bits [95:88] are written to bits [55:48] of the result. \n
4319*bed243d3SAndroid Build Coastguard Worker /// Bits [103:96] are written to bits [71:64] of the result. \n
4320*bed243d3SAndroid Build Coastguard Worker /// Bits [111:104] are written to bits [87:80] of the result. \n
4321*bed243d3SAndroid Build Coastguard Worker /// Bits [119:112] are written to bits [103:96] of the result. \n
4322*bed243d3SAndroid Build Coastguard Worker /// Bits [127:120] are written to bits [119:112] of the result.
4323*bed243d3SAndroid Build Coastguard Worker /// \param __b
4324*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [16 x i8]. \n
4325*bed243d3SAndroid Build Coastguard Worker /// Bits [71:64] are written to bits [15:8] of the result. \n
4326*bed243d3SAndroid Build Coastguard Worker /// Bits [79:72] are written to bits [31:24] of the result. \n
4327*bed243d3SAndroid Build Coastguard Worker /// Bits [87:80] are written to bits [47:40] of the result. \n
4328*bed243d3SAndroid Build Coastguard Worker /// Bits [95:88] are written to bits [63:56] of the result. \n
4329*bed243d3SAndroid Build Coastguard Worker /// Bits [103:96] are written to bits [79:72] of the result. \n
4330*bed243d3SAndroid Build Coastguard Worker /// Bits [111:104] are written to bits [95:88] of the result. \n
4331*bed243d3SAndroid Build Coastguard Worker /// Bits [119:112] are written to bits [111:104] of the result. \n
4332*bed243d3SAndroid Build Coastguard Worker /// Bits [127:120] are written to bits [127:120] of the result.
4333*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [16 x i8] containing the interleaved values.
_mm_unpackhi_epi8(__m128i __a,__m128i __b)4334*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpackhi_epi8(__m128i __a,
4335*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4336*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector(
4337*bed243d3SAndroid Build Coastguard Worker (__v16qi)__a, (__v16qi)__b, 8, 16 + 8, 9, 16 + 9, 10, 16 + 10, 11,
4338*bed243d3SAndroid Build Coastguard Worker 16 + 11, 12, 16 + 12, 13, 16 + 13, 14, 16 + 14, 15, 16 + 15);
4339*bed243d3SAndroid Build Coastguard Worker }
4340*bed243d3SAndroid Build Coastguard Worker
4341*bed243d3SAndroid Build Coastguard Worker /// Unpacks the high-order (index 4-7) values from two 128-bit vectors of
4342*bed243d3SAndroid Build Coastguard Worker /// [8 x i16] and interleaves them into a 128-bit vector of [8 x i16].
4343*bed243d3SAndroid Build Coastguard Worker ///
4344*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4345*bed243d3SAndroid Build Coastguard Worker ///
4346*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKHWD / PUNPCKHWD </c>
4347*bed243d3SAndroid Build Coastguard Worker /// instruction.
4348*bed243d3SAndroid Build Coastguard Worker ///
4349*bed243d3SAndroid Build Coastguard Worker /// \param __a
4350*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [8 x i16].
4351*bed243d3SAndroid Build Coastguard Worker /// Bits [79:64] are written to bits [15:0] of the result. \n
4352*bed243d3SAndroid Build Coastguard Worker /// Bits [95:80] are written to bits [47:32] of the result. \n
4353*bed243d3SAndroid Build Coastguard Worker /// Bits [111:96] are written to bits [79:64] of the result. \n
4354*bed243d3SAndroid Build Coastguard Worker /// Bits [127:112] are written to bits [111:96] of the result.
4355*bed243d3SAndroid Build Coastguard Worker /// \param __b
4356*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [8 x i16].
4357*bed243d3SAndroid Build Coastguard Worker /// Bits [79:64] are written to bits [31:16] of the result. \n
4358*bed243d3SAndroid Build Coastguard Worker /// Bits [95:80] are written to bits [63:48] of the result. \n
4359*bed243d3SAndroid Build Coastguard Worker /// Bits [111:96] are written to bits [95:80] of the result. \n
4360*bed243d3SAndroid Build Coastguard Worker /// Bits [127:112] are written to bits [127:112] of the result.
4361*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [8 x i16] containing the interleaved values.
_mm_unpackhi_epi16(__m128i __a,__m128i __b)4362*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpackhi_epi16(__m128i __a,
4363*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4364*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 4, 8 + 4, 5,
4365*bed243d3SAndroid Build Coastguard Worker 8 + 5, 6, 8 + 6, 7, 8 + 7);
4366*bed243d3SAndroid Build Coastguard Worker }
4367*bed243d3SAndroid Build Coastguard Worker
4368*bed243d3SAndroid Build Coastguard Worker /// Unpacks the high-order (index 2,3) values from two 128-bit vectors of
4369*bed243d3SAndroid Build Coastguard Worker /// [4 x i32] and interleaves them into a 128-bit vector of [4 x i32].
4370*bed243d3SAndroid Build Coastguard Worker ///
4371*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4372*bed243d3SAndroid Build Coastguard Worker ///
4373*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKHDQ / PUNPCKHDQ </c>
4374*bed243d3SAndroid Build Coastguard Worker /// instruction.
4375*bed243d3SAndroid Build Coastguard Worker ///
4376*bed243d3SAndroid Build Coastguard Worker /// \param __a
4377*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x i32]. \n
4378*bed243d3SAndroid Build Coastguard Worker /// Bits [95:64] are written to bits [31:0] of the destination. \n
4379*bed243d3SAndroid Build Coastguard Worker /// Bits [127:96] are written to bits [95:64] of the destination.
4380*bed243d3SAndroid Build Coastguard Worker /// \param __b
4381*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x i32]. \n
4382*bed243d3SAndroid Build Coastguard Worker /// Bits [95:64] are written to bits [64:32] of the destination. \n
4383*bed243d3SAndroid Build Coastguard Worker /// Bits [127:96] are written to bits [127:96] of the destination.
4384*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] containing the interleaved values.
_mm_unpackhi_epi32(__m128i __a,__m128i __b)4385*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpackhi_epi32(__m128i __a,
4386*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4387*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 2, 4 + 2, 3,
4388*bed243d3SAndroid Build Coastguard Worker 4 + 3);
4389*bed243d3SAndroid Build Coastguard Worker }
4390*bed243d3SAndroid Build Coastguard Worker
4391*bed243d3SAndroid Build Coastguard Worker /// Unpacks the high-order 64-bit elements from two 128-bit vectors of
4392*bed243d3SAndroid Build Coastguard Worker /// [2 x i64] and interleaves them into a 128-bit vector of [2 x i64].
4393*bed243d3SAndroid Build Coastguard Worker ///
4394*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4395*bed243d3SAndroid Build Coastguard Worker ///
4396*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKHQDQ / PUNPCKHQDQ </c>
4397*bed243d3SAndroid Build Coastguard Worker /// instruction.
4398*bed243d3SAndroid Build Coastguard Worker ///
4399*bed243d3SAndroid Build Coastguard Worker /// \param __a
4400*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64]. \n
4401*bed243d3SAndroid Build Coastguard Worker /// Bits [127:64] are written to bits [63:0] of the destination.
4402*bed243d3SAndroid Build Coastguard Worker /// \param __b
4403*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64]. \n
4404*bed243d3SAndroid Build Coastguard Worker /// Bits [127:64] are written to bits [127:64] of the destination.
4405*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64] containing the interleaved values.
_mm_unpackhi_epi64(__m128i __a,__m128i __b)4406*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpackhi_epi64(__m128i __a,
4407*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4408*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v2di)__a, (__v2di)__b, 1, 2 + 1);
4409*bed243d3SAndroid Build Coastguard Worker }
4410*bed243d3SAndroid Build Coastguard Worker
4411*bed243d3SAndroid Build Coastguard Worker /// Unpacks the low-order (index 0-7) values from two 128-bit vectors of
4412*bed243d3SAndroid Build Coastguard Worker /// [16 x i8] and interleaves them into a 128-bit vector of [16 x i8].
4413*bed243d3SAndroid Build Coastguard Worker ///
4414*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4415*bed243d3SAndroid Build Coastguard Worker ///
4416*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKLBW / PUNPCKLBW </c>
4417*bed243d3SAndroid Build Coastguard Worker /// instruction.
4418*bed243d3SAndroid Build Coastguard Worker ///
4419*bed243d3SAndroid Build Coastguard Worker /// \param __a
4420*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [16 x i8]. \n
4421*bed243d3SAndroid Build Coastguard Worker /// Bits [7:0] are written to bits [7:0] of the result. \n
4422*bed243d3SAndroid Build Coastguard Worker /// Bits [15:8] are written to bits [23:16] of the result. \n
4423*bed243d3SAndroid Build Coastguard Worker /// Bits [23:16] are written to bits [39:32] of the result. \n
4424*bed243d3SAndroid Build Coastguard Worker /// Bits [31:24] are written to bits [55:48] of the result. \n
4425*bed243d3SAndroid Build Coastguard Worker /// Bits [39:32] are written to bits [71:64] of the result. \n
4426*bed243d3SAndroid Build Coastguard Worker /// Bits [47:40] are written to bits [87:80] of the result. \n
4427*bed243d3SAndroid Build Coastguard Worker /// Bits [55:48] are written to bits [103:96] of the result. \n
4428*bed243d3SAndroid Build Coastguard Worker /// Bits [63:56] are written to bits [119:112] of the result.
4429*bed243d3SAndroid Build Coastguard Worker /// \param __b
4430*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [16 x i8].
4431*bed243d3SAndroid Build Coastguard Worker /// Bits [7:0] are written to bits [15:8] of the result. \n
4432*bed243d3SAndroid Build Coastguard Worker /// Bits [15:8] are written to bits [31:24] of the result. \n
4433*bed243d3SAndroid Build Coastguard Worker /// Bits [23:16] are written to bits [47:40] of the result. \n
4434*bed243d3SAndroid Build Coastguard Worker /// Bits [31:24] are written to bits [63:56] of the result. \n
4435*bed243d3SAndroid Build Coastguard Worker /// Bits [39:32] are written to bits [79:72] of the result. \n
4436*bed243d3SAndroid Build Coastguard Worker /// Bits [47:40] are written to bits [95:88] of the result. \n
4437*bed243d3SAndroid Build Coastguard Worker /// Bits [55:48] are written to bits [111:104] of the result. \n
4438*bed243d3SAndroid Build Coastguard Worker /// Bits [63:56] are written to bits [127:120] of the result.
4439*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [16 x i8] containing the interleaved values.
_mm_unpacklo_epi8(__m128i __a,__m128i __b)4440*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpacklo_epi8(__m128i __a,
4441*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4442*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector(
4443*bed243d3SAndroid Build Coastguard Worker (__v16qi)__a, (__v16qi)__b, 0, 16 + 0, 1, 16 + 1, 2, 16 + 2, 3, 16 + 3, 4,
4444*bed243d3SAndroid Build Coastguard Worker 16 + 4, 5, 16 + 5, 6, 16 + 6, 7, 16 + 7);
4445*bed243d3SAndroid Build Coastguard Worker }
4446*bed243d3SAndroid Build Coastguard Worker
4447*bed243d3SAndroid Build Coastguard Worker /// Unpacks the low-order (index 0-3) values from each of the two 128-bit
4448*bed243d3SAndroid Build Coastguard Worker /// vectors of [8 x i16] and interleaves them into a 128-bit vector of
4449*bed243d3SAndroid Build Coastguard Worker /// [8 x i16].
4450*bed243d3SAndroid Build Coastguard Worker ///
4451*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4452*bed243d3SAndroid Build Coastguard Worker ///
4453*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKLWD / PUNPCKLWD </c>
4454*bed243d3SAndroid Build Coastguard Worker /// instruction.
4455*bed243d3SAndroid Build Coastguard Worker ///
4456*bed243d3SAndroid Build Coastguard Worker /// \param __a
4457*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [8 x i16].
4458*bed243d3SAndroid Build Coastguard Worker /// Bits [15:0] are written to bits [15:0] of the result. \n
4459*bed243d3SAndroid Build Coastguard Worker /// Bits [31:16] are written to bits [47:32] of the result. \n
4460*bed243d3SAndroid Build Coastguard Worker /// Bits [47:32] are written to bits [79:64] of the result. \n
4461*bed243d3SAndroid Build Coastguard Worker /// Bits [63:48] are written to bits [111:96] of the result.
4462*bed243d3SAndroid Build Coastguard Worker /// \param __b
4463*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [8 x i16].
4464*bed243d3SAndroid Build Coastguard Worker /// Bits [15:0] are written to bits [31:16] of the result. \n
4465*bed243d3SAndroid Build Coastguard Worker /// Bits [31:16] are written to bits [63:48] of the result. \n
4466*bed243d3SAndroid Build Coastguard Worker /// Bits [47:32] are written to bits [95:80] of the result. \n
4467*bed243d3SAndroid Build Coastguard Worker /// Bits [63:48] are written to bits [127:112] of the result.
4468*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [8 x i16] containing the interleaved values.
_mm_unpacklo_epi16(__m128i __a,__m128i __b)4469*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpacklo_epi16(__m128i __a,
4470*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4471*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 0, 8 + 0, 1,
4472*bed243d3SAndroid Build Coastguard Worker 8 + 1, 2, 8 + 2, 3, 8 + 3);
4473*bed243d3SAndroid Build Coastguard Worker }
4474*bed243d3SAndroid Build Coastguard Worker
4475*bed243d3SAndroid Build Coastguard Worker /// Unpacks the low-order (index 0,1) values from two 128-bit vectors of
4476*bed243d3SAndroid Build Coastguard Worker /// [4 x i32] and interleaves them into a 128-bit vector of [4 x i32].
4477*bed243d3SAndroid Build Coastguard Worker ///
4478*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4479*bed243d3SAndroid Build Coastguard Worker ///
4480*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKLDQ / PUNPCKLDQ </c>
4481*bed243d3SAndroid Build Coastguard Worker /// instruction.
4482*bed243d3SAndroid Build Coastguard Worker ///
4483*bed243d3SAndroid Build Coastguard Worker /// \param __a
4484*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x i32]. \n
4485*bed243d3SAndroid Build Coastguard Worker /// Bits [31:0] are written to bits [31:0] of the destination. \n
4486*bed243d3SAndroid Build Coastguard Worker /// Bits [63:32] are written to bits [95:64] of the destination.
4487*bed243d3SAndroid Build Coastguard Worker /// \param __b
4488*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [4 x i32]. \n
4489*bed243d3SAndroid Build Coastguard Worker /// Bits [31:0] are written to bits [64:32] of the destination. \n
4490*bed243d3SAndroid Build Coastguard Worker /// Bits [63:32] are written to bits [127:96] of the destination.
4491*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [4 x i32] containing the interleaved values.
_mm_unpacklo_epi32(__m128i __a,__m128i __b)4492*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpacklo_epi32(__m128i __a,
4493*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4494*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 0, 4 + 0, 1,
4495*bed243d3SAndroid Build Coastguard Worker 4 + 1);
4496*bed243d3SAndroid Build Coastguard Worker }
4497*bed243d3SAndroid Build Coastguard Worker
4498*bed243d3SAndroid Build Coastguard Worker /// Unpacks the low-order 64-bit elements from two 128-bit vectors of
4499*bed243d3SAndroid Build Coastguard Worker /// [2 x i64] and interleaves them into a 128-bit vector of [2 x i64].
4500*bed243d3SAndroid Build Coastguard Worker ///
4501*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4502*bed243d3SAndroid Build Coastguard Worker ///
4503*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VPUNPCKLQDQ / PUNPCKLQDQ </c>
4504*bed243d3SAndroid Build Coastguard Worker /// instruction.
4505*bed243d3SAndroid Build Coastguard Worker ///
4506*bed243d3SAndroid Build Coastguard Worker /// \param __a
4507*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64]. \n
4508*bed243d3SAndroid Build Coastguard Worker /// Bits [63:0] are written to bits [63:0] of the destination. \n
4509*bed243d3SAndroid Build Coastguard Worker /// \param __b
4510*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x i64]. \n
4511*bed243d3SAndroid Build Coastguard Worker /// Bits [63:0] are written to bits [127:64] of the destination. \n
4512*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x i64] containing the interleaved values.
_mm_unpacklo_epi64(__m128i __a,__m128i __b)4513*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_unpacklo_epi64(__m128i __a,
4514*bed243d3SAndroid Build Coastguard Worker __m128i __b) {
4515*bed243d3SAndroid Build Coastguard Worker return (__m128i)__builtin_shufflevector((__v2di)__a, (__v2di)__b, 0, 2 + 0);
4516*bed243d3SAndroid Build Coastguard Worker }
4517*bed243d3SAndroid Build Coastguard Worker
4518*bed243d3SAndroid Build Coastguard Worker /// Returns the lower 64 bits of a 128-bit integer vector as a 64-bit
4519*bed243d3SAndroid Build Coastguard Worker /// integer.
4520*bed243d3SAndroid Build Coastguard Worker ///
4521*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4522*bed243d3SAndroid Build Coastguard Worker ///
4523*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> MOVDQ2Q </c> instruction.
4524*bed243d3SAndroid Build Coastguard Worker ///
4525*bed243d3SAndroid Build Coastguard Worker /// \param __a
4526*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector operand. The lower 64 bits are moved to the
4527*bed243d3SAndroid Build Coastguard Worker /// destination.
4528*bed243d3SAndroid Build Coastguard Worker /// \returns A 64-bit integer containing the lower 64 bits of the parameter.
_mm_movepi64_pi64(__m128i __a)4529*bed243d3SAndroid Build Coastguard Worker static __inline__ __m64 __DEFAULT_FN_ATTRS _mm_movepi64_pi64(__m128i __a) {
4530*bed243d3SAndroid Build Coastguard Worker return (__m64)__a[0];
4531*bed243d3SAndroid Build Coastguard Worker }
4532*bed243d3SAndroid Build Coastguard Worker
4533*bed243d3SAndroid Build Coastguard Worker /// Moves the 64-bit operand to a 128-bit integer vector, zeroing the
4534*bed243d3SAndroid Build Coastguard Worker /// upper bits.
4535*bed243d3SAndroid Build Coastguard Worker ///
4536*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4537*bed243d3SAndroid Build Coastguard Worker ///
4538*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> MOVD+VMOVQ </c> instruction.
4539*bed243d3SAndroid Build Coastguard Worker ///
4540*bed243d3SAndroid Build Coastguard Worker /// \param __a
4541*bed243d3SAndroid Build Coastguard Worker /// A 64-bit value.
4542*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector. The lower 64 bits contain the value from
4543*bed243d3SAndroid Build Coastguard Worker /// the operand. The upper 64 bits are assigned zeros.
_mm_movpi64_epi64(__m64 __a)4544*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_movpi64_epi64(__m64 __a) {
4545*bed243d3SAndroid Build Coastguard Worker return __extension__(__m128i)(__v2di){(long long)__a, 0};
4546*bed243d3SAndroid Build Coastguard Worker }
4547*bed243d3SAndroid Build Coastguard Worker
4548*bed243d3SAndroid Build Coastguard Worker /// Moves the lower 64 bits of a 128-bit integer vector to a 128-bit
4549*bed243d3SAndroid Build Coastguard Worker /// integer vector, zeroing the upper bits.
4550*bed243d3SAndroid Build Coastguard Worker ///
4551*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4552*bed243d3SAndroid Build Coastguard Worker ///
4553*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVQ / MOVQ </c> instruction.
4554*bed243d3SAndroid Build Coastguard Worker ///
4555*bed243d3SAndroid Build Coastguard Worker /// \param __a
4556*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector operand. The lower 64 bits are moved to the
4557*bed243d3SAndroid Build Coastguard Worker /// destination.
4558*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector. The lower 64 bits contain the value from
4559*bed243d3SAndroid Build Coastguard Worker /// the operand. The upper 64 bits are assigned zeros.
_mm_move_epi64(__m128i __a)4560*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_move_epi64(__m128i __a) {
4561*bed243d3SAndroid Build Coastguard Worker return __builtin_shufflevector((__v2di)__a, _mm_setzero_si128(), 0, 2);
4562*bed243d3SAndroid Build Coastguard Worker }
4563*bed243d3SAndroid Build Coastguard Worker
4564*bed243d3SAndroid Build Coastguard Worker /// Unpacks the high-order 64-bit elements from two 128-bit vectors of
4565*bed243d3SAndroid Build Coastguard Worker /// [2 x double] and interleaves them into a 128-bit vector of [2 x
4566*bed243d3SAndroid Build Coastguard Worker /// double].
4567*bed243d3SAndroid Build Coastguard Worker ///
4568*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4569*bed243d3SAndroid Build Coastguard Worker ///
4570*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUNPCKHPD / UNPCKHPD </c> instruction.
4571*bed243d3SAndroid Build Coastguard Worker ///
4572*bed243d3SAndroid Build Coastguard Worker /// \param __a
4573*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. \n
4574*bed243d3SAndroid Build Coastguard Worker /// Bits [127:64] are written to bits [63:0] of the destination.
4575*bed243d3SAndroid Build Coastguard Worker /// \param __b
4576*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. \n
4577*bed243d3SAndroid Build Coastguard Worker /// Bits [127:64] are written to bits [127:64] of the destination.
4578*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the interleaved values.
_mm_unpackhi_pd(__m128d __a,__m128d __b)4579*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_unpackhi_pd(__m128d __a,
4580*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
4581*bed243d3SAndroid Build Coastguard Worker return __builtin_shufflevector((__v2df)__a, (__v2df)__b, 1, 2 + 1);
4582*bed243d3SAndroid Build Coastguard Worker }
4583*bed243d3SAndroid Build Coastguard Worker
4584*bed243d3SAndroid Build Coastguard Worker /// Unpacks the low-order 64-bit elements from two 128-bit vectors
4585*bed243d3SAndroid Build Coastguard Worker /// of [2 x double] and interleaves them into a 128-bit vector of [2 x
4586*bed243d3SAndroid Build Coastguard Worker /// double].
4587*bed243d3SAndroid Build Coastguard Worker ///
4588*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4589*bed243d3SAndroid Build Coastguard Worker ///
4590*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VUNPCKLPD / UNPCKLPD </c> instruction.
4591*bed243d3SAndroid Build Coastguard Worker ///
4592*bed243d3SAndroid Build Coastguard Worker /// \param __a
4593*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. \n
4594*bed243d3SAndroid Build Coastguard Worker /// Bits [63:0] are written to bits [63:0] of the destination.
4595*bed243d3SAndroid Build Coastguard Worker /// \param __b
4596*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double]. \n
4597*bed243d3SAndroid Build Coastguard Worker /// Bits [63:0] are written to bits [127:64] of the destination.
4598*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the interleaved values.
_mm_unpacklo_pd(__m128d __a,__m128d __b)4599*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_unpacklo_pd(__m128d __a,
4600*bed243d3SAndroid Build Coastguard Worker __m128d __b) {
4601*bed243d3SAndroid Build Coastguard Worker return __builtin_shufflevector((__v2df)__a, (__v2df)__b, 0, 2 + 0);
4602*bed243d3SAndroid Build Coastguard Worker }
4603*bed243d3SAndroid Build Coastguard Worker
4604*bed243d3SAndroid Build Coastguard Worker /// Extracts the sign bits of the double-precision values in the 128-bit
4605*bed243d3SAndroid Build Coastguard Worker /// vector of [2 x double], zero-extends the value, and writes it to the
4606*bed243d3SAndroid Build Coastguard Worker /// low-order bits of the destination.
4607*bed243d3SAndroid Build Coastguard Worker ///
4608*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4609*bed243d3SAndroid Build Coastguard Worker ///
4610*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VMOVMSKPD / MOVMSKPD </c> instruction.
4611*bed243d3SAndroid Build Coastguard Worker ///
4612*bed243d3SAndroid Build Coastguard Worker /// \param __a
4613*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double] containing the values with sign bits to
4614*bed243d3SAndroid Build Coastguard Worker /// be extracted.
4615*bed243d3SAndroid Build Coastguard Worker /// \returns The sign bits from each of the double-precision elements in \a __a,
4616*bed243d3SAndroid Build Coastguard Worker /// written to bits [1:0]. The remaining bits are assigned values of zero.
_mm_movemask_pd(__m128d __a)4617*bed243d3SAndroid Build Coastguard Worker static __inline__ int __DEFAULT_FN_ATTRS _mm_movemask_pd(__m128d __a) {
4618*bed243d3SAndroid Build Coastguard Worker return __builtin_ia32_movmskpd((__v2df)__a);
4619*bed243d3SAndroid Build Coastguard Worker }
4620*bed243d3SAndroid Build Coastguard Worker
4621*bed243d3SAndroid Build Coastguard Worker /// Constructs a 128-bit floating-point vector of [2 x double] from two
4622*bed243d3SAndroid Build Coastguard Worker /// 128-bit vector parameters of [2 x double], using the immediate-value
4623*bed243d3SAndroid Build Coastguard Worker /// parameter as a specifier.
4624*bed243d3SAndroid Build Coastguard Worker ///
4625*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4626*bed243d3SAndroid Build Coastguard Worker ///
4627*bed243d3SAndroid Build Coastguard Worker /// \code
4628*bed243d3SAndroid Build Coastguard Worker /// __m128d _mm_shuffle_pd(__m128d a, __m128d b, const int i);
4629*bed243d3SAndroid Build Coastguard Worker /// \endcode
4630*bed243d3SAndroid Build Coastguard Worker ///
4631*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> VSHUFPD / SHUFPD </c> instruction.
4632*bed243d3SAndroid Build Coastguard Worker ///
4633*bed243d3SAndroid Build Coastguard Worker /// \param a
4634*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
4635*bed243d3SAndroid Build Coastguard Worker /// \param b
4636*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
4637*bed243d3SAndroid Build Coastguard Worker /// \param i
4638*bed243d3SAndroid Build Coastguard Worker /// An 8-bit immediate value. The least significant two bits specify which
4639*bed243d3SAndroid Build Coastguard Worker /// elements to copy from \a a and \a b: \n
4640*bed243d3SAndroid Build Coastguard Worker /// Bit[0] = 0: lower element of \a a copied to lower element of result. \n
4641*bed243d3SAndroid Build Coastguard Worker /// Bit[0] = 1: upper element of \a a copied to lower element of result. \n
4642*bed243d3SAndroid Build Coastguard Worker /// Bit[1] = 0: lower element of \a b copied to upper element of result. \n
4643*bed243d3SAndroid Build Coastguard Worker /// Bit[1] = 1: upper element of \a b copied to upper element of result. \n
4644*bed243d3SAndroid Build Coastguard Worker /// Note: To generate a mask, you can use the \c _MM_SHUFFLE2 macro.
4645*bed243d3SAndroid Build Coastguard Worker /// <c>_MM_SHUFFLE2(b1, b0)</c> can create a 2-bit mask of the form
4646*bed243d3SAndroid Build Coastguard Worker /// <c>[b1, b0]</c>.
4647*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the shuffled values.
4648*bed243d3SAndroid Build Coastguard Worker #define _mm_shuffle_pd(a, b, i) \
4649*bed243d3SAndroid Build Coastguard Worker ((__m128d)__builtin_ia32_shufpd((__v2df)(__m128d)(a), (__v2df)(__m128d)(b), \
4650*bed243d3SAndroid Build Coastguard Worker (int)(i)))
4651*bed243d3SAndroid Build Coastguard Worker
4652*bed243d3SAndroid Build Coastguard Worker /// Casts a 128-bit floating-point vector of [2 x double] into a 128-bit
4653*bed243d3SAndroid Build Coastguard Worker /// floating-point vector of [4 x float].
4654*bed243d3SAndroid Build Coastguard Worker ///
4655*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4656*bed243d3SAndroid Build Coastguard Worker ///
4657*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
4658*bed243d3SAndroid Build Coastguard Worker ///
4659*bed243d3SAndroid Build Coastguard Worker /// \param __a
4660*bed243d3SAndroid Build Coastguard Worker /// A 128-bit floating-point vector of [2 x double].
4661*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit floating-point vector of [4 x float] containing the same
4662*bed243d3SAndroid Build Coastguard Worker /// bitwise pattern as the parameter.
_mm_castpd_ps(__m128d __a)4663*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_castpd_ps(__m128d __a) {
4664*bed243d3SAndroid Build Coastguard Worker return (__m128)__a;
4665*bed243d3SAndroid Build Coastguard Worker }
4666*bed243d3SAndroid Build Coastguard Worker
4667*bed243d3SAndroid Build Coastguard Worker /// Casts a 128-bit floating-point vector of [2 x double] into a 128-bit
4668*bed243d3SAndroid Build Coastguard Worker /// integer vector.
4669*bed243d3SAndroid Build Coastguard Worker ///
4670*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4671*bed243d3SAndroid Build Coastguard Worker ///
4672*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
4673*bed243d3SAndroid Build Coastguard Worker ///
4674*bed243d3SAndroid Build Coastguard Worker /// \param __a
4675*bed243d3SAndroid Build Coastguard Worker /// A 128-bit floating-point vector of [2 x double].
4676*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the same bitwise pattern as the
4677*bed243d3SAndroid Build Coastguard Worker /// parameter.
_mm_castpd_si128(__m128d __a)4678*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_castpd_si128(__m128d __a) {
4679*bed243d3SAndroid Build Coastguard Worker return (__m128i)__a;
4680*bed243d3SAndroid Build Coastguard Worker }
4681*bed243d3SAndroid Build Coastguard Worker
4682*bed243d3SAndroid Build Coastguard Worker /// Casts a 128-bit floating-point vector of [4 x float] into a 128-bit
4683*bed243d3SAndroid Build Coastguard Worker /// floating-point vector of [2 x double].
4684*bed243d3SAndroid Build Coastguard Worker ///
4685*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4686*bed243d3SAndroid Build Coastguard Worker ///
4687*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
4688*bed243d3SAndroid Build Coastguard Worker ///
4689*bed243d3SAndroid Build Coastguard Worker /// \param __a
4690*bed243d3SAndroid Build Coastguard Worker /// A 128-bit floating-point vector of [4 x float].
4691*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit floating-point vector of [2 x double] containing the same
4692*bed243d3SAndroid Build Coastguard Worker /// bitwise pattern as the parameter.
_mm_castps_pd(__m128 __a)4693*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_castps_pd(__m128 __a) {
4694*bed243d3SAndroid Build Coastguard Worker return (__m128d)__a;
4695*bed243d3SAndroid Build Coastguard Worker }
4696*bed243d3SAndroid Build Coastguard Worker
4697*bed243d3SAndroid Build Coastguard Worker /// Casts a 128-bit floating-point vector of [4 x float] into a 128-bit
4698*bed243d3SAndroid Build Coastguard Worker /// integer vector.
4699*bed243d3SAndroid Build Coastguard Worker ///
4700*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4701*bed243d3SAndroid Build Coastguard Worker ///
4702*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
4703*bed243d3SAndroid Build Coastguard Worker ///
4704*bed243d3SAndroid Build Coastguard Worker /// \param __a
4705*bed243d3SAndroid Build Coastguard Worker /// A 128-bit floating-point vector of [4 x float].
4706*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit integer vector containing the same bitwise pattern as the
4707*bed243d3SAndroid Build Coastguard Worker /// parameter.
_mm_castps_si128(__m128 __a)4708*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_castps_si128(__m128 __a) {
4709*bed243d3SAndroid Build Coastguard Worker return (__m128i)__a;
4710*bed243d3SAndroid Build Coastguard Worker }
4711*bed243d3SAndroid Build Coastguard Worker
4712*bed243d3SAndroid Build Coastguard Worker /// Casts a 128-bit integer vector into a 128-bit floating-point vector
4713*bed243d3SAndroid Build Coastguard Worker /// of [4 x float].
4714*bed243d3SAndroid Build Coastguard Worker ///
4715*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4716*bed243d3SAndroid Build Coastguard Worker ///
4717*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
4718*bed243d3SAndroid Build Coastguard Worker ///
4719*bed243d3SAndroid Build Coastguard Worker /// \param __a
4720*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
4721*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit floating-point vector of [4 x float] containing the same
4722*bed243d3SAndroid Build Coastguard Worker /// bitwise pattern as the parameter.
_mm_castsi128_ps(__m128i __a)4723*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_castsi128_ps(__m128i __a) {
4724*bed243d3SAndroid Build Coastguard Worker return (__m128)__a;
4725*bed243d3SAndroid Build Coastguard Worker }
4726*bed243d3SAndroid Build Coastguard Worker
4727*bed243d3SAndroid Build Coastguard Worker /// Casts a 128-bit integer vector into a 128-bit floating-point vector
4728*bed243d3SAndroid Build Coastguard Worker /// of [2 x double].
4729*bed243d3SAndroid Build Coastguard Worker ///
4730*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4731*bed243d3SAndroid Build Coastguard Worker ///
4732*bed243d3SAndroid Build Coastguard Worker /// This intrinsic has no corresponding instruction.
4733*bed243d3SAndroid Build Coastguard Worker ///
4734*bed243d3SAndroid Build Coastguard Worker /// \param __a
4735*bed243d3SAndroid Build Coastguard Worker /// A 128-bit integer vector.
4736*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit floating-point vector of [2 x double] containing the same
4737*bed243d3SAndroid Build Coastguard Worker /// bitwise pattern as the parameter.
_mm_castsi128_pd(__m128i __a)4738*bed243d3SAndroid Build Coastguard Worker static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_castsi128_pd(__m128i __a) {
4739*bed243d3SAndroid Build Coastguard Worker return (__m128d)__a;
4740*bed243d3SAndroid Build Coastguard Worker }
4741*bed243d3SAndroid Build Coastguard Worker
4742*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding double-precision values of two
4743*bed243d3SAndroid Build Coastguard Worker /// 128-bit vectors of [2 x double], using the operation specified by the
4744*bed243d3SAndroid Build Coastguard Worker /// immediate integer operand.
4745*bed243d3SAndroid Build Coastguard Worker ///
4746*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
4747*bed243d3SAndroid Build Coastguard Worker ///
4748*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4749*bed243d3SAndroid Build Coastguard Worker ///
4750*bed243d3SAndroid Build Coastguard Worker /// \code
4751*bed243d3SAndroid Build Coastguard Worker /// __m128d _mm_cmp_pd(__m128d a, __m128d b, const int c);
4752*bed243d3SAndroid Build Coastguard Worker /// \endcode
4753*bed243d3SAndroid Build Coastguard Worker ///
4754*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> (V)CMPPD </c> instruction.
4755*bed243d3SAndroid Build Coastguard Worker ///
4756*bed243d3SAndroid Build Coastguard Worker /// \param a
4757*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
4758*bed243d3SAndroid Build Coastguard Worker /// \param b
4759*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
4760*bed243d3SAndroid Build Coastguard Worker /// \param c
4761*bed243d3SAndroid Build Coastguard Worker /// An immediate integer operand, with bits [4:0] specifying which comparison
4762*bed243d3SAndroid Build Coastguard Worker /// operation to use: \n
4763*bed243d3SAndroid Build Coastguard Worker /// 0x00: Equal (ordered, non-signaling) \n
4764*bed243d3SAndroid Build Coastguard Worker /// 0x01: Less-than (ordered, signaling) \n
4765*bed243d3SAndroid Build Coastguard Worker /// 0x02: Less-than-or-equal (ordered, signaling) \n
4766*bed243d3SAndroid Build Coastguard Worker /// 0x03: Unordered (non-signaling) \n
4767*bed243d3SAndroid Build Coastguard Worker /// 0x04: Not-equal (unordered, non-signaling) \n
4768*bed243d3SAndroid Build Coastguard Worker /// 0x05: Not-less-than (unordered, signaling) \n
4769*bed243d3SAndroid Build Coastguard Worker /// 0x06: Not-less-than-or-equal (unordered, signaling) \n
4770*bed243d3SAndroid Build Coastguard Worker /// 0x07: Ordered (non-signaling) \n
4771*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the comparison results.
4772*bed243d3SAndroid Build Coastguard Worker #define _mm_cmp_pd(a, b, c) \
4773*bed243d3SAndroid Build Coastguard Worker ((__m128d)__builtin_ia32_cmppd((__v2df)(__m128d)(a), (__v2df)(__m128d)(b), \
4774*bed243d3SAndroid Build Coastguard Worker (c)))
4775*bed243d3SAndroid Build Coastguard Worker
4776*bed243d3SAndroid Build Coastguard Worker /// Compares each of the corresponding scalar double-precision values of
4777*bed243d3SAndroid Build Coastguard Worker /// two 128-bit vectors of [2 x double], using the operation specified by the
4778*bed243d3SAndroid Build Coastguard Worker /// immediate integer operand.
4779*bed243d3SAndroid Build Coastguard Worker ///
4780*bed243d3SAndroid Build Coastguard Worker /// Each comparison yields 0x0 for false, 0xFFFFFFFFFFFFFFFF for true.
4781*bed243d3SAndroid Build Coastguard Worker ///
4782*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4783*bed243d3SAndroid Build Coastguard Worker ///
4784*bed243d3SAndroid Build Coastguard Worker /// \code
4785*bed243d3SAndroid Build Coastguard Worker /// __m128d _mm_cmp_sd(__m128d a, __m128d b, const int c);
4786*bed243d3SAndroid Build Coastguard Worker /// \endcode
4787*bed243d3SAndroid Build Coastguard Worker ///
4788*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> (V)CMPSD </c> instruction.
4789*bed243d3SAndroid Build Coastguard Worker ///
4790*bed243d3SAndroid Build Coastguard Worker /// \param a
4791*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
4792*bed243d3SAndroid Build Coastguard Worker /// \param b
4793*bed243d3SAndroid Build Coastguard Worker /// A 128-bit vector of [2 x double].
4794*bed243d3SAndroid Build Coastguard Worker /// \param c
4795*bed243d3SAndroid Build Coastguard Worker /// An immediate integer operand, with bits [4:0] specifying which comparison
4796*bed243d3SAndroid Build Coastguard Worker /// operation to use: \n
4797*bed243d3SAndroid Build Coastguard Worker /// 0x00: Equal (ordered, non-signaling) \n
4798*bed243d3SAndroid Build Coastguard Worker /// 0x01: Less-than (ordered, signaling) \n
4799*bed243d3SAndroid Build Coastguard Worker /// 0x02: Less-than-or-equal (ordered, signaling) \n
4800*bed243d3SAndroid Build Coastguard Worker /// 0x03: Unordered (non-signaling) \n
4801*bed243d3SAndroid Build Coastguard Worker /// 0x04: Not-equal (unordered, non-signaling) \n
4802*bed243d3SAndroid Build Coastguard Worker /// 0x05: Not-less-than (unordered, signaling) \n
4803*bed243d3SAndroid Build Coastguard Worker /// 0x06: Not-less-than-or-equal (unordered, signaling) \n
4804*bed243d3SAndroid Build Coastguard Worker /// 0x07: Ordered (non-signaling) \n
4805*bed243d3SAndroid Build Coastguard Worker /// \returns A 128-bit vector of [2 x double] containing the comparison results.
4806*bed243d3SAndroid Build Coastguard Worker #define _mm_cmp_sd(a, b, c) \
4807*bed243d3SAndroid Build Coastguard Worker ((__m128d)__builtin_ia32_cmpsd((__v2df)(__m128d)(a), (__v2df)(__m128d)(b), \
4808*bed243d3SAndroid Build Coastguard Worker (c)))
4809*bed243d3SAndroid Build Coastguard Worker
4810*bed243d3SAndroid Build Coastguard Worker #if defined(__cplusplus)
4811*bed243d3SAndroid Build Coastguard Worker extern "C" {
4812*bed243d3SAndroid Build Coastguard Worker #endif
4813*bed243d3SAndroid Build Coastguard Worker
4814*bed243d3SAndroid Build Coastguard Worker /// Indicates that a spin loop is being executed for the purposes of
4815*bed243d3SAndroid Build Coastguard Worker /// optimizing power consumption during the loop.
4816*bed243d3SAndroid Build Coastguard Worker ///
4817*bed243d3SAndroid Build Coastguard Worker /// \headerfile <x86intrin.h>
4818*bed243d3SAndroid Build Coastguard Worker ///
4819*bed243d3SAndroid Build Coastguard Worker /// This intrinsic corresponds to the <c> PAUSE </c> instruction.
4820*bed243d3SAndroid Build Coastguard Worker ///
4821*bed243d3SAndroid Build Coastguard Worker void _mm_pause(void);
4822*bed243d3SAndroid Build Coastguard Worker
4823*bed243d3SAndroid Build Coastguard Worker #if defined(__cplusplus)
4824*bed243d3SAndroid Build Coastguard Worker } // extern "C"
4825*bed243d3SAndroid Build Coastguard Worker #endif
4826*bed243d3SAndroid Build Coastguard Worker #undef __DEFAULT_FN_ATTRS
4827*bed243d3SAndroid Build Coastguard Worker #undef __DEFAULT_FN_ATTRS_MMX
4828*bed243d3SAndroid Build Coastguard Worker
4829*bed243d3SAndroid Build Coastguard Worker #define _MM_SHUFFLE2(x, y) (((x) << 1) | (y))
4830*bed243d3SAndroid Build Coastguard Worker
4831*bed243d3SAndroid Build Coastguard Worker #define _MM_DENORMALS_ZERO_ON (0x0040U)
4832*bed243d3SAndroid Build Coastguard Worker #define _MM_DENORMALS_ZERO_OFF (0x0000U)
4833*bed243d3SAndroid Build Coastguard Worker
4834*bed243d3SAndroid Build Coastguard Worker #define _MM_DENORMALS_ZERO_MASK (0x0040U)
4835*bed243d3SAndroid Build Coastguard Worker
4836*bed243d3SAndroid Build Coastguard Worker #define _MM_GET_DENORMALS_ZERO_MODE() (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK)
4837*bed243d3SAndroid Build Coastguard Worker #define _MM_SET_DENORMALS_ZERO_MODE(x) \
4838*bed243d3SAndroid Build Coastguard Worker (_mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (x)))
4839*bed243d3SAndroid Build Coastguard Worker
4840*bed243d3SAndroid Build Coastguard Worker #endif /* __EMMINTRIN_H */
4841