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