gcc50/csu: Skip depends step to avoid possible race
[dragonfly.git] / contrib / gcc-4.4 / gcc / config / i386 / bmmintrin.h
1 /* Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
2
3    This file is part of GCC.
4
5    GCC is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3, or (at your option)
8    any later version.
9
10    GCC is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    Under Section 7 of GPL version 3, you are granted additional
16    permissions described in the GCC Runtime Library Exception, version
17    3.1, as published by the Free Software Foundation.
18
19    You should have received a copy of the GNU General Public License and
20    a copy of the GCC Runtime Library Exception along with this program;
21    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
22    <http://www.gnu.org/licenses/>.  */
23
24 #ifndef _BMMINTRIN_H_INCLUDED
25 #define _BMMINTRIN_H_INCLUDED
26
27 #ifndef __SSE5__
28 # error "SSE5 instruction set not enabled"
29 #else
30
31 /* We need definitions from the SSE4A, SSE3, SSE2 and SSE header files.  */
32 #include <ammintrin.h>
33 #include <mmintrin-common.h>
34
35 /* Floating point multiply/add type instructions */
36 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
37 _mm_macc_ps(__m128 __A, __m128 __B, __m128 __C)
38 {
39   return (__m128) __builtin_ia32_fmaddps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
40 }
41
42 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
43 _mm_macc_pd(__m128d __A, __m128d __B, __m128d __C)
44 {
45   return (__m128d) __builtin_ia32_fmaddpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
46 }
47
48 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
49 _mm_macc_ss(__m128 __A, __m128 __B, __m128 __C)
50 {
51   return  (__m128) __builtin_ia32_fmaddss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
52 }
53
54 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
55 _mm_macc_sd(__m128d __A, __m128d __B, __m128d __C)
56 {
57   return (__m128d) __builtin_ia32_fmaddsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
58 }
59
60 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
61 _mm_msub_ps(__m128 __A, __m128 __B, __m128 __C)
62 {
63   return (__m128) __builtin_ia32_fmsubps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
64 }
65
66 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
67 _mm_msub_pd(__m128d __A, __m128d __B, __m128d __C)
68 {
69   return (__m128d) __builtin_ia32_fmsubpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
70 }
71
72 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
73 _mm_msub_ss(__m128 __A, __m128 __B, __m128 __C)
74 {
75   return (__m128) __builtin_ia32_fmsubss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
76 }
77
78 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
79 _mm_msub_sd(__m128d __A, __m128d __B, __m128d __C)
80 {
81   return (__m128d) __builtin_ia32_fmsubsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
82 }
83
84 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
85 _mm_nmacc_ps(__m128 __A, __m128 __B, __m128 __C)
86 {
87   return (__m128) __builtin_ia32_fnmaddps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
88 }
89
90 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
91 _mm_nmacc_pd(__m128d __A, __m128d __B, __m128d __C)
92 {
93   return (__m128d) __builtin_ia32_fnmaddpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
94 }
95
96 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
97 _mm_nmacc_ss(__m128 __A, __m128 __B, __m128 __C)
98 {
99   return (__m128) __builtin_ia32_fnmaddss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
100 }
101
102 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
103 _mm_nmacc_sd(__m128d __A, __m128d __B, __m128d __C)
104 {
105   return (__m128d) __builtin_ia32_fnmaddsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
106 }
107
108 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
109 _mm_nmsub_ps(__m128 __A, __m128 __B, __m128 __C)
110 {
111   return (__m128) __builtin_ia32_fnmsubps ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
112 }
113
114 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
115 _mm_nmsub_pd(__m128d __A, __m128d __B, __m128d __C)
116 {
117   return (__m128d) __builtin_ia32_fnmsubpd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
118 }
119
120 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
121 _mm_nmsub_ss(__m128 __A, __m128 __B, __m128 __C)
122 {
123   return (__m128) __builtin_ia32_fnmsubss ((__v4sf)__A, (__v4sf)__B, (__v4sf)__C);
124 }
125
126 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
127 _mm_nmsub_sd(__m128d __A, __m128d __B, __m128d __C)
128 {
129   return (__m128d) __builtin_ia32_fnmsubsd ((__v2df)__A, (__v2df)__B, (__v2df)__C);
130 }
131
132 /* Integer multiply/add intructions. */
133 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
134 _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
135 {
136   return (__m128i) __builtin_ia32_pmacssww ((__v8hi)__A,(__v8hi)__B, (__v8hi)__C);
137 }
138
139 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
140 _mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C)
141 {
142   return (__m128i) __builtin_ia32_pmacsww ((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
143 }
144
145 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
146 _mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C)
147 {
148   return  (__m128i) __builtin_ia32_pmacsswd ((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
149 }
150
151 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
152 _mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C)
153 {
154   return  (__m128i) __builtin_ia32_pmacswd ((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
155 }
156
157 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
158 _mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C)
159 {
160   return  (__m128i) __builtin_ia32_pmacssdd ((__v4si)__A, (__v4si)__B, (__v4si)__C);
161 }
162
163 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
164 _mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C)
165 {
166   return  (__m128i) __builtin_ia32_pmacsdd ((__v4si)__A, (__v4si)__B, (__v4si)__C);
167 }
168
169 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
170 _mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C)
171 {
172   return  (__m128i) __builtin_ia32_pmacssdql ((__v4si)__A, (__v4si)__B, (__v2di)__C);
173 }
174
175 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
176 _mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C)
177 {
178   return  (__m128i) __builtin_ia32_pmacsdql ((__v4si)__A, (__v4si)__B, (__v2di)__C);
179 }
180
181 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
182 _mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C)
183 {
184   return  (__m128i) __builtin_ia32_pmacssdqh ((__v4si)__A, (__v4si)__B, (__v2di)__C);
185 }
186
187 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
188 _mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C)
189 {
190   return  (__m128i) __builtin_ia32_pmacsdqh ((__v4si)__A, (__v4si)__B, (__v2di)__C);
191 }
192
193 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
194 _mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C)
195 {
196   return  (__m128i) __builtin_ia32_pmadcsswd ((__v8hi)__A,(__v8hi)__B,(__v4si)__C);
197 }
198
199 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
200 _mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C)
201 {
202   return  (__m128i) __builtin_ia32_pmadcswd ((__v8hi)__A,(__v8hi)__B,(__v4si)__C);
203 }
204
205 /* Packed Integer Horizontal Add and Subtract */
206 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
207 _mm_haddw_epi8(__m128i __A)
208 {
209   return  (__m128i) __builtin_ia32_phaddbw ((__v16qi)__A);
210 }
211
212 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
213 _mm_haddd_epi8(__m128i __A)
214 {
215   return  (__m128i) __builtin_ia32_phaddbd ((__v16qi)__A);
216 }
217
218 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
219 _mm_haddq_epi8(__m128i __A)
220 {
221   return  (__m128i) __builtin_ia32_phaddbq ((__v16qi)__A);
222 }
223
224 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
225 _mm_haddd_epi16(__m128i __A)
226 {
227   return  (__m128i) __builtin_ia32_phaddwd ((__v8hi)__A);
228 }
229
230 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
231 _mm_haddq_epi16(__m128i __A)
232 {
233   return  (__m128i) __builtin_ia32_phaddwq ((__v8hi)__A);
234 }
235
236 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
237 _mm_haddq_epi32(__m128i __A)
238 {
239   return  (__m128i) __builtin_ia32_phadddq ((__v4si)__A);
240 }
241
242 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
243 _mm_haddw_epu8(__m128i __A)
244 {
245   return  (__m128i) __builtin_ia32_phaddubw ((__v16qi)__A);
246 }
247
248 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
249 _mm_haddd_epu8(__m128i __A)
250 {
251   return  (__m128i) __builtin_ia32_phaddubd ((__v16qi)__A);
252 }
253
254 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
255 _mm_haddq_epu8(__m128i __A)
256 {
257   return  (__m128i) __builtin_ia32_phaddubq ((__v16qi)__A);
258 }
259
260 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
261 _mm_haddd_epu16(__m128i __A)
262 {
263   return  (__m128i) __builtin_ia32_phadduwd ((__v8hi)__A);
264 }
265
266 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
267 _mm_haddq_epu16(__m128i __A)
268 {
269   return  (__m128i) __builtin_ia32_phadduwq ((__v8hi)__A);
270 }
271
272 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
273 _mm_haddq_epu32(__m128i __A)
274 {
275   return  (__m128i) __builtin_ia32_phaddudq ((__v4si)__A);
276 }
277
278 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
279 _mm_hsubw_epi8(__m128i __A)
280 {
281   return  (__m128i) __builtin_ia32_phsubbw ((__v16qi)__A);
282 }
283
284 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
285 _mm_hsubd_epi16(__m128i __A)
286 {
287   return  (__m128i) __builtin_ia32_phsubwd ((__v8hi)__A);
288 }
289
290 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
291 _mm_hsubq_epi32(__m128i __A)
292 {
293   return  (__m128i) __builtin_ia32_phsubdq ((__v4si)__A);
294 }
295
296 /* Vector conditional move and permute */
297 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
298 _mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C)
299 {
300   return  (__m128i) __builtin_ia32_pcmov (__A, __B, __C);
301 }
302
303 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
304 _mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)
305 {
306   return  (__m128i) __builtin_ia32_pperm ((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);
307 }
308
309 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
310 _mm_perm_ps(__m128 __A, __m128 __B, __m128i __C)
311 {
312   return  (__m128) __builtin_ia32_permps ((__m128)__A, (__m128)__B, (__v16qi)__C);
313 }
314
315 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
316 _mm_perm_pd(__m128d __A, __m128d __B, __m128i __C)
317 {
318   return  (__m128d) __builtin_ia32_permpd ((__m128d)__A, (__m128d)__B, (__v16qi)__C);
319 }
320
321 /* Packed Integer Rotates and Shifts */
322
323 /* Rotates - Non-Immediate form */
324 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
325 _mm_rot_epi8(__m128i __A,  __m128i __B)
326 {
327   return  (__m128i) __builtin_ia32_protb ((__v16qi)__A, (__v16qi)__B);
328 }
329
330 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
331 _mm_rot_epi16(__m128i __A,  __m128i __B)
332 {
333   return  (__m128i) __builtin_ia32_protw ((__v8hi)__A, (__v8hi)__B);
334 }
335
336 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
337 _mm_rot_epi32(__m128i __A,  __m128i __B)
338 {
339   return  (__m128i) __builtin_ia32_protd ((__v4si)__A, (__v4si)__B);
340 }
341
342 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
343 _mm_rot_epi64(__m128i __A,  __m128i __B)
344 {
345   return (__m128i)  __builtin_ia32_protq ((__v2di)__A, (__v2di)__B);
346 }
347
348
349 /* Rotates - Immediate form */
350 #ifdef __OPTIMIZE__
351 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
352 _mm_roti_epi8(__m128i __A, const int __B)
353 {
354   return  (__m128i) __builtin_ia32_protbi ((__v16qi)__A, __B);
355 }
356
357 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
358 _mm_roti_epi16(__m128i __A, const int __B)
359 {
360   return  (__m128i) __builtin_ia32_protwi ((__v8hi)__A, __B);
361 }
362
363 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
364 _mm_roti_epi32(__m128i __A, const int __B)
365 {
366   return  (__m128i) __builtin_ia32_protdi ((__v4si)__A, __B);
367 }
368
369 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
370 _mm_roti_epi64(__m128i __A, const int __B)
371 {
372   return  (__m128i) __builtin_ia32_protqi ((__v2di)__A, __B);
373 }
374 #else
375 #define _mm_roti_epi8(A, N) \
376   ((__m128i) __builtin_ia32_protbi ((__v16qi)(__m128i)(A), (int)(N)))
377 #define _mm_roti_epi16(A, N) \
378   ((__m128i) __builtin_ia32_protwi ((__v8hi)(__m128i)(A), (int)(N)))
379 #define _mm_roti_epi32(A, N) \
380   ((__m128i) __builtin_ia32_protdi ((__v4si)(__m128i)(A), (int)(N)))
381 #define _mm_roti_epi64(A, N) \
382   ((__m128i) __builtin_ia32_protqi ((__v2di)(__m128i)(A), (int)(N)))
383 #endif
384
385 /* pshl */
386
387 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
388 _mm_shl_epi8(__m128i __A,  __m128i __B)
389 {
390   return  (__m128i) __builtin_ia32_pshlb ((__v16qi)__A, (__v16qi)__B);
391 }
392
393 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
394 _mm_shl_epi16(__m128i __A,  __m128i __B)
395 {
396   return  (__m128i) __builtin_ia32_pshlw ((__v8hi)__A, (__v8hi)__B);
397 }
398
399 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
400 _mm_shl_epi32(__m128i __A,  __m128i __B)
401 {
402   return  (__m128i) __builtin_ia32_pshld ((__v4si)__A, (__v4si)__B);
403 }
404
405 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
406 _mm_shl_epi64(__m128i __A,  __m128i __B)
407 {
408   return  (__m128i) __builtin_ia32_pshlq ((__v2di)__A, (__v2di)__B);
409 }
410
411 /* psha */
412 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
413 _mm_sha_epi8(__m128i __A,  __m128i __B)
414 {
415   return  (__m128i) __builtin_ia32_pshab ((__v16qi)__A, (__v16qi)__B);
416 }
417
418 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
419 _mm_sha_epi16(__m128i __A,  __m128i __B)
420 {
421   return  (__m128i) __builtin_ia32_pshaw ((__v8hi)__A, (__v8hi)__B);
422 }
423
424 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
425 _mm_sha_epi32(__m128i __A,  __m128i __B)
426 {
427   return  (__m128i) __builtin_ia32_pshad ((__v4si)__A, (__v4si)__B);
428 }
429
430 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
431 _mm_sha_epi64(__m128i __A,  __m128i __B)
432 {
433   return  (__m128i) __builtin_ia32_pshaq ((__v2di)__A, (__v2di)__B);
434 }
435
436 /* Compare and Predicate Generation */
437
438 /* com (floating point, packed single) */
439 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
440 _mm_comeq_ps(__m128 __A, __m128 __B)
441 {
442   return  (__m128) __builtin_ia32_comeqps ((__v4sf)__A, (__v4sf)__B);
443 }
444
445 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
446 _mm_comlt_ps(__m128 __A, __m128 __B)
447 {
448   return  (__m128) __builtin_ia32_comltps ((__v4sf)__A, (__v4sf)__B);
449 }
450
451 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
452 _mm_comle_ps(__m128 __A, __m128 __B)
453 {
454   return (__m128) __builtin_ia32_comleps ((__v4sf)__A, (__v4sf)__B);
455 }
456
457 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
458 _mm_comunord_ps(__m128 __A, __m128 __B)
459 {
460   return (__m128) __builtin_ia32_comunordps ((__v4sf)__A, (__v4sf)__B);
461 }
462
463 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
464 _mm_comneq_ps(__m128 __A, __m128 __B)
465 {
466   return (__m128) __builtin_ia32_comuneqps ((__v4sf)__A, (__v4sf)__B);
467 }
468
469 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
470 _mm_comnlt_ps(__m128 __A, __m128 __B)
471 {
472   return (__m128) __builtin_ia32_comunltps ((__v4sf)__A, (__v4sf)__B);
473 }
474
475 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
476 _mm_comnle_ps(__m128 __A, __m128 __B)
477 {
478   return (__m128)  __builtin_ia32_comunleps ((__v4sf)__A, (__v4sf)__B);
479 }
480
481
482 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
483 _mm_comord_ps(__m128 __A, __m128 __B)
484 {
485   return (__m128) __builtin_ia32_comordps ((__v4sf)__A, (__v4sf)__B);
486 }
487
488
489 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
490 _mm_comueq_ps(__m128 __A, __m128 __B)
491 {
492   return (__m128) __builtin_ia32_comueqps ((__v4sf)__A, (__v4sf)__B);
493 }
494
495 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
496 _mm_comnge_ps(__m128 __A, __m128 __B)
497 {
498   return (__m128) __builtin_ia32_comungeps ((__v4sf)__A, (__v4sf)__B);
499 }
500
501 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
502 _mm_comngt_ps(__m128 __A, __m128 __B)
503 {
504   return (__m128) __builtin_ia32_comungtps ((__v4sf)__A, (__v4sf)__B);
505 }
506
507 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
508 _mm_comfalse_ps(__m128 __A, __m128 __B)
509 {
510   return (__m128) __builtin_ia32_comfalseps ((__v4sf)__A, (__v4sf)__B);
511 }
512
513 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
514 _mm_comoneq_ps(__m128 __A, __m128 __B)
515 {
516   return (__m128) __builtin_ia32_comneqps ((__v4sf)__A, (__v4sf)__B);
517 }
518
519 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
520 _mm_comge_ps(__m128 __A, __m128 __B)
521 {
522   return (__m128) __builtin_ia32_comgeps ((__v4sf)__A, (__v4sf)__B);
523 }
524
525 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
526 _mm_comgt_ps(__m128 __A, __m128 __B)
527 {
528   return (__m128) __builtin_ia32_comgtps ((__v4sf)__A, (__v4sf)__B);
529 }
530
531 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
532 _mm_comtrue_ps(__m128 __A, __m128 __B)
533 {
534   return (__m128) __builtin_ia32_comtrueps ((__v4sf)__A, (__v4sf)__B);
535 }
536
537 /* com (floating point, packed double) */
538
539 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
540 _mm_comeq_pd(__m128d __A, __m128d __B)
541 {
542   return (__m128d) __builtin_ia32_comeqpd ((__v2df)__A, (__v2df)__B);
543 }
544
545 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
546 _mm_comlt_pd(__m128d __A, __m128d __B)
547 {
548   return (__m128d) __builtin_ia32_comltpd ((__v2df)__A, (__v2df)__B);
549 }
550
551 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
552 _mm_comle_pd(__m128d __A, __m128d __B)
553 {
554   return (__m128d) __builtin_ia32_comlepd ((__v2df)__A, (__v2df)__B);
555 }
556
557 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
558 _mm_comunord_pd(__m128d __A, __m128d __B)
559 {
560   return (__m128d) __builtin_ia32_comunordpd ((__v2df)__A, (__v2df)__B);
561 }
562
563 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
564 _mm_comneq_pd(__m128d __A, __m128d __B)
565 {
566   return (__m128d) __builtin_ia32_comuneqpd ((__v2df)__A, (__v2df)__B);
567 }
568
569 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
570 _mm_comnlt_pd(__m128d __A, __m128d __B)
571 {
572   return (__m128d) __builtin_ia32_comunltpd ((__v2df)__A, (__v2df)__B);
573 }
574
575 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
576 _mm_comnle_pd(__m128d __A, __m128d __B)
577 {
578   return (__m128d) __builtin_ia32_comunlepd ((__v2df)__A, (__v2df)__B);
579 }
580
581
582 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
583 _mm_comord_pd(__m128d __A, __m128d __B)
584 {
585   return (__m128d) __builtin_ia32_comordpd ((__v2df)__A, (__v2df)__B);
586 }
587
588 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
589 _mm_comueq_pd(__m128d __A, __m128d __B)
590 {
591   return (__m128d) __builtin_ia32_comueqpd ((__v2df)__A, (__v2df)__B);
592 }
593
594 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
595 _mm_comnge_pd(__m128d __A, __m128d __B)
596 {
597   return (__m128d) __builtin_ia32_comungepd ((__v2df)__A, (__v2df)__B);
598 }
599
600 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
601 _mm_comngt_pd(__m128d __A, __m128d __B)
602 {
603   return (__m128d) __builtin_ia32_comungtpd ((__v2df)__A, (__v2df)__B);
604 }
605
606 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
607 _mm_comfalse_pd(__m128d __A, __m128d __B)
608 {
609   return (__m128d) __builtin_ia32_comfalsepd ((__v2df)__A, (__v2df)__B);
610 }
611
612 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
613 _mm_comoneq_pd(__m128d __A, __m128d __B)
614 {
615   return (__m128d) __builtin_ia32_comneqpd ((__v2df)__A, (__v2df)__B);
616 }
617
618 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
619 _mm_comge_pd(__m128d __A, __m128d __B)
620 {
621   return (__m128d) __builtin_ia32_comgepd ((__v2df)__A, (__v2df)__B);
622 }
623
624 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
625 _mm_comgt_pd(__m128d __A, __m128d __B)
626 {
627   return (__m128d) __builtin_ia32_comgtpd ((__v2df)__A, (__v2df)__B);
628 }
629
630 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
631 _mm_comtrue_pd(__m128d __A, __m128d __B)
632 {
633   return (__m128d) __builtin_ia32_comtruepd ((__v2df)__A, (__v2df)__B);
634 }
635
636 /* com (floating point, scalar single) */
637 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
638 _mm_comeq_ss(__m128 __A, __m128 __B)
639 {
640   return (__m128)  __builtin_ia32_comeqss ((__v4sf)__A, (__v4sf)__B);
641 }
642
643 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
644 _mm_comlt_ss(__m128 __A, __m128 __B)
645 {
646   return (__m128) __builtin_ia32_comltss ((__v4sf)__A, (__v4sf)__B);
647 }
648
649 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
650 _mm_comle_ss(__m128 __A, __m128 __B)
651 {
652   return (__m128) __builtin_ia32_comless ((__v4sf)__A, (__v4sf)__B);
653 }
654
655 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
656 _mm_comunord_ss(__m128 __A, __m128 __B)
657 {
658   return (__m128) __builtin_ia32_comunordss ((__v4sf)__A, (__v4sf)__B);
659 }
660
661 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
662 _mm_comneq_ss(__m128 __A, __m128 __B)
663 {
664   return (__m128) __builtin_ia32_comuneqss ((__v4sf)__A, (__v4sf)__B);
665 }
666
667 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
668 _mm_comnlt_ss(__m128 __A, __m128 __B)
669 {
670   return (__m128) __builtin_ia32_comunltss ((__v4sf)__A, (__v4sf)__B);
671 }
672
673 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
674 _mm_comnle_ss(__m128 __A, __m128 __B)
675 {
676   return (__m128) __builtin_ia32_comunless ((__v4sf)__A, (__v4sf)__B);
677 }
678
679
680 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
681 _mm_comord_ss(__m128 __A, __m128 __B)
682 {
683   return (__m128) __builtin_ia32_comordss ((__v4sf)__A, (__v4sf)__B);
684 }
685
686 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
687 _mm_comueq_ss(__m128 __A, __m128 __B)
688 {
689   return (__m128) __builtin_ia32_comueqss ((__v4sf)__A, (__v4sf)__B);
690 }
691
692 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
693 _mm_comnge_ss(__m128 __A, __m128 __B)
694 {
695   return (__m128) __builtin_ia32_comungess ((__v4sf)__A, (__v4sf)__B);
696 }
697
698 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
699 _mm_comngt_ss(__m128 __A, __m128 __B)
700 {
701   return (__m128) __builtin_ia32_comungtss ((__v4sf)__A, (__v4sf)__B);
702 }
703
704 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
705 _mm_comfalse_ss(__m128 __A, __m128 __B)
706 {
707   return (__m128) __builtin_ia32_comfalsess ((__v4sf)__A, (__v4sf)__B);
708 }
709
710 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
711 _mm_comoneq_ss(__m128 __A, __m128 __B)
712 {
713   return (__m128) __builtin_ia32_comneqss ((__v4sf)__A, (__v4sf)__B);
714 }
715
716 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
717 _mm_comge_ss(__m128 __A, __m128 __B)
718 {
719   return (__m128) __builtin_ia32_comgess ((__v4sf)__A, (__v4sf)__B);
720 }
721
722 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
723 _mm_comgt_ss(__m128 __A, __m128 __B)
724 {
725   return (__m128) __builtin_ia32_comgtss ((__v4sf)__A, (__v4sf)__B);
726 }
727
728 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
729 _mm_comtrue_ss(__m128 __A, __m128 __B)
730 {
731   return (__m128) __builtin_ia32_comtruess ((__v4sf)__A, (__v4sf)__B);
732 }
733
734 /* com (floating point, scalar double) */
735
736 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
737 _mm_comeq_sd(__m128d __A, __m128d __B)
738 {
739   return (__m128d) __builtin_ia32_comeqsd ((__v2df)__A, (__v2df)__B);
740 }
741
742 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
743 _mm_comlt_sd(__m128d __A, __m128d __B)
744 {
745   return (__m128d) __builtin_ia32_comltsd ((__v2df)__A, (__v2df)__B);
746 }
747
748 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
749 _mm_comle_sd(__m128d __A, __m128d __B)
750 {
751   return (__m128d) __builtin_ia32_comlesd ((__v2df)__A, (__v2df)__B);
752 }
753
754 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
755 _mm_comunord_sd(__m128d __A, __m128d __B)
756 {
757   return (__m128d) __builtin_ia32_comunordsd ((__v2df)__A, (__v2df)__B);
758 }
759
760 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
761 _mm_comneq_sd(__m128d __A, __m128d __B)
762 {
763   return (__m128d) __builtin_ia32_comuneqsd ((__v2df)__A, (__v2df)__B);
764 }
765
766 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
767 _mm_comnlt_sd(__m128d __A, __m128d __B)
768 {
769   return (__m128d) __builtin_ia32_comunltsd ((__v2df)__A, (__v2df)__B);
770 }
771
772 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
773 _mm_comnle_sd(__m128d __A, __m128d __B)
774 {
775   return (__m128d) __builtin_ia32_comunlesd ((__v2df)__A, (__v2df)__B);
776 }
777
778
779 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
780 _mm_comord_sd(__m128d __A, __m128d __B)
781 {
782   return (__m128d) __builtin_ia32_comordsd ((__v2df)__A, (__v2df)__B);
783 }
784
785 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
786 _mm_comueq_sd(__m128d __A, __m128d __B)
787 {
788   return (__m128d) __builtin_ia32_comueqsd ((__v2df)__A, (__v2df)__B);
789 }
790
791 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
792 _mm_comnge_sd(__m128d __A, __m128d __B)
793 {
794   return (__m128d) __builtin_ia32_comungesd ((__v2df)__A, (__v2df)__B);
795 }
796
797 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
798 _mm_comngt_sd(__m128d __A, __m128d __B)
799 {
800   return (__m128d) __builtin_ia32_comungtsd ((__v2df)__A, (__v2df)__B);
801 }
802
803 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
804 _mm_comfalse_sd(__m128d __A, __m128d __B)
805 {
806   return (__m128d) __builtin_ia32_comfalsesd ((__v2df)__A, (__v2df)__B);
807 }
808
809 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
810 _mm_comoneq_sd(__m128d __A, __m128d __B)
811 {
812   return (__m128d) __builtin_ia32_comneqsd ((__v2df)__A, (__v2df)__B);
813 }
814
815 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
816 _mm_comge_sd(__m128d __A, __m128d __B)
817 {
818   return (__m128d) __builtin_ia32_comgesd ((__v2df)__A, (__v2df)__B);
819 }
820
821 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
822 _mm_comgt_sd(__m128d __A, __m128d __B)
823 {
824   return (__m128d) __builtin_ia32_comgtsd ((__v2df)__A, (__v2df)__B);
825 }
826
827 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
828 _mm_comtrue_sd(__m128d __A, __m128d __B)
829 {
830   return (__m128d) __builtin_ia32_comtruesd ((__v2df)__A, (__v2df)__B);
831 }
832
833
834 /*pcom (integer, unsinged bytes) */
835
836 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
837 _mm_comlt_epu8(__m128i __A, __m128i __B)
838 {
839   return (__m128i) __builtin_ia32_pcomltub ((__v16qi)__A, (__v16qi)__B);
840 }
841
842 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
843 _mm_comle_epu8(__m128i __A, __m128i __B)
844 {
845   return (__m128i) __builtin_ia32_pcomleub ((__v16qi)__A, (__v16qi)__B);
846 }
847
848 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
849 _mm_comgt_epu8(__m128i __A, __m128i __B)
850 {
851   return (__m128i) __builtin_ia32_pcomgtub ((__v16qi)__A, (__v16qi)__B);
852 }
853
854 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
855 _mm_comge_epu8(__m128i __A, __m128i __B)
856 {
857   return (__m128i) __builtin_ia32_pcomgeub ((__v16qi)__A, (__v16qi)__B);
858 }
859
860 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
861 _mm_comeq_epu8(__m128i __A, __m128i __B)
862 {
863   return (__m128i) __builtin_ia32_pcomequb ((__v16qi)__A, (__v16qi)__B);
864 }
865
866 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
867 _mm_comneq_epu8(__m128i __A, __m128i __B)
868 {
869   return (__m128i) __builtin_ia32_pcomnequb ((__v16qi)__A, (__v16qi)__B);
870 }
871
872 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
873 _mm_comfalse_epu8(__m128i __A, __m128i __B)
874 {
875   return (__m128i) __builtin_ia32_pcomfalseub ((__v16qi)__A, (__v16qi)__B);
876 }
877
878 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
879 _mm_comtrue_epu8(__m128i __A, __m128i __B)
880 {
881   return (__m128i) __builtin_ia32_pcomtrueub ((__v16qi)__A, (__v16qi)__B);
882 }
883
884 /*pcom (integer, unsinged words) */
885
886 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
887 _mm_comlt_epu16(__m128i __A, __m128i __B)
888 {
889   return (__m128i) __builtin_ia32_pcomltuw ((__v8hi)__A, (__v8hi)__B);
890 }
891
892 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
893 _mm_comle_epu16(__m128i __A, __m128i __B)
894 {
895   return (__m128i) __builtin_ia32_pcomleuw ((__v8hi)__A, (__v8hi)__B);
896 }
897
898 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
899 _mm_comgt_epu16(__m128i __A, __m128i __B)
900 {
901   return (__m128i) __builtin_ia32_pcomgtuw ((__v8hi)__A, (__v8hi)__B);
902 }
903
904 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
905 _mm_comge_epu16(__m128i __A, __m128i __B)
906 {
907   return (__m128i) __builtin_ia32_pcomgeuw ((__v8hi)__A, (__v8hi)__B);
908 }
909
910 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
911 _mm_comeq_epu16(__m128i __A, __m128i __B)
912 {
913   return (__m128i) __builtin_ia32_pcomequw ((__v8hi)__A, (__v8hi)__B);
914 }
915
916 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
917 _mm_comneq_epu16(__m128i __A, __m128i __B)
918 {
919   return (__m128i) __builtin_ia32_pcomnequw ((__v8hi)__A, (__v8hi)__B);
920 }
921
922 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
923 _mm_comfalse_epu16(__m128i __A, __m128i __B)
924 {
925   return (__m128i) __builtin_ia32_pcomfalseuw ((__v8hi)__A, (__v8hi)__B);
926 }
927
928 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
929 _mm_comtrue_epu16(__m128i __A, __m128i __B)
930 {
931   return (__m128i) __builtin_ia32_pcomtrueuw ((__v8hi)__A, (__v8hi)__B);
932 }
933
934 /*pcom (integer, unsinged double words) */
935
936 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
937 _mm_comlt_epu32(__m128i __A, __m128i __B)
938 {
939   return (__m128i) __builtin_ia32_pcomltud ((__v4si)__A, (__v4si)__B);
940 }
941
942 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
943 _mm_comle_epu32(__m128i __A, __m128i __B)
944 {
945   return (__m128i) __builtin_ia32_pcomleud ((__v4si)__A, (__v4si)__B);
946 }
947
948 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
949 _mm_comgt_epu32(__m128i __A, __m128i __B)
950 {
951   return (__m128i) __builtin_ia32_pcomgtud ((__v4si)__A, (__v4si)__B);
952 }
953
954 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
955 _mm_comge_epu32(__m128i __A, __m128i __B)
956 {
957   return (__m128i) __builtin_ia32_pcomgeud ((__v4si)__A, (__v4si)__B);
958 }
959
960 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
961 _mm_comeq_epu32(__m128i __A, __m128i __B)
962 {
963   return (__m128i) __builtin_ia32_pcomequd ((__v4si)__A, (__v4si)__B);
964 }
965
966 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
967 _mm_comneq_epu32(__m128i __A, __m128i __B)
968 {
969   return (__m128i) __builtin_ia32_pcomnequd ((__v4si)__A, (__v4si)__B);
970 }
971
972 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
973 _mm_comfalse_epu32(__m128i __A, __m128i __B)
974 {
975   return (__m128i) __builtin_ia32_pcomfalseud ((__v4si)__A, (__v4si)__B);
976 }
977
978 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
979 _mm_comtrue_epu32(__m128i __A, __m128i __B)
980 {
981   return (__m128i) __builtin_ia32_pcomtrueud ((__v4si)__A, (__v4si)__B);
982 }
983
984 /*pcom (integer, unsinged quad words) */
985
986 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
987 _mm_comlt_epu64(__m128i __A, __m128i __B)
988 {
989   return (__m128i) __builtin_ia32_pcomltuq ((__v2di)__A, (__v2di)__B);
990 }
991
992 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
993 _mm_comle_epu64(__m128i __A, __m128i __B)
994 {
995   return (__m128i) __builtin_ia32_pcomleuq ((__v2di)__A, (__v2di)__B);
996 }
997
998 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
999 _mm_comgt_epu64(__m128i __A, __m128i __B)
1000 {
1001   return (__m128i) __builtin_ia32_pcomgtuq ((__v2di)__A, (__v2di)__B);
1002 }
1003
1004 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1005 _mm_comge_epu64(__m128i __A, __m128i __B)
1006 {
1007   return (__m128i) __builtin_ia32_pcomgeuq ((__v2di)__A, (__v2di)__B);
1008 }
1009
1010 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1011 _mm_comeq_epu64(__m128i __A, __m128i __B)
1012 {
1013   return (__m128i) __builtin_ia32_pcomequq ((__v2di)__A, (__v2di)__B);
1014 }
1015
1016 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1017 _mm_comneq_epu64(__m128i __A, __m128i __B)
1018 {
1019   return (__m128i) __builtin_ia32_pcomnequq ((__v2di)__A, (__v2di)__B);
1020 }
1021
1022 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1023 _mm_comfalse_epu64(__m128i __A, __m128i __B)
1024 {
1025   return (__m128i) __builtin_ia32_pcomfalseuq ((__v2di)__A, (__v2di)__B);
1026 }
1027
1028 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1029 _mm_comtrue_epu64(__m128i __A, __m128i __B)
1030 {
1031   return (__m128i) __builtin_ia32_pcomtrueuq ((__v2di)__A, (__v2di)__B);
1032 }
1033
1034 /*pcom (integer, signed bytes) */
1035
1036 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1037 _mm_comlt_epi8(__m128i __A, __m128i __B)
1038 {
1039   return (__m128i) __builtin_ia32_pcomltb ((__v16qi)__A, (__v16qi)__B);
1040 }
1041
1042 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1043 _mm_comle_epi8(__m128i __A, __m128i __B)
1044 {
1045   return (__m128i) __builtin_ia32_pcomleb ((__v16qi)__A, (__v16qi)__B);
1046 }
1047
1048 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1049 _mm_comgt_epi8(__m128i __A, __m128i __B)
1050 {
1051   return (__m128i) __builtin_ia32_pcomgtb ((__v16qi)__A, (__v16qi)__B);
1052 }
1053
1054 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1055 _mm_comge_epi8(__m128i __A, __m128i __B)
1056 {
1057   return (__m128i) __builtin_ia32_pcomgeb ((__v16qi)__A, (__v16qi)__B);
1058 }
1059
1060 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1061 _mm_comeq_epi8(__m128i __A, __m128i __B)
1062 {
1063   return (__m128i) __builtin_ia32_pcomeqb ((__v16qi)__A, (__v16qi)__B);
1064 }
1065
1066 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1067 _mm_comneq_epi8(__m128i __A, __m128i __B)
1068 {
1069   return (__m128i) __builtin_ia32_pcomneqb ((__v16qi)__A, (__v16qi)__B);
1070 }
1071
1072 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1073 _mm_comfalse_epi8(__m128i __A, __m128i __B)
1074 {
1075   return (__m128i) __builtin_ia32_pcomfalseb ((__v16qi)__A, (__v16qi)__B);
1076 }
1077
1078 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1079 _mm_comtrue_epi8(__m128i __A, __m128i __B)
1080 {
1081   return (__m128i) __builtin_ia32_pcomtrueb ((__v16qi)__A, (__v16qi)__B);
1082 }
1083
1084 /*pcom (integer, signed words) */
1085
1086 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1087 _mm_comlt_epi16(__m128i __A, __m128i __B)
1088 {
1089   return (__m128i) __builtin_ia32_pcomltw ((__v8hi)__A, (__v8hi)__B);
1090 }
1091
1092 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1093 _mm_comle_epi16(__m128i __A, __m128i __B)
1094 {
1095   return (__m128i) __builtin_ia32_pcomlew ((__v8hi)__A, (__v8hi)__B);
1096 }
1097
1098 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1099 _mm_comgt_epi16(__m128i __A, __m128i __B)
1100 {
1101   return (__m128i) __builtin_ia32_pcomgtw ((__v8hi)__A, (__v8hi)__B);
1102 }
1103
1104 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1105 _mm_comge_epi16(__m128i __A, __m128i __B)
1106 {
1107   return (__m128i) __builtin_ia32_pcomgew ((__v8hi)__A, (__v8hi)__B);
1108 }
1109
1110 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1111 _mm_comeq_epi16(__m128i __A, __m128i __B)
1112 {
1113   return (__m128i) __builtin_ia32_pcomeqw ((__v8hi)__A, (__v8hi)__B);
1114 }
1115
1116 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1117 _mm_comneq_epi16(__m128i __A, __m128i __B)
1118 {
1119   return (__m128i) __builtin_ia32_pcomneqw ((__v8hi)__A, (__v8hi)__B);
1120 }
1121
1122 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1123 _mm_comfalse_epi16(__m128i __A, __m128i __B)
1124 {
1125   return (__m128i) __builtin_ia32_pcomfalsew ((__v8hi)__A, (__v8hi)__B);
1126 }
1127
1128 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1129 _mm_comtrue_epi16(__m128i __A, __m128i __B)
1130 {
1131   return (__m128i) __builtin_ia32_pcomtruew ((__v8hi)__A, (__v8hi)__B);
1132 }
1133
1134 /*pcom (integer, signed double words) */
1135
1136 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1137 _mm_comlt_epi32(__m128i __A, __m128i __B)
1138 {
1139   return (__m128i) __builtin_ia32_pcomltd ((__v4si)__A, (__v4si)__B);
1140 }
1141
1142 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1143 _mm_comle_epi32(__m128i __A, __m128i __B)
1144 {
1145   return (__m128i) __builtin_ia32_pcomled ((__v4si)__A, (__v4si)__B);
1146 }
1147
1148 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1149 _mm_comgt_epi32(__m128i __A, __m128i __B)
1150 {
1151   return (__m128i) __builtin_ia32_pcomgtd ((__v4si)__A, (__v4si)__B);
1152 }
1153
1154 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1155 _mm_comge_epi32(__m128i __A, __m128i __B)
1156 {
1157   return (__m128i) __builtin_ia32_pcomged ((__v4si)__A, (__v4si)__B);
1158 }
1159
1160 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1161 _mm_comeq_epi32(__m128i __A, __m128i __B)
1162 {
1163   return (__m128i) __builtin_ia32_pcomeqd ((__v4si)__A, (__v4si)__B);
1164 }
1165
1166 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1167 _mm_comneq_epi32(__m128i __A, __m128i __B)
1168 {
1169   return (__m128i) __builtin_ia32_pcomneqd ((__v4si)__A, (__v4si)__B);
1170 }
1171
1172 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1173 _mm_comfalse_epi32(__m128i __A, __m128i __B)
1174 {
1175   return (__m128i) __builtin_ia32_pcomfalsed ((__v4si)__A, (__v4si)__B);
1176 }
1177
1178 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1179 _mm_comtrue_epi32(__m128i __A, __m128i __B)
1180 {
1181   return (__m128i) __builtin_ia32_pcomtrued ((__v4si)__A, (__v4si)__B);
1182 }
1183
1184 /*pcom (integer, signed quad words) */
1185
1186 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1187 _mm_comlt_epi64(__m128i __A, __m128i __B)
1188 {
1189   return (__m128i) __builtin_ia32_pcomltq ((__v2di)__A, (__v2di)__B);
1190 }
1191
1192 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1193 _mm_comle_epi64(__m128i __A, __m128i __B)
1194 {
1195   return (__m128i) __builtin_ia32_pcomleq ((__v2di)__A, (__v2di)__B);
1196 }
1197
1198 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1199 _mm_comgt_epi64(__m128i __A, __m128i __B)
1200 {
1201   return (__m128i) __builtin_ia32_pcomgtq ((__v2di)__A, (__v2di)__B);
1202 }
1203
1204 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1205 _mm_comge_epi64(__m128i __A, __m128i __B)
1206 {
1207   return (__m128i) __builtin_ia32_pcomgeq ((__v2di)__A, (__v2di)__B);
1208 }
1209
1210 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1211 _mm_comeq_epi64(__m128i __A, __m128i __B)
1212 {
1213   return (__m128i) __builtin_ia32_pcomeqq ((__v2di)__A, (__v2di)__B);
1214 }
1215
1216 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1217 _mm_comneq_epi64(__m128i __A, __m128i __B)
1218 {
1219   return (__m128i) __builtin_ia32_pcomneqq ((__v2di)__A, (__v2di)__B);
1220 }
1221
1222 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1223 _mm_comfalse_epi64(__m128i __A, __m128i __B)
1224 {
1225   return (__m128i) __builtin_ia32_pcomfalseq ((__v2di)__A, (__v2di)__B);
1226 }
1227
1228 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1229 _mm_comtrue_epi64(__m128i __A, __m128i __B)
1230 {
1231   return (__m128i) __builtin_ia32_pcomtrueq ((__v2di)__A, (__v2di)__B);
1232 }
1233
1234 /* FRCZ */
1235 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1236 _mm_frcz_ps (__m128 __A)
1237 {
1238   return (__m128) __builtin_ia32_frczps ((__v4sf)__A);
1239 }
1240
1241 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1242 _mm_frcz_pd (__m128d __A)
1243 {
1244   return (__m128d) __builtin_ia32_frczpd ((__v2df)__A);
1245 }
1246
1247 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1248 _mm_frcz_ss (__m128 __A, __m128 __B)
1249 {
1250   return (__m128) __builtin_ia32_frczss ((__v4sf)__A, (__v4sf)__B);
1251 }
1252
1253 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
1254 _mm_frcz_sd (__m128d __A, __m128d __B)
1255 {
1256   return (__m128d) __builtin_ia32_frczsd ((__v2df)__A, (__v2df)__B);
1257 }
1258
1259 #endif /* __SSE5__ */
1260
1261 #endif /* _BMMINTRIN_H_INCLUDED */