]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Headers/mmintrin.h
Merge clang trunk r300422 and resolve conflicts.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / Headers / mmintrin.h
1 /*===---- mmintrin.h - MMX intrinsics --------------------------------------===
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a copy
4  * of this software and associated documentation files (the "Software"), to deal
5  * in the Software without restriction, including without limitation the rights
6  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7  * copies of the Software, and to permit persons to whom the Software is
8  * furnished to do so, subject to the following conditions:
9  *
10  * The above copyright notice and this permission notice shall be included in
11  * all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19  * THE SOFTWARE.
20  *
21  *===-----------------------------------------------------------------------===
22  */
23
24 #ifndef __MMINTRIN_H
25 #define __MMINTRIN_H
26
27 typedef long long __m64 __attribute__((__vector_size__(8)));
28
29 typedef long long __v1di __attribute__((__vector_size__(8)));
30 typedef int __v2si __attribute__((__vector_size__(8)));
31 typedef short __v4hi __attribute__((__vector_size__(8)));
32 typedef char __v8qi __attribute__((__vector_size__(8)));
33
34 /* Define the default attributes for the functions in this file. */
35 #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("mmx")))
36
37 /// \brief Clears the MMX state by setting the state of the x87 stack registers
38 ///    to empty.
39 ///
40 /// \headerfile <x86intrin.h>
41 ///
42 /// This intrinsic corresponds to the <c> EMMS </c> instruction.
43 ///
44 static __inline__ void __DEFAULT_FN_ATTRS
45 _mm_empty(void)
46 {
47     __builtin_ia32_emms();
48 }
49
50 /// \brief Constructs a 64-bit integer vector, setting the lower 32 bits to the
51 ///    value of the 32-bit integer parameter and setting the upper 32 bits to 0.
52 ///
53 /// \headerfile <x86intrin.h>
54 ///
55 /// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
56 ///
57 /// \param __i
58 ///    A 32-bit integer value.
59 /// \returns A 64-bit integer vector. The lower 32 bits contain the value of the
60 ///    parameter. The upper 32 bits are set to 0.
61 static __inline__ __m64 __DEFAULT_FN_ATTRS
62 _mm_cvtsi32_si64(int __i)
63 {
64     return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
65 }
66
67 /// \brief Returns the lower 32 bits of a 64-bit integer vector as a 32-bit
68 ///    signed integer.
69 ///
70 /// \headerfile <x86intrin.h>
71 ///
72 /// This intrinsic corresponds to the <c> VMOVD / MOVD </c> instruction.
73 ///
74 /// \param __m
75 ///    A 64-bit integer vector.
76 /// \returns A 32-bit signed integer value containing the lower 32 bits of the
77 ///    parameter.
78 static __inline__ int __DEFAULT_FN_ATTRS
79 _mm_cvtsi64_si32(__m64 __m)
80 {
81     return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0);
82 }
83
84 /// \brief Casts a 64-bit signed integer value into a 64-bit integer vector.
85 ///
86 /// \headerfile <x86intrin.h>
87 ///
88 /// This intrinsic corresponds to the <c> VMOVQ / MOVD </c> instruction.
89 ///
90 /// \param __i
91 ///    A 64-bit signed integer.
92 /// \returns A 64-bit integer vector containing the same bitwise pattern as the
93 ///    parameter.
94 static __inline__ __m64 __DEFAULT_FN_ATTRS
95 _mm_cvtsi64_m64(long long __i)
96 {
97     return (__m64)__i;
98 }
99
100 /// \brief Casts a 64-bit integer vector into a 64-bit signed integer value.
101 ///
102 /// \headerfile <x86intrin.h>
103 ///
104 /// This intrinsic corresponds to the <c> VMOVQ / MOVD </c> instruction.
105 ///
106 /// \param __m
107 ///    A 64-bit integer vector.
108 /// \returns A 64-bit signed integer containing the same bitwise pattern as the
109 ///    parameter.
110 static __inline__ long long __DEFAULT_FN_ATTRS
111 _mm_cvtm64_si64(__m64 __m)
112 {
113     return (long long)__m;
114 }
115
116 /// \brief Converts 16-bit signed integers from both 64-bit integer vector
117 ///    parameters of [4 x i16] into 8-bit signed integer values, and constructs
118 ///    a 64-bit integer vector of [8 x i8] as the result. Positive values
119 ///    greater than 0x7F are saturated to 0x7F. Negative values less than 0x80
120 ///    are saturated to 0x80.
121 ///
122 /// \headerfile <x86intrin.h>
123 ///
124 /// This intrinsic corresponds to the <c> PACKSSWB </c> instruction.
125 ///
126 /// \param __m1
127 ///    A 64-bit integer vector of [4 x i16]. Each 16-bit element is treated as a
128 ///    16-bit signed integer and is converted to an 8-bit signed integer with
129 ///    saturation. Positive values greater than 0x7F are saturated to 0x7F.
130 ///    Negative values less than 0x80 are saturated to 0x80. The converted
131 ///    [4 x i8] values are written to the lower 32 bits of the result.
132 /// \param __m2
133 ///    A 64-bit integer vector of [4 x i16]. Each 16-bit element is treated as a
134 ///    16-bit signed integer and is converted to an 8-bit signed integer with
135 ///    saturation. Positive values greater than 0x7F are saturated to 0x7F.
136 ///    Negative values less than 0x80 are saturated to 0x80. The converted
137 ///    [4 x i8] values are written to the upper 32 bits of the result.
138 /// \returns A 64-bit integer vector of [8 x i8] containing the converted
139 ///    values.
140 static __inline__ __m64 __DEFAULT_FN_ATTRS
141 _mm_packs_pi16(__m64 __m1, __m64 __m2)
142 {
143     return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2);
144 }
145
146 /// \brief Converts 32-bit signed integers from both 64-bit integer vector
147 ///    parameters of [2 x i32] into 16-bit signed integer values, and constructs
148 ///    a 64-bit integer vector of [4 x i16] as the result. Positive values
149 ///    greater than 0x7FFF are saturated to 0x7FFF. Negative values less than
150 ///    0x8000 are saturated to 0x8000.
151 ///
152 /// \headerfile <x86intrin.h>
153 ///
154 /// This intrinsic corresponds to the <c> PACKSSDW </c> instruction.
155 ///
156 /// \param __m1
157 ///    A 64-bit integer vector of [2 x i32]. Each 32-bit element is treated as a
158 ///    32-bit signed integer and is converted to a 16-bit signed integer with
159 ///    saturation. Positive values greater than 0x7FFF are saturated to 0x7FFF.
160 ///    Negative values less than 0x8000 are saturated to 0x8000. The converted
161 ///    [2 x i16] values are written to the lower 32 bits of the result.
162 /// \param __m2
163 ///    A 64-bit integer vector of [2 x i32]. Each 32-bit element is treated as a
164 ///    32-bit signed integer and is converted to a 16-bit signed integer with
165 ///    saturation. Positive values greater than 0x7FFF are saturated to 0x7FFF.
166 ///    Negative values less than 0x8000 are saturated to 0x8000. The converted
167 ///    [2 x i16] values are written to the upper 32 bits of the result.
168 /// \returns A 64-bit integer vector of [4 x i16] containing the converted
169 ///    values.
170 static __inline__ __m64 __DEFAULT_FN_ATTRS
171 _mm_packs_pi32(__m64 __m1, __m64 __m2)
172 {
173     return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2);
174 }
175
176 /// \brief Converts 16-bit signed integers from both 64-bit integer vector
177 ///    parameters of [4 x i16] into 8-bit unsigned integer values, and
178 ///    constructs a 64-bit integer vector of [8 x i8] as the result. Values
179 ///    greater than 0xFF are saturated to 0xFF. Values less than 0 are saturated
180 ///    to 0.
181 ///
182 /// \headerfile <x86intrin.h>
183 ///
184 /// This intrinsic corresponds to the <c> PACKUSWB </c> instruction.
185 ///
186 /// \param __m1
187 ///    A 64-bit integer vector of [4 x i16]. Each 16-bit element is treated as a
188 ///    16-bit signed integer and is converted to an 8-bit unsigned integer with
189 ///    saturation. Values greater than 0xFF are saturated to 0xFF. Values less
190 ///    than 0 are saturated to 0. The converted [4 x i8] values are written to
191 ///    the lower 32 bits of the result.
192 /// \param __m2
193 ///    A 64-bit integer vector of [4 x i16]. Each 16-bit element is treated as a
194 ///    16-bit signed integer and is converted to an 8-bit unsigned integer with
195 ///    saturation. Values greater than 0xFF are saturated to 0xFF. Values less
196 ///    than 0 are saturated to 0. The converted [4 x i8] values are written to
197 ///    the upper 32 bits of the result.
198 /// \returns A 64-bit integer vector of [8 x i8] containing the converted
199 ///    values.
200 static __inline__ __m64 __DEFAULT_FN_ATTRS
201 _mm_packs_pu16(__m64 __m1, __m64 __m2)
202 {
203     return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2);
204 }
205
206 /// \brief Unpacks the upper 32 bits from two 64-bit integer vectors of [8 x i8]
207 ///    and interleaves them into a 64-bit integer vector of [8 x i8].
208 ///
209 /// \headerfile <x86intrin.h>
210 ///
211 /// This intrinsic corresponds to the <c> PUNPCKHBW </c> instruction.
212 ///
213 /// \param __m1
214 ///    A 64-bit integer vector of [8 x i8]. \n
215 ///    Bits [39:32] are written to bits [7:0] of the result. \n
216 ///    Bits [47:40] are written to bits [23:16] of the result. \n
217 ///    Bits [55:48] are written to bits [39:32] of the result. \n
218 ///    Bits [63:56] are written to bits [55:48] of the result.
219 /// \param __m2
220 ///    A 64-bit integer vector of [8 x i8].
221 ///    Bits [39:32] are written to bits [15:8] of the result. \n
222 ///    Bits [47:40] are written to bits [31:24] of the result. \n
223 ///    Bits [55:48] are written to bits [47:40] of the result. \n
224 ///    Bits [63:56] are written to bits [63:56] of the result.
225 /// \returns A 64-bit integer vector of [8 x i8] containing the interleaved
226 ///    values.
227 static __inline__ __m64 __DEFAULT_FN_ATTRS
228 _mm_unpackhi_pi8(__m64 __m1, __m64 __m2)
229 {
230     return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2);
231 }
232
233 /// \brief Unpacks the upper 32 bits from two 64-bit integer vectors of
234 ///    [4 x i16] and interleaves them into a 64-bit integer vector of [4 x i16].
235 ///
236 /// \headerfile <x86intrin.h>
237 ///
238 /// This intrinsic corresponds to the <c> PUNPCKHWD </c> instruction.
239 ///
240 /// \param __m1
241 ///    A 64-bit integer vector of [4 x i16].
242 ///    Bits [47:32] are written to bits [15:0] of the result. \n
243 ///    Bits [63:48] are written to bits [47:32] of the result.
244 /// \param __m2
245 ///    A 64-bit integer vector of [4 x i16].
246 ///    Bits [47:32] are written to bits [31:16] of the result. \n
247 ///    Bits [63:48] are written to bits [63:48] of the result.
248 /// \returns A 64-bit integer vector of [4 x i16] containing the interleaved
249 ///    values.
250 static __inline__ __m64 __DEFAULT_FN_ATTRS
251 _mm_unpackhi_pi16(__m64 __m1, __m64 __m2)
252 {
253     return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2);
254 }
255
256 /// \brief Unpacks the upper 32 bits from two 64-bit integer vectors of
257 ///    [2 x i32] and interleaves them into a 64-bit integer vector of [2 x i32].
258 ///
259 /// \headerfile <x86intrin.h>
260 ///
261 /// This intrinsic corresponds to the <c> PUNPCKHDQ </c> instruction.
262 ///
263 /// \param __m1
264 ///    A 64-bit integer vector of [2 x i32]. The upper 32 bits are written to
265 ///    the lower 32 bits of the result.
266 /// \param __m2
267 ///    A 64-bit integer vector of [2 x i32]. The upper 32 bits are written to
268 ///    the upper 32 bits of the result.
269 /// \returns A 64-bit integer vector of [2 x i32] containing the interleaved
270 ///    values.
271 static __inline__ __m64 __DEFAULT_FN_ATTRS
272 _mm_unpackhi_pi32(__m64 __m1, __m64 __m2)
273 {
274     return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2);
275 }
276
277 /// \brief Unpacks the lower 32 bits from two 64-bit integer vectors of [8 x i8]
278 ///    and interleaves them into a 64-bit integer vector of [8 x i8].
279 ///
280 /// \headerfile <x86intrin.h>
281 ///
282 /// This intrinsic corresponds to the <c> PUNPCKLBW </c> instruction.
283 ///
284 /// \param __m1
285 ///    A 64-bit integer vector of [8 x i8].
286 ///    Bits [7:0] are written to bits [7:0] of the result. \n
287 ///    Bits [15:8] are written to bits [23:16] of the result. \n
288 ///    Bits [23:16] are written to bits [39:32] of the result. \n
289 ///    Bits [31:24] are written to bits [55:48] of the result.
290 /// \param __m2
291 ///    A 64-bit integer vector of [8 x i8].
292 ///    Bits [7:0] are written to bits [15:8] of the result. \n
293 ///    Bits [15:8] are written to bits [31:24] of the result. \n
294 ///    Bits [23:16] are written to bits [47:40] of the result. \n
295 ///    Bits [31:24] are written to bits [63:56] of the result.
296 /// \returns A 64-bit integer vector of [8 x i8] containing the interleaved
297 ///    values.
298 static __inline__ __m64 __DEFAULT_FN_ATTRS
299 _mm_unpacklo_pi8(__m64 __m1, __m64 __m2)
300 {
301     return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2);
302 }
303
304 /// \brief Unpacks the lower 32 bits from two 64-bit integer vectors of
305 ///    [4 x i16] and interleaves them into a 64-bit integer vector of [4 x i16].
306 ///
307 /// \headerfile <x86intrin.h>
308 ///
309 /// This intrinsic corresponds to the <c> PUNPCKLWD </c> instruction.
310 ///
311 /// \param __m1
312 ///    A 64-bit integer vector of [4 x i16].
313 ///    Bits [15:0] are written to bits [15:0] of the result. \n
314 ///    Bits [31:16] are written to bits [47:32] of the result.
315 /// \param __m2
316 ///    A 64-bit integer vector of [4 x i16].
317 ///    Bits [15:0] are written to bits [31:16] of the result. \n
318 ///    Bits [31:16] are written to bits [63:48] of the result.
319 /// \returns A 64-bit integer vector of [4 x i16] containing the interleaved
320 ///    values.
321 static __inline__ __m64 __DEFAULT_FN_ATTRS
322 _mm_unpacklo_pi16(__m64 __m1, __m64 __m2)
323 {
324     return (__m64)__builtin_ia32_punpcklwd((__v4hi)__m1, (__v4hi)__m2);
325 }
326
327 /// \brief Unpacks the lower 32 bits from two 64-bit integer vectors of
328 ///    [2 x i32] and interleaves them into a 64-bit integer vector of [2 x i32].
329 ///
330 /// \headerfile <x86intrin.h>
331 ///
332 /// This intrinsic corresponds to the <c> PUNPCKLDQ </c> instruction.
333 ///
334 /// \param __m1
335 ///    A 64-bit integer vector of [2 x i32]. The lower 32 bits are written to
336 ///    the lower 32 bits of the result.
337 /// \param __m2
338 ///    A 64-bit integer vector of [2 x i32]. The lower 32 bits are written to
339 ///    the upper 32 bits of the result.
340 /// \returns A 64-bit integer vector of [2 x i32] containing the interleaved
341 ///    values.
342 static __inline__ __m64 __DEFAULT_FN_ATTRS
343 _mm_unpacklo_pi32(__m64 __m1, __m64 __m2)
344 {
345     return (__m64)__builtin_ia32_punpckldq((__v2si)__m1, (__v2si)__m2);
346 }
347
348 /// \brief Adds each 8-bit integer element of the first 64-bit integer vector
349 ///    of [8 x i8] to the corresponding 8-bit integer element of the second
350 ///    64-bit integer vector of [8 x i8]. The lower 8 bits of the results are
351 ///    packed into a 64-bit integer vector of [8 x i8].
352 ///
353 /// \headerfile <x86intrin.h>
354 ///
355 /// This intrinsic corresponds to the <c> PADDB </c> instruction.
356 ///
357 /// \param __m1
358 ///    A 64-bit integer vector of [8 x i8].
359 /// \param __m2
360 ///    A 64-bit integer vector of [8 x i8].
361 /// \returns A 64-bit integer vector of [8 x i8] containing the sums of both
362 ///    parameters.
363 static __inline__ __m64 __DEFAULT_FN_ATTRS
364 _mm_add_pi8(__m64 __m1, __m64 __m2)
365 {
366     return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
367 }
368
369 /// \brief Adds each 16-bit integer element of the first 64-bit integer vector
370 ///    of [4 x i16] to the corresponding 16-bit integer element of the second
371 ///    64-bit integer vector of [4 x i16]. The lower 16 bits of the results are
372 ///    packed into a 64-bit integer vector of [4 x i16].
373 ///
374 /// \headerfile <x86intrin.h>
375 ///
376 /// This intrinsic corresponds to the <c> PADDW </c> instruction.
377 ///
378 /// \param __m1
379 ///    A 64-bit integer vector of [4 x i16].
380 /// \param __m2
381 ///    A 64-bit integer vector of [4 x i16].
382 /// \returns A 64-bit integer vector of [4 x i16] containing the sums of both
383 ///    parameters.
384 static __inline__ __m64 __DEFAULT_FN_ATTRS
385 _mm_add_pi16(__m64 __m1, __m64 __m2)
386 {
387     return (__m64)__builtin_ia32_paddw((__v4hi)__m1, (__v4hi)__m2);
388 }
389
390 /// \brief Adds each 32-bit integer element of the first 64-bit integer vector
391 ///    of [2 x i32] to the corresponding 32-bit integer element of the second
392 ///    64-bit integer vector of [2 x i32]. The lower 32 bits of the results are
393 ///    packed into a 64-bit integer vector of [2 x i32].
394 ///
395 /// \headerfile <x86intrin.h>
396 ///
397 /// This intrinsic corresponds to the <c> PADDD </c> instruction.
398 ///
399 /// \param __m1
400 ///    A 64-bit integer vector of [2 x i32].
401 /// \param __m2
402 ///    A 64-bit integer vector of [2 x i32].
403 /// \returns A 64-bit integer vector of [2 x i32] containing the sums of both
404 ///    parameters.
405 static __inline__ __m64 __DEFAULT_FN_ATTRS
406 _mm_add_pi32(__m64 __m1, __m64 __m2)
407 {
408     return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2);
409 }
410
411 /// \brief Adds each 8-bit signed integer element of the first 64-bit integer
412 ///    vector of [8 x i8] to the corresponding 8-bit signed integer element of
413 ///    the second 64-bit integer vector of [8 x i8]. Positive sums greater than
414 ///    0x7F are saturated to 0x7F. Negative sums less than 0x80 are saturated to
415 ///    0x80. The results are packed into a 64-bit integer vector of [8 x i8].
416 ///
417 /// \headerfile <x86intrin.h>
418 ///
419 /// This intrinsic corresponds to the <c> PADDSB </c> instruction.
420 ///
421 /// \param __m1
422 ///    A 64-bit integer vector of [8 x i8].
423 /// \param __m2
424 ///    A 64-bit integer vector of [8 x i8].
425 /// \returns A 64-bit integer vector of [8 x i8] containing the saturated sums
426 ///    of both parameters.
427 static __inline__ __m64 __DEFAULT_FN_ATTRS
428 _mm_adds_pi8(__m64 __m1, __m64 __m2)
429 {
430     return (__m64)__builtin_ia32_paddsb((__v8qi)__m1, (__v8qi)__m2);
431 }
432
433 /// \brief Adds each 16-bit signed integer element of the first 64-bit integer
434 ///    vector of [4 x i16] to the corresponding 16-bit signed integer element of
435 ///    the second 64-bit integer vector of [4 x i16]. Positive sums greater than
436 ///    0x7FFF are saturated to 0x7FFF. Negative sums less than 0x8000 are
437 ///    saturated to 0x8000. The results are packed into a 64-bit integer vector
438 ///    of [4 x i16].
439 ///
440 /// \headerfile <x86intrin.h>
441 ///
442 /// This intrinsic corresponds to the <c> PADDSW </c> instruction.
443 ///
444 /// \param __m1
445 ///    A 64-bit integer vector of [4 x i16].
446 /// \param __m2
447 ///    A 64-bit integer vector of [4 x i16].
448 /// \returns A 64-bit integer vector of [4 x i16] containing the saturated sums
449 ///    of both parameters.
450 static __inline__ __m64 __DEFAULT_FN_ATTRS
451 _mm_adds_pi16(__m64 __m1, __m64 __m2)
452 {
453     return (__m64)__builtin_ia32_paddsw((__v4hi)__m1, (__v4hi)__m2);
454 }
455
456 /// \brief Adds each 8-bit unsigned integer element of the first 64-bit integer
457 ///    vector of [8 x i8] to the corresponding 8-bit unsigned integer element of
458 ///    the second 64-bit integer vector of [8 x i8]. Sums greater than 0xFF are
459 ///    saturated to 0xFF. The results are packed into a 64-bit integer vector of
460 ///    [8 x i8].
461 ///
462 /// \headerfile <x86intrin.h>
463 ///
464 /// This intrinsic corresponds to the <c> PADDUSB </c> instruction.
465 ///
466 /// \param __m1
467 ///    A 64-bit integer vector of [8 x i8].
468 /// \param __m2
469 ///    A 64-bit integer vector of [8 x i8].
470 /// \returns A 64-bit integer vector of [8 x i8] containing the saturated
471 ///    unsigned sums of both parameters.
472 static __inline__ __m64 __DEFAULT_FN_ATTRS
473 _mm_adds_pu8(__m64 __m1, __m64 __m2)
474 {
475     return (__m64)__builtin_ia32_paddusb((__v8qi)__m1, (__v8qi)__m2);
476 }
477
478 /// \brief Adds each 16-bit unsigned integer element of the first 64-bit integer
479 ///    vector of [4 x i16] to the corresponding 16-bit unsigned integer element
480 ///    of the second 64-bit integer vector of [4 x i16]. Sums greater than
481 ///    0xFFFF are saturated to 0xFFFF. The results are packed into a 64-bit
482 ///    integer vector of [4 x i16].
483 ///
484 /// \headerfile <x86intrin.h>
485 ///
486 /// This intrinsic corresponds to the <c> PADDUSW </c> instruction.
487 ///
488 /// \param __m1
489 ///    A 64-bit integer vector of [4 x i16].
490 /// \param __m2
491 ///    A 64-bit integer vector of [4 x i16].
492 /// \returns A 64-bit integer vector of [4 x i16] containing the saturated
493 ///    unsigned sums of both parameters.
494 static __inline__ __m64 __DEFAULT_FN_ATTRS
495 _mm_adds_pu16(__m64 __m1, __m64 __m2)
496 {
497     return (__m64)__builtin_ia32_paddusw((__v4hi)__m1, (__v4hi)__m2);
498 }
499
500 /// \brief Subtracts each 8-bit integer element of the second 64-bit integer
501 ///    vector of [8 x i8] from the corresponding 8-bit integer element of the
502 ///    first 64-bit integer vector of [8 x i8]. The lower 8 bits of the results
503 ///    are packed into a 64-bit integer vector of [8 x i8].
504 ///
505 /// \headerfile <x86intrin.h>
506 ///
507 /// This intrinsic corresponds to the <c> PSUBB </c> instruction.
508 ///
509 /// \param __m1
510 ///    A 64-bit integer vector of [8 x i8] containing the minuends.
511 /// \param __m2
512 ///    A 64-bit integer vector of [8 x i8] containing the subtrahends.
513 /// \returns A 64-bit integer vector of [8 x i8] containing the differences of
514 ///    both parameters.
515 static __inline__ __m64 __DEFAULT_FN_ATTRS
516 _mm_sub_pi8(__m64 __m1, __m64 __m2)
517 {
518     return (__m64)__builtin_ia32_psubb((__v8qi)__m1, (__v8qi)__m2);
519 }
520
521 /// \brief Subtracts each 16-bit integer element of the second 64-bit integer
522 ///    vector of [4 x i16] from the corresponding 16-bit integer element of the
523 ///    first 64-bit integer vector of [4 x i16]. The lower 16 bits of the
524 ///    results are packed into a 64-bit integer vector of [4 x i16].
525 ///
526 /// \headerfile <x86intrin.h>
527 ///
528 /// This intrinsic corresponds to the <c> PSUBW </c> instruction.
529 ///
530 /// \param __m1
531 ///    A 64-bit integer vector of [4 x i16] containing the minuends.
532 /// \param __m2
533 ///    A 64-bit integer vector of [4 x i16] containing the subtrahends.
534 /// \returns A 64-bit integer vector of [4 x i16] containing the differences of
535 ///    both parameters.
536 static __inline__ __m64 __DEFAULT_FN_ATTRS
537 _mm_sub_pi16(__m64 __m1, __m64 __m2)
538 {
539     return (__m64)__builtin_ia32_psubw((__v4hi)__m1, (__v4hi)__m2);
540 }
541
542 /// \brief Subtracts each 32-bit integer element of the second 64-bit integer
543 ///    vector of [2 x i32] from the corresponding 32-bit integer element of the
544 ///    first 64-bit integer vector of [2 x i32]. The lower 32 bits of the
545 ///    results are packed into a 64-bit integer vector of [2 x i32].
546 ///
547 /// \headerfile <x86intrin.h>
548 ///
549 /// This intrinsic corresponds to the <c> PSUBD </c> instruction.
550 ///
551 /// \param __m1
552 ///    A 64-bit integer vector of [2 x i32] containing the minuends.
553 /// \param __m2
554 ///    A 64-bit integer vector of [2 x i32] containing the subtrahends.
555 /// \returns A 64-bit integer vector of [2 x i32] containing the differences of
556 ///    both parameters.
557 static __inline__ __m64 __DEFAULT_FN_ATTRS
558 _mm_sub_pi32(__m64 __m1, __m64 __m2)
559 {
560     return (__m64)__builtin_ia32_psubd((__v2si)__m1, (__v2si)__m2);
561 }
562
563 /// \brief Subtracts each 8-bit signed integer element of the second 64-bit
564 ///    integer vector of [8 x i8] from the corresponding 8-bit signed integer
565 ///    element of the first 64-bit integer vector of [8 x i8]. Positive results
566 ///    greater than 0x7F are saturated to 0x7F. Negative results less than 0x80
567 ///    are saturated to 0x80. The results are packed into a 64-bit integer
568 ///    vector of [8 x i8].
569 ///
570 /// \headerfile <x86intrin.h>
571 ///
572 /// This intrinsic corresponds to the <c> PSUBSB </c> instruction.
573 ///
574 /// \param __m1
575 ///    A 64-bit integer vector of [8 x i8] containing the minuends.
576 /// \param __m2
577 ///    A 64-bit integer vector of [8 x i8] containing the subtrahends.
578 /// \returns A 64-bit integer vector of [8 x i8] containing the saturated
579 ///    differences of both parameters.
580 static __inline__ __m64 __DEFAULT_FN_ATTRS
581 _mm_subs_pi8(__m64 __m1, __m64 __m2)
582 {
583     return (__m64)__builtin_ia32_psubsb((__v8qi)__m1, (__v8qi)__m2);
584 }
585
586 /// \brief Subtracts each 16-bit signed integer element of the second 64-bit
587 ///    integer vector of [4 x i16] from the corresponding 16-bit signed integer
588 ///    element of the first 64-bit integer vector of [4 x i16]. Positive results
589 ///    greater than 0x7FFF are saturated to 0x7FFF. Negative results less than
590 ///    0x8000 are saturated to 0x8000. The results are packed into a 64-bit
591 ///    integer vector of [4 x i16].
592 ///
593 /// \headerfile <x86intrin.h>
594 ///
595 /// This intrinsic corresponds to the <c> PSUBSW </c> instruction.
596 ///
597 /// \param __m1
598 ///    A 64-bit integer vector of [4 x i16] containing the minuends.
599 /// \param __m2
600 ///    A 64-bit integer vector of [4 x i16] containing the subtrahends.
601 /// \returns A 64-bit integer vector of [4 x i16] containing the saturated
602 ///    differences of both parameters.
603 static __inline__ __m64 __DEFAULT_FN_ATTRS
604 _mm_subs_pi16(__m64 __m1, __m64 __m2)
605 {
606     return (__m64)__builtin_ia32_psubsw((__v4hi)__m1, (__v4hi)__m2);
607 }
608
609 /// \brief Subtracts each 8-bit unsigned integer element of the second 64-bit
610 ///    integer vector of [8 x i8] from the corresponding 8-bit unsigned integer
611 ///    element of the first 64-bit integer vector of [8 x i8]. If an element of
612 ///    the first vector is less than the corresponding element of the second
613 ///    vector, the result is saturated to 0. The results are packed into a
614 ///    64-bit integer vector of [8 x i8].
615 ///
616 /// \headerfile <x86intrin.h>
617 ///
618 /// This intrinsic corresponds to the <c> PSUBUSB </c> instruction.
619 ///
620 /// \param __m1
621 ///    A 64-bit integer vector of [8 x i8] containing the minuends.
622 /// \param __m2
623 ///    A 64-bit integer vector of [8 x i8] containing the subtrahends.
624 /// \returns A 64-bit integer vector of [8 x i8] containing the saturated
625 ///    differences of both parameters.
626 static __inline__ __m64 __DEFAULT_FN_ATTRS
627 _mm_subs_pu8(__m64 __m1, __m64 __m2)
628 {
629     return (__m64)__builtin_ia32_psubusb((__v8qi)__m1, (__v8qi)__m2);
630 }
631
632 /// \brief Subtracts each 16-bit unsigned integer element of the second 64-bit
633 ///    integer vector of [4 x i16] from the corresponding 16-bit unsigned
634 ///    integer element of the first 64-bit integer vector of [4 x i16]. If an
635 ///    element of the first vector is less than the corresponding element of the
636 ///    second vector, the result is saturated to 0. The results are packed into
637 ///    a 64-bit integer vector of [4 x i16].
638 ///
639 /// \headerfile <x86intrin.h>
640 ///
641 /// This intrinsic corresponds to the <c> PSUBUSW </c> instruction.
642 ///
643 /// \param __m1
644 ///    A 64-bit integer vector of [4 x i16] containing the minuends.
645 /// \param __m2
646 ///    A 64-bit integer vector of [4 x i16] containing the subtrahends.
647 /// \returns A 64-bit integer vector of [4 x i16] containing the saturated
648 ///    differences of both parameters.
649 static __inline__ __m64 __DEFAULT_FN_ATTRS
650 _mm_subs_pu16(__m64 __m1, __m64 __m2)
651 {
652     return (__m64)__builtin_ia32_psubusw((__v4hi)__m1, (__v4hi)__m2);
653 }
654
655 /// \brief Multiplies each 16-bit signed integer element of the first 64-bit
656 ///    integer vector of [4 x i16] by the corresponding 16-bit signed integer
657 ///    element of the second 64-bit integer vector of [4 x i16] and get four
658 ///    32-bit products. Adds adjacent pairs of products to get two 32-bit sums.
659 ///    The lower 32 bits of these two sums are packed into a 64-bit integer
660 ///    vector of [2 x i32]. For example, bits [15:0] of both parameters are
661 ///    multiplied, bits [31:16] of both parameters are multiplied, and the sum
662 ///    of both results is written to bits [31:0] of the result.
663 ///
664 /// \headerfile <x86intrin.h>
665 ///
666 /// This intrinsic corresponds to the <c> PMADDWD </c> instruction.
667 ///
668 /// \param __m1
669 ///    A 64-bit integer vector of [4 x i16].
670 /// \param __m2
671 ///    A 64-bit integer vector of [4 x i16].
672 /// \returns A 64-bit integer vector of [2 x i32] containing the sums of
673 ///    products of both parameters.
674 static __inline__ __m64 __DEFAULT_FN_ATTRS
675 _mm_madd_pi16(__m64 __m1, __m64 __m2)
676 {
677     return (__m64)__builtin_ia32_pmaddwd((__v4hi)__m1, (__v4hi)__m2);
678 }
679
680 /// \brief Multiplies each 16-bit signed integer element of the first 64-bit
681 ///    integer vector of [4 x i16] by the corresponding 16-bit signed integer
682 ///    element of the second 64-bit integer vector of [4 x i16]. Packs the upper
683 ///    16 bits of the 32-bit products into a 64-bit integer vector of [4 x i16].
684 ///
685 /// \headerfile <x86intrin.h>
686 ///
687 /// This intrinsic corresponds to the <c> PMULHW </c> instruction.
688 ///
689 /// \param __m1
690 ///    A 64-bit integer vector of [4 x i16].
691 /// \param __m2
692 ///    A 64-bit integer vector of [4 x i16].
693 /// \returns A 64-bit integer vector of [4 x i16] containing the upper 16 bits
694 ///    of the products of both parameters.
695 static __inline__ __m64 __DEFAULT_FN_ATTRS
696 _mm_mulhi_pi16(__m64 __m1, __m64 __m2)
697 {
698     return (__m64)__builtin_ia32_pmulhw((__v4hi)__m1, (__v4hi)__m2);
699 }
700
701 /// \brief Multiplies each 16-bit signed integer element of the first 64-bit
702 ///    integer vector of [4 x i16] by the corresponding 16-bit signed integer
703 ///    element of the second 64-bit integer vector of [4 x i16]. Packs the lower
704 ///    16 bits of the 32-bit products into a 64-bit integer vector of [4 x i16].
705 ///
706 /// \headerfile <x86intrin.h>
707 ///
708 /// This intrinsic corresponds to the <c> PMULLW </c> instruction.
709 ///
710 /// \param __m1
711 ///    A 64-bit integer vector of [4 x i16].
712 /// \param __m2
713 ///    A 64-bit integer vector of [4 x i16].
714 /// \returns A 64-bit integer vector of [4 x i16] containing the lower 16 bits
715 ///    of the products of both parameters.
716 static __inline__ __m64 __DEFAULT_FN_ATTRS
717 _mm_mullo_pi16(__m64 __m1, __m64 __m2)
718 {
719     return (__m64)__builtin_ia32_pmullw((__v4hi)__m1, (__v4hi)__m2);
720 }
721
722 /// \brief Left-shifts each 16-bit signed integer element of the first
723 ///    parameter, which is a 64-bit integer vector of [4 x i16], by the number
724 ///    of bits specified by the second parameter, which is a 64-bit integer. The
725 ///    lower 16 bits of the results are packed into a 64-bit integer vector of
726 ///    [4 x i16].
727 ///
728 /// \headerfile <x86intrin.h>
729 ///
730 /// This intrinsic corresponds to the <c> PSLLW </c> instruction.
731 ///
732 /// \param __m
733 ///    A 64-bit integer vector of [4 x i16].
734 /// \param __count
735 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
736 /// \returns A 64-bit integer vector of [4 x i16] containing the left-shifted
737 ///    values. If \a __count is greater or equal to 16, the result is set to all
738 ///    0.
739 static __inline__ __m64 __DEFAULT_FN_ATTRS
740 _mm_sll_pi16(__m64 __m, __m64 __count)
741 {
742     return (__m64)__builtin_ia32_psllw((__v4hi)__m, __count);
743 }
744
745 /// \brief Left-shifts each 16-bit signed integer element of a 64-bit integer
746 ///    vector of [4 x i16] by the number of bits specified by a 32-bit integer.
747 ///    The lower 16 bits of the results are packed into a 64-bit integer vector
748 ///    of [4 x i16].
749 ///
750 /// \headerfile <x86intrin.h>
751 ///
752 /// This intrinsic corresponds to the <c> PSLLW </c> instruction.
753 ///
754 /// \param __m
755 ///    A 64-bit integer vector of [4 x i16].
756 /// \param __count
757 ///    A 32-bit integer value.
758 /// \returns A 64-bit integer vector of [4 x i16] containing the left-shifted
759 ///    values. If \a __count is greater or equal to 16, the result is set to all
760 ///    0.
761 static __inline__ __m64 __DEFAULT_FN_ATTRS
762 _mm_slli_pi16(__m64 __m, int __count)
763 {
764     return (__m64)__builtin_ia32_psllwi((__v4hi)__m, __count);
765 }
766
767 /// \brief Left-shifts each 32-bit signed integer element of the first
768 ///    parameter, which is a 64-bit integer vector of [2 x i32], by the number
769 ///    of bits specified by the second parameter, which is a 64-bit integer. The
770 ///    lower 32 bits of the results are packed into a 64-bit integer vector of
771 ///    [2 x i32].
772 ///
773 /// \headerfile <x86intrin.h>
774 ///
775 /// This intrinsic corresponds to the <c> PSLLD </c> instruction.
776 ///
777 /// \param __m
778 ///    A 64-bit integer vector of [2 x i32].
779 /// \param __count
780 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
781 /// \returns A 64-bit integer vector of [2 x i32] containing the left-shifted
782 ///    values. If \a __count is greater or equal to 32, the result is set to all
783 ///    0.
784 static __inline__ __m64 __DEFAULT_FN_ATTRS
785 _mm_sll_pi32(__m64 __m, __m64 __count)
786 {
787     return (__m64)__builtin_ia32_pslld((__v2si)__m, __count);
788 }
789
790 /// \brief Left-shifts each 32-bit signed integer element of a 64-bit integer
791 ///    vector of [2 x i32] by the number of bits specified by a 32-bit integer.
792 ///    The lower 32 bits of the results are packed into a 64-bit integer vector
793 ///    of [2 x i32].
794 ///
795 /// \headerfile <x86intrin.h>
796 ///
797 /// This intrinsic corresponds to the <c> PSLLD </c> instruction.
798 ///
799 /// \param __m
800 ///    A 64-bit integer vector of [2 x i32].
801 /// \param __count
802 ///    A 32-bit integer value.
803 /// \returns A 64-bit integer vector of [2 x i32] containing the left-shifted
804 ///    values. If \a __count is greater or equal to 32, the result is set to all
805 ///    0.
806 static __inline__ __m64 __DEFAULT_FN_ATTRS
807 _mm_slli_pi32(__m64 __m, int __count)
808 {
809     return (__m64)__builtin_ia32_pslldi((__v2si)__m, __count);
810 }
811
812 /// \brief Left-shifts the first 64-bit integer parameter by the number of bits
813 ///    specified by the second 64-bit integer parameter. The lower 64 bits of
814 ///    result are returned.
815 ///
816 /// \headerfile <x86intrin.h>
817 ///
818 /// This intrinsic corresponds to the <c> PSLLQ </c> instruction.
819 ///
820 /// \param __m
821 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
822 /// \param __count
823 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
824 /// \returns A 64-bit integer vector containing the left-shifted value. If
825 ///     \a __count is greater or equal to 64, the result is set to 0.
826 static __inline__ __m64 __DEFAULT_FN_ATTRS
827 _mm_sll_si64(__m64 __m, __m64 __count)
828 {
829     return (__m64)__builtin_ia32_psllq((__v1di)__m, __count);
830 }
831
832 /// \brief Left-shifts the first parameter, which is a 64-bit integer, by the
833 ///    number of bits specified by the second parameter, which is a 32-bit
834 ///    integer. The lower 64 bits of result are returned.
835 ///
836 /// \headerfile <x86intrin.h>
837 ///
838 /// This intrinsic corresponds to the <c> PSLLQ </c> instruction.
839 ///
840 /// \param __m
841 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
842 /// \param __count
843 ///    A 32-bit integer value.
844 /// \returns A 64-bit integer vector containing the left-shifted value. If
845 ///     \a __count is greater or equal to 64, the result is set to 0.
846 static __inline__ __m64 __DEFAULT_FN_ATTRS
847 _mm_slli_si64(__m64 __m, int __count)
848 {
849     return (__m64)__builtin_ia32_psllqi((__v1di)__m, __count);
850 }
851
852 /// \brief Right-shifts each 16-bit integer element of the first parameter,
853 ///    which is a 64-bit integer vector of [4 x i16], by the number of bits
854 ///    specified by the second parameter, which is a 64-bit integer. High-order
855 ///    bits are filled with the sign bit of the initial value of each 16-bit
856 ///    element. The 16-bit results are packed into a 64-bit integer vector of
857 ///    [4 x i16].
858 ///
859 /// \headerfile <x86intrin.h>
860 ///
861 /// This intrinsic corresponds to the <c> PSRAW </c> instruction.
862 ///
863 /// \param __m
864 ///    A 64-bit integer vector of [4 x i16].
865 /// \param __count
866 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
867 /// \returns A 64-bit integer vector of [4 x i16] containing the right-shifted
868 ///    values.
869 static __inline__ __m64 __DEFAULT_FN_ATTRS
870 _mm_sra_pi16(__m64 __m, __m64 __count)
871 {
872     return (__m64)__builtin_ia32_psraw((__v4hi)__m, __count);
873 }
874
875 /// \brief Right-shifts each 16-bit integer element of a 64-bit integer vector
876 ///    of [4 x i16] by the number of bits specified by a 32-bit integer.
877 ///    High-order bits are filled with the sign bit of the initial value of each
878 ///    16-bit element. The 16-bit results are packed into a 64-bit integer
879 ///    vector of [4 x i16].
880 ///
881 /// \headerfile <x86intrin.h>
882 ///
883 /// This intrinsic corresponds to the <c> PSRAW </c> instruction.
884 ///
885 /// \param __m
886 ///    A 64-bit integer vector of [4 x i16].
887 /// \param __count
888 ///    A 32-bit integer value.
889 /// \returns A 64-bit integer vector of [4 x i16] containing the right-shifted
890 ///    values.
891 static __inline__ __m64 __DEFAULT_FN_ATTRS
892 _mm_srai_pi16(__m64 __m, int __count)
893 {
894     return (__m64)__builtin_ia32_psrawi((__v4hi)__m, __count);
895 }
896
897 /// \brief Right-shifts each 32-bit integer element of the first parameter,
898 ///    which is a 64-bit integer vector of [2 x i32], by the number of bits
899 ///    specified by the second parameter, which is a 64-bit integer. High-order
900 ///    bits are filled with the sign bit of the initial value of each 32-bit
901 ///    element. The 32-bit results are packed into a 64-bit integer vector of
902 ///    [2 x i32].
903 ///
904 /// \headerfile <x86intrin.h>
905 ///
906 /// This intrinsic corresponds to the <c> PSRAD </c> instruction.
907 ///
908 /// \param __m
909 ///    A 64-bit integer vector of [2 x i32].
910 /// \param __count
911 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
912 /// \returns A 64-bit integer vector of [2 x i32] containing the right-shifted
913 ///    values.
914 static __inline__ __m64 __DEFAULT_FN_ATTRS
915 _mm_sra_pi32(__m64 __m, __m64 __count)
916 {
917     return (__m64)__builtin_ia32_psrad((__v2si)__m, __count);
918 }
919
920 /// \brief Right-shifts each 32-bit integer element of a 64-bit integer vector
921 ///    of [2 x i32] by the number of bits specified by a 32-bit integer.
922 ///    High-order bits are filled with the sign bit of the initial value of each
923 ///    32-bit element. The 32-bit results are packed into a 64-bit integer
924 ///    vector of [2 x i32].
925 ///
926 /// \headerfile <x86intrin.h>
927 ///
928 /// This intrinsic corresponds to the <c> PSRAD </c> instruction.
929 ///
930 /// \param __m
931 ///    A 64-bit integer vector of [2 x i32].
932 /// \param __count
933 ///    A 32-bit integer value.
934 /// \returns A 64-bit integer vector of [2 x i32] containing the right-shifted
935 ///    values.
936 static __inline__ __m64 __DEFAULT_FN_ATTRS
937 _mm_srai_pi32(__m64 __m, int __count)
938 {
939     return (__m64)__builtin_ia32_psradi((__v2si)__m, __count);
940 }
941
942 /// \brief Right-shifts each 16-bit integer element of the first parameter,
943 ///    which is a 64-bit integer vector of [4 x i16], by the number of bits
944 ///    specified by the second parameter, which is a 64-bit integer. High-order
945 ///    bits are cleared. The 16-bit results are packed into a 64-bit integer
946 ///    vector of [4 x i16].
947 ///
948 /// \headerfile <x86intrin.h>
949 ///
950 /// This intrinsic corresponds to the <c> PSRLW </c> instruction.
951 ///
952 /// \param __m
953 ///    A 64-bit integer vector of [4 x i16].
954 /// \param __count
955 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
956 /// \returns A 64-bit integer vector of [4 x i16] containing the right-shifted
957 ///    values.
958 static __inline__ __m64 __DEFAULT_FN_ATTRS
959 _mm_srl_pi16(__m64 __m, __m64 __count)
960 {
961     return (__m64)__builtin_ia32_psrlw((__v4hi)__m, __count);
962 }
963
964 /// \brief Right-shifts each 16-bit integer element of a 64-bit integer vector
965 ///    of [4 x i16] by the number of bits specified by a 32-bit integer.
966 ///    High-order bits are cleared. The 16-bit results are packed into a 64-bit
967 ///    integer vector of [4 x i16].
968 ///
969 /// \headerfile <x86intrin.h>
970 ///
971 /// This intrinsic corresponds to the <c> PSRLW </c> instruction.
972 ///
973 /// \param __m
974 ///    A 64-bit integer vector of [4 x i16].
975 /// \param __count
976 ///    A 32-bit integer value.
977 /// \returns A 64-bit integer vector of [4 x i16] containing the right-shifted
978 ///    values.
979 static __inline__ __m64 __DEFAULT_FN_ATTRS
980 _mm_srli_pi16(__m64 __m, int __count)
981 {
982     return (__m64)__builtin_ia32_psrlwi((__v4hi)__m, __count);
983 }
984
985 /// \brief Right-shifts each 32-bit integer element of the first parameter,
986 ///    which is a 64-bit integer vector of [2 x i32], by the number of bits
987 ///    specified by the second parameter, which is a 64-bit integer. High-order
988 ///    bits are cleared. The 32-bit results are packed into a 64-bit integer
989 ///    vector of [2 x i32].
990 ///
991 /// \headerfile <x86intrin.h>
992 ///
993 /// This intrinsic corresponds to the <c> PSRLD </c> instruction.
994 ///
995 /// \param __m
996 ///    A 64-bit integer vector of [2 x i32].
997 /// \param __count
998 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
999 /// \returns A 64-bit integer vector of [2 x i32] containing the right-shifted
1000 ///    values.
1001 static __inline__ __m64 __DEFAULT_FN_ATTRS
1002 _mm_srl_pi32(__m64 __m, __m64 __count)
1003 {
1004     return (__m64)__builtin_ia32_psrld((__v2si)__m, __count);
1005 }
1006
1007 /// \brief Right-shifts each 32-bit integer element of a 64-bit integer vector
1008 ///    of [2 x i32] by the number of bits specified by a 32-bit integer.
1009 ///    High-order bits are cleared. The 32-bit results are packed into a 64-bit
1010 ///    integer vector of [2 x i32].
1011 ///
1012 /// \headerfile <x86intrin.h>
1013 ///
1014 /// This intrinsic corresponds to the <c> PSRLD </c> instruction.
1015 ///
1016 /// \param __m
1017 ///    A 64-bit integer vector of [2 x i32].
1018 /// \param __count
1019 ///    A 32-bit integer value.
1020 /// \returns A 64-bit integer vector of [2 x i32] containing the right-shifted
1021 ///    values.
1022 static __inline__ __m64 __DEFAULT_FN_ATTRS
1023 _mm_srli_pi32(__m64 __m, int __count)
1024 {
1025     return (__m64)__builtin_ia32_psrldi((__v2si)__m, __count);
1026 }
1027
1028 /// \brief Right-shifts the first 64-bit integer parameter by the number of bits
1029 ///    specified by the second 64-bit integer parameter. High-order bits are
1030 ///    cleared.
1031 ///
1032 /// \headerfile <x86intrin.h>
1033 ///
1034 /// This intrinsic corresponds to the <c> PSRLQ </c> instruction.
1035 ///
1036 /// \param __m
1037 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
1038 /// \param __count
1039 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
1040 /// \returns A 64-bit integer vector containing the right-shifted value.
1041 static __inline__ __m64 __DEFAULT_FN_ATTRS
1042 _mm_srl_si64(__m64 __m, __m64 __count)
1043 {
1044     return (__m64)__builtin_ia32_psrlq((__v1di)__m, __count);
1045 }
1046
1047 /// \brief Right-shifts the first parameter, which is a 64-bit integer, by the
1048 ///    number of bits specified by the second parameter, which is a 32-bit
1049 ///    integer. High-order bits are cleared.
1050 ///
1051 /// \headerfile <x86intrin.h>
1052 ///
1053 /// This intrinsic corresponds to the <c> PSRLQ </c> instruction.
1054 ///
1055 /// \param __m
1056 ///    A 64-bit integer vector interpreted as a single 64-bit integer.
1057 /// \param __count
1058 ///    A 32-bit integer value.
1059 /// \returns A 64-bit integer vector containing the right-shifted value.
1060 static __inline__ __m64 __DEFAULT_FN_ATTRS
1061 _mm_srli_si64(__m64 __m, int __count)
1062 {
1063     return (__m64)__builtin_ia32_psrlqi((__v1di)__m, __count);
1064 }
1065
1066 /// \brief Performs a bitwise AND of two 64-bit integer vectors.
1067 ///
1068 /// \headerfile <x86intrin.h>
1069 ///
1070 /// This intrinsic corresponds to the <c> PAND </c> instruction.
1071 ///
1072 /// \param __m1
1073 ///    A 64-bit integer vector.
1074 /// \param __m2
1075 ///    A 64-bit integer vector.
1076 /// \returns A 64-bit integer vector containing the bitwise AND of both
1077 ///    parameters.
1078 static __inline__ __m64 __DEFAULT_FN_ATTRS
1079 _mm_and_si64(__m64 __m1, __m64 __m2)
1080 {
1081     return __builtin_ia32_pand((__v1di)__m1, (__v1di)__m2);
1082 }
1083
1084 /// \brief Performs a bitwise NOT of the first 64-bit integer vector, and then
1085 ///    performs a bitwise AND of the intermediate result and the second 64-bit
1086 ///    integer vector.
1087 ///
1088 /// \headerfile <x86intrin.h>
1089 ///
1090 /// This intrinsic corresponds to the <c> PANDN </c> instruction.
1091 ///
1092 /// \param __m1
1093 ///    A 64-bit integer vector. The one's complement of this parameter is used
1094 ///    in the bitwise AND.
1095 /// \param __m2
1096 ///    A 64-bit integer vector.
1097 /// \returns A 64-bit integer vector containing the bitwise AND of the second
1098 ///    parameter and the one's complement of the first parameter.
1099 static __inline__ __m64 __DEFAULT_FN_ATTRS
1100 _mm_andnot_si64(__m64 __m1, __m64 __m2)
1101 {
1102     return __builtin_ia32_pandn((__v1di)__m1, (__v1di)__m2);
1103 }
1104
1105 /// \brief Performs a bitwise OR of two 64-bit integer vectors.
1106 ///
1107 /// \headerfile <x86intrin.h>
1108 ///
1109 /// This intrinsic corresponds to the <c> POR </c> instruction.
1110 ///
1111 /// \param __m1
1112 ///    A 64-bit integer vector.
1113 /// \param __m2
1114 ///    A 64-bit integer vector.
1115 /// \returns A 64-bit integer vector containing the bitwise OR of both
1116 ///    parameters.
1117 static __inline__ __m64 __DEFAULT_FN_ATTRS
1118 _mm_or_si64(__m64 __m1, __m64 __m2)
1119 {
1120     return __builtin_ia32_por((__v1di)__m1, (__v1di)__m2);
1121 }
1122
1123 /// \brief Performs a bitwise exclusive OR of two 64-bit integer vectors.
1124 ///
1125 /// \headerfile <x86intrin.h>
1126 ///
1127 /// This intrinsic corresponds to the <c> PXOR </c> instruction.
1128 ///
1129 /// \param __m1
1130 ///    A 64-bit integer vector.
1131 /// \param __m2
1132 ///    A 64-bit integer vector.
1133 /// \returns A 64-bit integer vector containing the bitwise exclusive OR of both
1134 ///    parameters.
1135 static __inline__ __m64 __DEFAULT_FN_ATTRS
1136 _mm_xor_si64(__m64 __m1, __m64 __m2)
1137 {
1138     return __builtin_ia32_pxor((__v1di)__m1, (__v1di)__m2);
1139 }
1140
1141 /// \brief Compares the 8-bit integer elements of two 64-bit integer vectors of
1142 ///    [8 x i8] to determine if the element of the first vector is equal to the
1143 ///    corresponding element of the second vector. The comparison yields 0 for
1144 ///    false, 0xFF for true.
1145 ///
1146 /// \headerfile <x86intrin.h>
1147 ///
1148 /// This intrinsic corresponds to the <c> PCMPEQB </c> instruction.
1149 ///
1150 /// \param __m1
1151 ///    A 64-bit integer vector of [8 x i8].
1152 /// \param __m2
1153 ///    A 64-bit integer vector of [8 x i8].
1154 /// \returns A 64-bit integer vector of [8 x i8] containing the comparison
1155 ///    results.
1156 static __inline__ __m64 __DEFAULT_FN_ATTRS
1157 _mm_cmpeq_pi8(__m64 __m1, __m64 __m2)
1158 {
1159     return (__m64)__builtin_ia32_pcmpeqb((__v8qi)__m1, (__v8qi)__m2);
1160 }
1161
1162 /// \brief Compares the 16-bit integer elements of two 64-bit integer vectors of
1163 ///    [4 x i16] to determine if the element of the first vector is equal to the
1164 ///    corresponding element of the second vector. The comparison yields 0 for
1165 ///    false, 0xFFFF for true.
1166 ///
1167 /// \headerfile <x86intrin.h>
1168 ///
1169 /// This intrinsic corresponds to the <c> PCMPEQW </c> instruction.
1170 ///
1171 /// \param __m1
1172 ///    A 64-bit integer vector of [4 x i16].
1173 /// \param __m2
1174 ///    A 64-bit integer vector of [4 x i16].
1175 /// \returns A 64-bit integer vector of [4 x i16] containing the comparison
1176 ///    results.
1177 static __inline__ __m64 __DEFAULT_FN_ATTRS
1178 _mm_cmpeq_pi16(__m64 __m1, __m64 __m2)
1179 {
1180     return (__m64)__builtin_ia32_pcmpeqw((__v4hi)__m1, (__v4hi)__m2);
1181 }
1182
1183 /// \brief Compares the 32-bit integer elements of two 64-bit integer vectors of
1184 ///    [2 x i32] to determine if the element of the first vector is equal to the
1185 ///    corresponding element of the second vector. The comparison yields 0 for
1186 ///    false, 0xFFFFFFFF for true.
1187 ///
1188 /// \headerfile <x86intrin.h>
1189 ///
1190 /// This intrinsic corresponds to the <c> PCMPEQD </c> instruction.
1191 ///
1192 /// \param __m1
1193 ///    A 64-bit integer vector of [2 x i32].
1194 /// \param __m2
1195 ///    A 64-bit integer vector of [2 x i32].
1196 /// \returns A 64-bit integer vector of [2 x i32] containing the comparison
1197 ///    results.
1198 static __inline__ __m64 __DEFAULT_FN_ATTRS
1199 _mm_cmpeq_pi32(__m64 __m1, __m64 __m2)
1200 {
1201     return (__m64)__builtin_ia32_pcmpeqd((__v2si)__m1, (__v2si)__m2);
1202 }
1203
1204 /// \brief Compares the 8-bit integer elements of two 64-bit integer vectors of
1205 ///    [8 x i8] to determine if the element of the first vector is greater than
1206 ///    the corresponding element of the second vector. The comparison yields 0
1207 ///    for false, 0xFF for true.
1208 ///
1209 /// \headerfile <x86intrin.h>
1210 ///
1211 /// This intrinsic corresponds to the <c> PCMPGTB </c> instruction.
1212 ///
1213 /// \param __m1
1214 ///    A 64-bit integer vector of [8 x i8].
1215 /// \param __m2
1216 ///    A 64-bit integer vector of [8 x i8].
1217 /// \returns A 64-bit integer vector of [8 x i8] containing the comparison
1218 ///    results.
1219 static __inline__ __m64 __DEFAULT_FN_ATTRS
1220 _mm_cmpgt_pi8(__m64 __m1, __m64 __m2)
1221 {
1222     return (__m64)__builtin_ia32_pcmpgtb((__v8qi)__m1, (__v8qi)__m2);
1223 }
1224
1225 /// \brief Compares the 16-bit integer elements of two 64-bit integer vectors of
1226 ///    [4 x i16] to determine if the element of the first vector is greater than
1227 ///    the corresponding element of the second vector. The comparison yields 0
1228 ///    for false, 0xFFFF for true.
1229 ///
1230 /// \headerfile <x86intrin.h>
1231 ///
1232 /// This intrinsic corresponds to the <c> PCMPGTW </c> instruction.
1233 ///
1234 /// \param __m1
1235 ///    A 64-bit integer vector of [4 x i16].
1236 /// \param __m2
1237 ///    A 64-bit integer vector of [4 x i16].
1238 /// \returns A 64-bit integer vector of [4 x i16] containing the comparison
1239 ///    results.
1240 static __inline__ __m64 __DEFAULT_FN_ATTRS
1241 _mm_cmpgt_pi16(__m64 __m1, __m64 __m2)
1242 {
1243     return (__m64)__builtin_ia32_pcmpgtw((__v4hi)__m1, (__v4hi)__m2);
1244 }
1245
1246 /// \brief Compares the 32-bit integer elements of two 64-bit integer vectors of
1247 ///    [2 x i32] to determine if the element of the first vector is greater than
1248 ///    the corresponding element of the second vector. The comparison yields 0
1249 ///    for false, 0xFFFFFFFF for true.
1250 ///
1251 /// \headerfile <x86intrin.h>
1252 ///
1253 /// This intrinsic corresponds to the <c> PCMPGTD </c> instruction.
1254 ///
1255 /// \param __m1
1256 ///    A 64-bit integer vector of [2 x i32].
1257 /// \param __m2
1258 ///    A 64-bit integer vector of [2 x i32].
1259 /// \returns A 64-bit integer vector of [2 x i32] containing the comparison
1260 ///    results.
1261 static __inline__ __m64 __DEFAULT_FN_ATTRS
1262 _mm_cmpgt_pi32(__m64 __m1, __m64 __m2)
1263 {
1264     return (__m64)__builtin_ia32_pcmpgtd((__v2si)__m1, (__v2si)__m2);
1265 }
1266
1267 /// \brief Constructs a 64-bit integer vector initialized to zero.
1268 ///
1269 /// \headerfile <x86intrin.h>
1270 ///
1271 /// This intrinsic corresponds to the the <c> VXORPS / XORPS </c> instruction.
1272 ///
1273 /// \returns An initialized 64-bit integer vector with all elements set to zero.
1274 static __inline__ __m64 __DEFAULT_FN_ATTRS
1275 _mm_setzero_si64(void)
1276 {
1277     return (__m64){ 0LL };
1278 }
1279
1280 /// \brief Constructs a 64-bit integer vector initialized with the specified
1281 ///    32-bit integer values.
1282 ///
1283 /// \headerfile <x86intrin.h>
1284 ///
1285 /// This intrinsic is a utility function and does not correspond to a specific
1286 ///    instruction.
1287 ///
1288 /// \param __i1
1289 ///    A 32-bit integer value used to initialize the upper 32 bits of the
1290 ///    result.
1291 /// \param __i0
1292 ///    A 32-bit integer value used to initialize the lower 32 bits of the
1293 ///    result.
1294 /// \returns An initialized 64-bit integer vector.
1295 static __inline__ __m64 __DEFAULT_FN_ATTRS
1296 _mm_set_pi32(int __i1, int __i0)
1297 {
1298     return (__m64)__builtin_ia32_vec_init_v2si(__i0, __i1);
1299 }
1300
1301 /// \brief Constructs a 64-bit integer vector initialized with the specified
1302 ///    16-bit integer values.
1303 ///
1304 /// \headerfile <x86intrin.h>
1305 ///
1306 /// This intrinsic is a utility function and does not correspond to a specific
1307 ///    instruction.
1308 ///
1309 /// \param __s3
1310 ///    A 16-bit integer value used to initialize bits [63:48] of the result.
1311 /// \param __s2
1312 ///    A 16-bit integer value used to initialize bits [47:32] of the result.
1313 /// \param __s1
1314 ///    A 16-bit integer value used to initialize bits [31:16] of the result.
1315 /// \param __s0
1316 ///    A 16-bit integer value used to initialize bits [15:0] of the result.
1317 /// \returns An initialized 64-bit integer vector.
1318 static __inline__ __m64 __DEFAULT_FN_ATTRS
1319 _mm_set_pi16(short __s3, short __s2, short __s1, short __s0)
1320 {
1321     return (__m64)__builtin_ia32_vec_init_v4hi(__s0, __s1, __s2, __s3);
1322 }
1323
1324 /// \brief Constructs a 64-bit integer vector initialized with the specified
1325 ///    8-bit integer values.
1326 ///
1327 /// \headerfile <x86intrin.h>
1328 ///
1329 /// This intrinsic is a utility function and does not correspond to a specific
1330 ///    instruction.
1331 ///
1332 /// \param __b7
1333 ///    An 8-bit integer value used to initialize bits [63:56] of the result.
1334 /// \param __b6
1335 ///    An 8-bit integer value used to initialize bits [55:48] of the result.
1336 /// \param __b5
1337 ///    An 8-bit integer value used to initialize bits [47:40] of the result.
1338 /// \param __b4
1339 ///    An 8-bit integer value used to initialize bits [39:32] of the result.
1340 /// \param __b3
1341 ///    An 8-bit integer value used to initialize bits [31:24] of the result.
1342 /// \param __b2
1343 ///    An 8-bit integer value used to initialize bits [23:16] of the result.
1344 /// \param __b1
1345 ///    An 8-bit integer value used to initialize bits [15:8] of the result.
1346 /// \param __b0
1347 ///    An 8-bit integer value used to initialize bits [7:0] of the result.
1348 /// \returns An initialized 64-bit integer vector.
1349 static __inline__ __m64 __DEFAULT_FN_ATTRS
1350 _mm_set_pi8(char __b7, char __b6, char __b5, char __b4, char __b3, char __b2,
1351             char __b1, char __b0)
1352 {
1353     return (__m64)__builtin_ia32_vec_init_v8qi(__b0, __b1, __b2, __b3,
1354                                                __b4, __b5, __b6, __b7);
1355 }
1356
1357 /// \brief Constructs a 64-bit integer vector of [2 x i32], with each of the
1358 ///    32-bit integer vector elements set to the specified 32-bit integer
1359 ///    value.
1360 ///
1361 /// \headerfile <x86intrin.h>
1362 ///
1363 /// This intrinsic corresponds to the <c> VPSHUFD / PSHUFD </c> instruction.
1364 ///
1365 /// \param __i
1366 ///    A 32-bit integer value used to initialize each vector element of the
1367 ///    result.
1368 /// \returns An initialized 64-bit integer vector of [2 x i32].
1369 static __inline__ __m64 __DEFAULT_FN_ATTRS
1370 _mm_set1_pi32(int __i)
1371 {
1372     return _mm_set_pi32(__i, __i);
1373 }
1374
1375 /// \brief Constructs a 64-bit integer vector of [4 x i16], with each of the
1376 ///    16-bit integer vector elements set to the specified 16-bit integer
1377 ///    value.
1378 ///
1379 /// \headerfile <x86intrin.h>
1380 ///
1381 /// This intrinsic corresponds to the <c> VPSHUFLW / PSHUFLW </c> instruction.
1382 ///
1383 /// \param __w
1384 ///    A 16-bit integer value used to initialize each vector element of the
1385 ///    result.
1386 /// \returns An initialized 64-bit integer vector of [4 x i16].
1387 static __inline__ __m64 __DEFAULT_FN_ATTRS
1388 _mm_set1_pi16(short __w)
1389 {
1390     return _mm_set_pi16(__w, __w, __w, __w);
1391 }
1392
1393 /// \brief Constructs a 64-bit integer vector of [8 x i8], with each of the
1394 ///    8-bit integer vector elements set to the specified 8-bit integer value.
1395 ///
1396 /// \headerfile <x86intrin.h>
1397 ///
1398 /// This intrinsic corresponds to the <c> VPUNPCKLBW + VPSHUFLW / PUNPCKLBW +
1399 ///    PSHUFLW </c> instruction.
1400 ///
1401 /// \param __b
1402 ///    An 8-bit integer value used to initialize each vector element of the
1403 ///    result.
1404 /// \returns An initialized 64-bit integer vector of [8 x i8].
1405 static __inline__ __m64 __DEFAULT_FN_ATTRS
1406 _mm_set1_pi8(char __b)
1407 {
1408     return _mm_set_pi8(__b, __b, __b, __b, __b, __b, __b, __b);
1409 }
1410
1411 /// \brief Constructs a 64-bit integer vector, initialized in reverse order with
1412 ///    the specified 32-bit integer values.
1413 ///
1414 /// \headerfile <x86intrin.h>
1415 ///
1416 /// This intrinsic is a utility function and does not correspond to a specific
1417 ///    instruction.
1418 ///
1419 /// \param __i0
1420 ///    A 32-bit integer value used to initialize the lower 32 bits of the
1421 ///    result.
1422 /// \param __i1
1423 ///    A 32-bit integer value used to initialize the upper 32 bits of the
1424 ///    result.
1425 /// \returns An initialized 64-bit integer vector.
1426 static __inline__ __m64 __DEFAULT_FN_ATTRS
1427 _mm_setr_pi32(int __i0, int __i1)
1428 {
1429     return _mm_set_pi32(__i1, __i0);
1430 }
1431
1432 /// \brief Constructs a 64-bit integer vector, initialized in reverse order with
1433 ///    the specified 16-bit integer values.
1434 ///
1435 /// \headerfile <x86intrin.h>
1436 ///
1437 /// This intrinsic is a utility function and does not correspond to a specific
1438 ///    instruction.
1439 ///
1440 /// \param __w0
1441 ///    A 16-bit integer value used to initialize bits [15:0] of the result.
1442 /// \param __w1
1443 ///    A 16-bit integer value used to initialize bits [31:16] of the result.
1444 /// \param __w2
1445 ///    A 16-bit integer value used to initialize bits [47:32] of the result.
1446 /// \param __w3
1447 ///    A 16-bit integer value used to initialize bits [63:48] of the result.
1448 /// \returns An initialized 64-bit integer vector.
1449 static __inline__ __m64 __DEFAULT_FN_ATTRS
1450 _mm_setr_pi16(short __w0, short __w1, short __w2, short __w3)
1451 {
1452     return _mm_set_pi16(__w3, __w2, __w1, __w0);
1453 }
1454
1455 /// \brief Constructs a 64-bit integer vector, initialized in reverse order with
1456 ///    the specified 8-bit integer values.
1457 ///
1458 /// \headerfile <x86intrin.h>
1459 ///
1460 /// This intrinsic is a utility function and does not correspond to a specific
1461 ///    instruction.
1462 ///
1463 /// \param __b0
1464 ///    An 8-bit integer value used to initialize bits [7:0] of the result.
1465 /// \param __b1
1466 ///    An 8-bit integer value used to initialize bits [15:8] of the result.
1467 /// \param __b2
1468 ///    An 8-bit integer value used to initialize bits [23:16] of the result.
1469 /// \param __b3
1470 ///    An 8-bit integer value used to initialize bits [31:24] of the result.
1471 /// \param __b4
1472 ///    An 8-bit integer value used to initialize bits [39:32] of the result.
1473 /// \param __b5
1474 ///    An 8-bit integer value used to initialize bits [47:40] of the result.
1475 /// \param __b6
1476 ///    An 8-bit integer value used to initialize bits [55:48] of the result.
1477 /// \param __b7
1478 ///    An 8-bit integer value used to initialize bits [63:56] of the result.
1479 /// \returns An initialized 64-bit integer vector.
1480 static __inline__ __m64 __DEFAULT_FN_ATTRS
1481 _mm_setr_pi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5,
1482              char __b6, char __b7)
1483 {
1484     return _mm_set_pi8(__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0);
1485 }
1486
1487 #undef __DEFAULT_FN_ATTRS
1488
1489 /* Aliases for compatibility. */
1490 #define _m_empty _mm_empty
1491 #define _m_from_int _mm_cvtsi32_si64
1492 #define _m_from_int64 _mm_cvtsi64_m64
1493 #define _m_to_int _mm_cvtsi64_si32
1494 #define _m_to_int64 _mm_cvtm64_si64
1495 #define _m_packsswb _mm_packs_pi16
1496 #define _m_packssdw _mm_packs_pi32
1497 #define _m_packuswb _mm_packs_pu16
1498 #define _m_punpckhbw _mm_unpackhi_pi8
1499 #define _m_punpckhwd _mm_unpackhi_pi16
1500 #define _m_punpckhdq _mm_unpackhi_pi32
1501 #define _m_punpcklbw _mm_unpacklo_pi8
1502 #define _m_punpcklwd _mm_unpacklo_pi16
1503 #define _m_punpckldq _mm_unpacklo_pi32
1504 #define _m_paddb _mm_add_pi8
1505 #define _m_paddw _mm_add_pi16
1506 #define _m_paddd _mm_add_pi32
1507 #define _m_paddsb _mm_adds_pi8
1508 #define _m_paddsw _mm_adds_pi16
1509 #define _m_paddusb _mm_adds_pu8
1510 #define _m_paddusw _mm_adds_pu16
1511 #define _m_psubb _mm_sub_pi8
1512 #define _m_psubw _mm_sub_pi16
1513 #define _m_psubd _mm_sub_pi32
1514 #define _m_psubsb _mm_subs_pi8
1515 #define _m_psubsw _mm_subs_pi16
1516 #define _m_psubusb _mm_subs_pu8
1517 #define _m_psubusw _mm_subs_pu16
1518 #define _m_pmaddwd _mm_madd_pi16
1519 #define _m_pmulhw _mm_mulhi_pi16
1520 #define _m_pmullw _mm_mullo_pi16
1521 #define _m_psllw _mm_sll_pi16
1522 #define _m_psllwi _mm_slli_pi16
1523 #define _m_pslld _mm_sll_pi32
1524 #define _m_pslldi _mm_slli_pi32
1525 #define _m_psllq _mm_sll_si64
1526 #define _m_psllqi _mm_slli_si64
1527 #define _m_psraw _mm_sra_pi16
1528 #define _m_psrawi _mm_srai_pi16
1529 #define _m_psrad _mm_sra_pi32
1530 #define _m_psradi _mm_srai_pi32
1531 #define _m_psrlw _mm_srl_pi16
1532 #define _m_psrlwi _mm_srli_pi16
1533 #define _m_psrld _mm_srl_pi32
1534 #define _m_psrldi _mm_srli_pi32
1535 #define _m_psrlq _mm_srl_si64
1536 #define _m_psrlqi _mm_srli_si64
1537 #define _m_pand _mm_and_si64
1538 #define _m_pandn _mm_andnot_si64
1539 #define _m_por _mm_or_si64
1540 #define _m_pxor _mm_xor_si64
1541 #define _m_pcmpeqb _mm_cmpeq_pi8
1542 #define _m_pcmpeqw _mm_cmpeq_pi16
1543 #define _m_pcmpeqd _mm_cmpeq_pi32
1544 #define _m_pcmpgtb _mm_cmpgt_pi8
1545 #define _m_pcmpgtw _mm_cmpgt_pi16
1546 #define _m_pcmpgtd _mm_cmpgt_pi32
1547
1548 #endif /* __MMINTRIN_H */
1549