Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/i386/bmmintrin.h @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
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 */ |