xopintrin.h revision 1.1 1 1.1 mrg /* Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
2 1.1 mrg
3 1.1 mrg This file is part of GCC.
4 1.1 mrg
5 1.1 mrg GCC is free software; you can redistribute it and/or modify
6 1.1 mrg it under the terms of the GNU General Public License as published by
7 1.1 mrg the Free Software Foundation; either version 3, or (at your option)
8 1.1 mrg any later version.
9 1.1 mrg
10 1.1 mrg GCC is distributed in the hope that it will be useful,
11 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
12 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 1.1 mrg GNU General Public License for more details.
14 1.1 mrg
15 1.1 mrg Under Section 7 of GPL version 3, you are granted additional
16 1.1 mrg permissions described in the GCC Runtime Library Exception, version
17 1.1 mrg 3.1, as published by the Free Software Foundation.
18 1.1 mrg
19 1.1 mrg You should have received a copy of the GNU General Public License and
20 1.1 mrg a copy of the GCC Runtime Library Exception along with this program;
21 1.1 mrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 1.1 mrg <http://www.gnu.org/licenses/>. */
23 1.1 mrg
24 1.1 mrg #ifndef _X86INTRIN_H_INCLUDED
25 1.1 mrg # error "Never use <xopintrin.h> directly; include <x86intrin.h> instead."
26 1.1 mrg #endif
27 1.1 mrg
28 1.1 mrg #ifndef _XOPMMINTRIN_H_INCLUDED
29 1.1 mrg #define _XOPMMINTRIN_H_INCLUDED
30 1.1 mrg
31 1.1 mrg #ifndef __XOP__
32 1.1 mrg # error "XOP instruction set not enabled"
33 1.1 mrg #else
34 1.1 mrg
35 1.1 mrg #include <fma4intrin.h>
36 1.1 mrg
37 1.1 mrg /* Integer multiply/add intructions. */
38 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
39 1.1 mrg _mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
40 1.1 mrg {
41 1.1 mrg return (__m128i) __builtin_ia32_vpmacssww ((__v8hi)__A,(__v8hi)__B, (__v8hi)__C);
42 1.1 mrg }
43 1.1 mrg
44 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
45 1.1 mrg _mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C)
46 1.1 mrg {
47 1.1 mrg return (__m128i) __builtin_ia32_vpmacsww ((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
48 1.1 mrg }
49 1.1 mrg
50 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
51 1.1 mrg _mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C)
52 1.1 mrg {
53 1.1 mrg return (__m128i) __builtin_ia32_vpmacsswd ((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
54 1.1 mrg }
55 1.1 mrg
56 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
57 1.1 mrg _mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C)
58 1.1 mrg {
59 1.1 mrg return (__m128i) __builtin_ia32_vpmacswd ((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
60 1.1 mrg }
61 1.1 mrg
62 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
63 1.1 mrg _mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C)
64 1.1 mrg {
65 1.1 mrg return (__m128i) __builtin_ia32_vpmacssdd ((__v4si)__A, (__v4si)__B, (__v4si)__C);
66 1.1 mrg }
67 1.1 mrg
68 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
69 1.1 mrg _mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C)
70 1.1 mrg {
71 1.1 mrg return (__m128i) __builtin_ia32_vpmacsdd ((__v4si)__A, (__v4si)__B, (__v4si)__C);
72 1.1 mrg }
73 1.1 mrg
74 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
75 1.1 mrg _mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C)
76 1.1 mrg {
77 1.1 mrg return (__m128i) __builtin_ia32_vpmacssdql ((__v4si)__A, (__v4si)__B, (__v2di)__C);
78 1.1 mrg }
79 1.1 mrg
80 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
81 1.1 mrg _mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C)
82 1.1 mrg {
83 1.1 mrg return (__m128i) __builtin_ia32_vpmacsdql ((__v4si)__A, (__v4si)__B, (__v2di)__C);
84 1.1 mrg }
85 1.1 mrg
86 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
87 1.1 mrg _mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C)
88 1.1 mrg {
89 1.1 mrg return (__m128i) __builtin_ia32_vpmacssdqh ((__v4si)__A, (__v4si)__B, (__v2di)__C);
90 1.1 mrg }
91 1.1 mrg
92 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
93 1.1 mrg _mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C)
94 1.1 mrg {
95 1.1 mrg return (__m128i) __builtin_ia32_vpmacsdqh ((__v4si)__A, (__v4si)__B, (__v2di)__C);
96 1.1 mrg }
97 1.1 mrg
98 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
99 1.1 mrg _mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C)
100 1.1 mrg {
101 1.1 mrg return (__m128i) __builtin_ia32_vpmadcsswd ((__v8hi)__A,(__v8hi)__B,(__v4si)__C);
102 1.1 mrg }
103 1.1 mrg
104 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
105 1.1 mrg _mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C)
106 1.1 mrg {
107 1.1 mrg return (__m128i) __builtin_ia32_vpmadcswd ((__v8hi)__A,(__v8hi)__B,(__v4si)__C);
108 1.1 mrg }
109 1.1 mrg
110 1.1 mrg /* Packed Integer Horizontal Add and Subtract */
111 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
112 1.1 mrg _mm_haddw_epi8(__m128i __A)
113 1.1 mrg {
114 1.1 mrg return (__m128i) __builtin_ia32_vphaddbw ((__v16qi)__A);
115 1.1 mrg }
116 1.1 mrg
117 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
118 1.1 mrg _mm_haddd_epi8(__m128i __A)
119 1.1 mrg {
120 1.1 mrg return (__m128i) __builtin_ia32_vphaddbd ((__v16qi)__A);
121 1.1 mrg }
122 1.1 mrg
123 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
124 1.1 mrg _mm_haddq_epi8(__m128i __A)
125 1.1 mrg {
126 1.1 mrg return (__m128i) __builtin_ia32_vphaddbq ((__v16qi)__A);
127 1.1 mrg }
128 1.1 mrg
129 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
130 1.1 mrg _mm_haddd_epi16(__m128i __A)
131 1.1 mrg {
132 1.1 mrg return (__m128i) __builtin_ia32_vphaddwd ((__v8hi)__A);
133 1.1 mrg }
134 1.1 mrg
135 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
136 1.1 mrg _mm_haddq_epi16(__m128i __A)
137 1.1 mrg {
138 1.1 mrg return (__m128i) __builtin_ia32_vphaddwq ((__v8hi)__A);
139 1.1 mrg }
140 1.1 mrg
141 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
142 1.1 mrg _mm_haddq_epi32(__m128i __A)
143 1.1 mrg {
144 1.1 mrg return (__m128i) __builtin_ia32_vphadddq ((__v4si)__A);
145 1.1 mrg }
146 1.1 mrg
147 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
148 1.1 mrg _mm_haddw_epu8(__m128i __A)
149 1.1 mrg {
150 1.1 mrg return (__m128i) __builtin_ia32_vphaddubw ((__v16qi)__A);
151 1.1 mrg }
152 1.1 mrg
153 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
154 1.1 mrg _mm_haddd_epu8(__m128i __A)
155 1.1 mrg {
156 1.1 mrg return (__m128i) __builtin_ia32_vphaddubd ((__v16qi)__A);
157 1.1 mrg }
158 1.1 mrg
159 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
160 1.1 mrg _mm_haddq_epu8(__m128i __A)
161 1.1 mrg {
162 1.1 mrg return (__m128i) __builtin_ia32_vphaddubq ((__v16qi)__A);
163 1.1 mrg }
164 1.1 mrg
165 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
166 1.1 mrg _mm_haddd_epu16(__m128i __A)
167 1.1 mrg {
168 1.1 mrg return (__m128i) __builtin_ia32_vphadduwd ((__v8hi)__A);
169 1.1 mrg }
170 1.1 mrg
171 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
172 1.1 mrg _mm_haddq_epu16(__m128i __A)
173 1.1 mrg {
174 1.1 mrg return (__m128i) __builtin_ia32_vphadduwq ((__v8hi)__A);
175 1.1 mrg }
176 1.1 mrg
177 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
178 1.1 mrg _mm_haddq_epu32(__m128i __A)
179 1.1 mrg {
180 1.1 mrg return (__m128i) __builtin_ia32_vphaddudq ((__v4si)__A);
181 1.1 mrg }
182 1.1 mrg
183 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
184 1.1 mrg _mm_hsubw_epi8(__m128i __A)
185 1.1 mrg {
186 1.1 mrg return (__m128i) __builtin_ia32_vphsubbw ((__v16qi)__A);
187 1.1 mrg }
188 1.1 mrg
189 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
190 1.1 mrg _mm_hsubd_epi16(__m128i __A)
191 1.1 mrg {
192 1.1 mrg return (__m128i) __builtin_ia32_vphsubwd ((__v8hi)__A);
193 1.1 mrg }
194 1.1 mrg
195 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
196 1.1 mrg _mm_hsubq_epi32(__m128i __A)
197 1.1 mrg {
198 1.1 mrg return (__m128i) __builtin_ia32_vphsubdq ((__v4si)__A);
199 1.1 mrg }
200 1.1 mrg
201 1.1 mrg /* Vector conditional move and permute */
202 1.1 mrg
203 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
204 1.1 mrg _mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C)
205 1.1 mrg {
206 1.1 mrg return (__m128i) __builtin_ia32_vpcmov (__A, __B, __C);
207 1.1 mrg }
208 1.1 mrg
209 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
210 1.1 mrg _mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)
211 1.1 mrg {
212 1.1 mrg return (__m128i) __builtin_ia32_vpperm ((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);
213 1.1 mrg }
214 1.1 mrg
215 1.1 mrg /* Packed Integer Rotates and Shifts
216 1.1 mrg Rotates - Non-Immediate form */
217 1.1 mrg
218 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
219 1.1 mrg _mm_rot_epi8(__m128i __A, __m128i __B)
220 1.1 mrg {
221 1.1 mrg return (__m128i) __builtin_ia32_vprotb ((__v16qi)__A, (__v16qi)__B);
222 1.1 mrg }
223 1.1 mrg
224 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
225 1.1 mrg _mm_rot_epi16(__m128i __A, __m128i __B)
226 1.1 mrg {
227 1.1 mrg return (__m128i) __builtin_ia32_vprotw ((__v8hi)__A, (__v8hi)__B);
228 1.1 mrg }
229 1.1 mrg
230 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
231 1.1 mrg _mm_rot_epi32(__m128i __A, __m128i __B)
232 1.1 mrg {
233 1.1 mrg return (__m128i) __builtin_ia32_vprotd ((__v4si)__A, (__v4si)__B);
234 1.1 mrg }
235 1.1 mrg
236 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
237 1.1 mrg _mm_rot_epi64(__m128i __A, __m128i __B)
238 1.1 mrg {
239 1.1 mrg return (__m128i) __builtin_ia32_vprotq ((__v2di)__A, (__v2di)__B);
240 1.1 mrg }
241 1.1 mrg
242 1.1 mrg /* Rotates - Immediate form */
243 1.1 mrg
244 1.1 mrg #ifdef __OPTIMIZE__
245 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
246 1.1 mrg _mm_roti_epi8(__m128i __A, const int __B)
247 1.1 mrg {
248 1.1 mrg return (__m128i) __builtin_ia32_vprotbi ((__v16qi)__A, __B);
249 1.1 mrg }
250 1.1 mrg
251 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
252 1.1 mrg _mm_roti_epi16(__m128i __A, const int __B)
253 1.1 mrg {
254 1.1 mrg return (__m128i) __builtin_ia32_vprotwi ((__v8hi)__A, __B);
255 1.1 mrg }
256 1.1 mrg
257 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
258 1.1 mrg _mm_roti_epi32(__m128i __A, const int __B)
259 1.1 mrg {
260 1.1 mrg return (__m128i) __builtin_ia32_vprotdi ((__v4si)__A, __B);
261 1.1 mrg }
262 1.1 mrg
263 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
264 1.1 mrg _mm_roti_epi64(__m128i __A, const int __B)
265 1.1 mrg {
266 1.1 mrg return (__m128i) __builtin_ia32_vprotqi ((__v2di)__A, __B);
267 1.1 mrg }
268 1.1 mrg #else
269 1.1 mrg #define _mm_roti_epi8(A, N) \
270 1.1 mrg ((__m128i) __builtin_ia32_vprotbi ((__v16qi)(__m128i)(A), (int)(N)))
271 1.1 mrg #define _mm_roti_epi16(A, N) \
272 1.1 mrg ((__m128i) __builtin_ia32_vprotwi ((__v8hi)(__m128i)(A), (int)(N)))
273 1.1 mrg #define _mm_roti_epi32(A, N) \
274 1.1 mrg ((__m128i) __builtin_ia32_vprotdi ((__v4si)(__m128i)(A), (int)(N)))
275 1.1 mrg #define _mm_roti_epi64(A, N) \
276 1.1 mrg ((__m128i) __builtin_ia32_vprotqi ((__v2di)(__m128i)(A), (int)(N)))
277 1.1 mrg #endif
278 1.1 mrg
279 1.1 mrg /* Shifts */
280 1.1 mrg
281 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
282 1.1 mrg _mm_shl_epi8(__m128i __A, __m128i __B)
283 1.1 mrg {
284 1.1 mrg return (__m128i) __builtin_ia32_vpshlb ((__v16qi)__A, (__v16qi)__B);
285 1.1 mrg }
286 1.1 mrg
287 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
288 1.1 mrg _mm_shl_epi16(__m128i __A, __m128i __B)
289 1.1 mrg {
290 1.1 mrg return (__m128i) __builtin_ia32_vpshlw ((__v8hi)__A, (__v8hi)__B);
291 1.1 mrg }
292 1.1 mrg
293 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
294 1.1 mrg _mm_shl_epi32(__m128i __A, __m128i __B)
295 1.1 mrg {
296 1.1 mrg return (__m128i) __builtin_ia32_vpshld ((__v4si)__A, (__v4si)__B);
297 1.1 mrg }
298 1.1 mrg
299 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
300 1.1 mrg _mm_shl_epi64(__m128i __A, __m128i __B)
301 1.1 mrg {
302 1.1 mrg return (__m128i) __builtin_ia32_vpshlq ((__v2di)__A, (__v2di)__B);
303 1.1 mrg }
304 1.1 mrg
305 1.1 mrg
306 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
307 1.1 mrg _mm_sha_epi8(__m128i __A, __m128i __B)
308 1.1 mrg {
309 1.1 mrg return (__m128i) __builtin_ia32_vpshab ((__v16qi)__A, (__v16qi)__B);
310 1.1 mrg }
311 1.1 mrg
312 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
313 1.1 mrg _mm_sha_epi16(__m128i __A, __m128i __B)
314 1.1 mrg {
315 1.1 mrg return (__m128i) __builtin_ia32_vpshaw ((__v8hi)__A, (__v8hi)__B);
316 1.1 mrg }
317 1.1 mrg
318 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
319 1.1 mrg _mm_sha_epi32(__m128i __A, __m128i __B)
320 1.1 mrg {
321 1.1 mrg return (__m128i) __builtin_ia32_vpshad ((__v4si)__A, (__v4si)__B);
322 1.1 mrg }
323 1.1 mrg
324 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
325 1.1 mrg _mm_sha_epi64(__m128i __A, __m128i __B)
326 1.1 mrg {
327 1.1 mrg return (__m128i) __builtin_ia32_vpshaq ((__v2di)__A, (__v2di)__B);
328 1.1 mrg }
329 1.1 mrg
330 1.1 mrg /* Compare and Predicate Generation
331 1.1 mrg pcom (integer, unsinged bytes) */
332 1.1 mrg
333 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
334 1.1 mrg _mm_comlt_epu8(__m128i __A, __m128i __B)
335 1.1 mrg {
336 1.1 mrg return (__m128i) __builtin_ia32_vpcomltub ((__v16qi)__A, (__v16qi)__B);
337 1.1 mrg }
338 1.1 mrg
339 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
340 1.1 mrg _mm_comle_epu8(__m128i __A, __m128i __B)
341 1.1 mrg {
342 1.1 mrg return (__m128i) __builtin_ia32_vpcomleub ((__v16qi)__A, (__v16qi)__B);
343 1.1 mrg }
344 1.1 mrg
345 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
346 1.1 mrg _mm_comgt_epu8(__m128i __A, __m128i __B)
347 1.1 mrg {
348 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtub ((__v16qi)__A, (__v16qi)__B);
349 1.1 mrg }
350 1.1 mrg
351 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
352 1.1 mrg _mm_comge_epu8(__m128i __A, __m128i __B)
353 1.1 mrg {
354 1.1 mrg return (__m128i) __builtin_ia32_vpcomgeub ((__v16qi)__A, (__v16qi)__B);
355 1.1 mrg }
356 1.1 mrg
357 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
358 1.1 mrg _mm_comeq_epu8(__m128i __A, __m128i __B)
359 1.1 mrg {
360 1.1 mrg return (__m128i) __builtin_ia32_vpcomequb ((__v16qi)__A, (__v16qi)__B);
361 1.1 mrg }
362 1.1 mrg
363 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
364 1.1 mrg _mm_comneq_epu8(__m128i __A, __m128i __B)
365 1.1 mrg {
366 1.1 mrg return (__m128i) __builtin_ia32_vpcomnequb ((__v16qi)__A, (__v16qi)__B);
367 1.1 mrg }
368 1.1 mrg
369 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
370 1.1 mrg _mm_comfalse_epu8(__m128i __A, __m128i __B)
371 1.1 mrg {
372 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalseub ((__v16qi)__A, (__v16qi)__B);
373 1.1 mrg }
374 1.1 mrg
375 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
376 1.1 mrg _mm_comtrue_epu8(__m128i __A, __m128i __B)
377 1.1 mrg {
378 1.1 mrg return (__m128i) __builtin_ia32_vpcomtrueub ((__v16qi)__A, (__v16qi)__B);
379 1.1 mrg }
380 1.1 mrg
381 1.1 mrg /*pcom (integer, unsinged words) */
382 1.1 mrg
383 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
384 1.1 mrg _mm_comlt_epu16(__m128i __A, __m128i __B)
385 1.1 mrg {
386 1.1 mrg return (__m128i) __builtin_ia32_vpcomltuw ((__v8hi)__A, (__v8hi)__B);
387 1.1 mrg }
388 1.1 mrg
389 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
390 1.1 mrg _mm_comle_epu16(__m128i __A, __m128i __B)
391 1.1 mrg {
392 1.1 mrg return (__m128i) __builtin_ia32_vpcomleuw ((__v8hi)__A, (__v8hi)__B);
393 1.1 mrg }
394 1.1 mrg
395 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
396 1.1 mrg _mm_comgt_epu16(__m128i __A, __m128i __B)
397 1.1 mrg {
398 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtuw ((__v8hi)__A, (__v8hi)__B);
399 1.1 mrg }
400 1.1 mrg
401 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
402 1.1 mrg _mm_comge_epu16(__m128i __A, __m128i __B)
403 1.1 mrg {
404 1.1 mrg return (__m128i) __builtin_ia32_vpcomgeuw ((__v8hi)__A, (__v8hi)__B);
405 1.1 mrg }
406 1.1 mrg
407 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
408 1.1 mrg _mm_comeq_epu16(__m128i __A, __m128i __B)
409 1.1 mrg {
410 1.1 mrg return (__m128i) __builtin_ia32_vpcomequw ((__v8hi)__A, (__v8hi)__B);
411 1.1 mrg }
412 1.1 mrg
413 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
414 1.1 mrg _mm_comneq_epu16(__m128i __A, __m128i __B)
415 1.1 mrg {
416 1.1 mrg return (__m128i) __builtin_ia32_vpcomnequw ((__v8hi)__A, (__v8hi)__B);
417 1.1 mrg }
418 1.1 mrg
419 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
420 1.1 mrg _mm_comfalse_epu16(__m128i __A, __m128i __B)
421 1.1 mrg {
422 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalseuw ((__v8hi)__A, (__v8hi)__B);
423 1.1 mrg }
424 1.1 mrg
425 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
426 1.1 mrg _mm_comtrue_epu16(__m128i __A, __m128i __B)
427 1.1 mrg {
428 1.1 mrg return (__m128i) __builtin_ia32_vpcomtrueuw ((__v8hi)__A, (__v8hi)__B);
429 1.1 mrg }
430 1.1 mrg
431 1.1 mrg /*pcom (integer, unsinged double words) */
432 1.1 mrg
433 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
434 1.1 mrg _mm_comlt_epu32(__m128i __A, __m128i __B)
435 1.1 mrg {
436 1.1 mrg return (__m128i) __builtin_ia32_vpcomltud ((__v4si)__A, (__v4si)__B);
437 1.1 mrg }
438 1.1 mrg
439 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
440 1.1 mrg _mm_comle_epu32(__m128i __A, __m128i __B)
441 1.1 mrg {
442 1.1 mrg return (__m128i) __builtin_ia32_vpcomleud ((__v4si)__A, (__v4si)__B);
443 1.1 mrg }
444 1.1 mrg
445 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
446 1.1 mrg _mm_comgt_epu32(__m128i __A, __m128i __B)
447 1.1 mrg {
448 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtud ((__v4si)__A, (__v4si)__B);
449 1.1 mrg }
450 1.1 mrg
451 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
452 1.1 mrg _mm_comge_epu32(__m128i __A, __m128i __B)
453 1.1 mrg {
454 1.1 mrg return (__m128i) __builtin_ia32_vpcomgeud ((__v4si)__A, (__v4si)__B);
455 1.1 mrg }
456 1.1 mrg
457 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
458 1.1 mrg _mm_comeq_epu32(__m128i __A, __m128i __B)
459 1.1 mrg {
460 1.1 mrg return (__m128i) __builtin_ia32_vpcomequd ((__v4si)__A, (__v4si)__B);
461 1.1 mrg }
462 1.1 mrg
463 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
464 1.1 mrg _mm_comneq_epu32(__m128i __A, __m128i __B)
465 1.1 mrg {
466 1.1 mrg return (__m128i) __builtin_ia32_vpcomnequd ((__v4si)__A, (__v4si)__B);
467 1.1 mrg }
468 1.1 mrg
469 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
470 1.1 mrg _mm_comfalse_epu32(__m128i __A, __m128i __B)
471 1.1 mrg {
472 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalseud ((__v4si)__A, (__v4si)__B);
473 1.1 mrg }
474 1.1 mrg
475 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
476 1.1 mrg _mm_comtrue_epu32(__m128i __A, __m128i __B)
477 1.1 mrg {
478 1.1 mrg return (__m128i) __builtin_ia32_vpcomtrueud ((__v4si)__A, (__v4si)__B);
479 1.1 mrg }
480 1.1 mrg
481 1.1 mrg /*pcom (integer, unsinged quad words) */
482 1.1 mrg
483 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
484 1.1 mrg _mm_comlt_epu64(__m128i __A, __m128i __B)
485 1.1 mrg {
486 1.1 mrg return (__m128i) __builtin_ia32_vpcomltuq ((__v2di)__A, (__v2di)__B);
487 1.1 mrg }
488 1.1 mrg
489 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
490 1.1 mrg _mm_comle_epu64(__m128i __A, __m128i __B)
491 1.1 mrg {
492 1.1 mrg return (__m128i) __builtin_ia32_vpcomleuq ((__v2di)__A, (__v2di)__B);
493 1.1 mrg }
494 1.1 mrg
495 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
496 1.1 mrg _mm_comgt_epu64(__m128i __A, __m128i __B)
497 1.1 mrg {
498 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtuq ((__v2di)__A, (__v2di)__B);
499 1.1 mrg }
500 1.1 mrg
501 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
502 1.1 mrg _mm_comge_epu64(__m128i __A, __m128i __B)
503 1.1 mrg {
504 1.1 mrg return (__m128i) __builtin_ia32_vpcomgeuq ((__v2di)__A, (__v2di)__B);
505 1.1 mrg }
506 1.1 mrg
507 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
508 1.1 mrg _mm_comeq_epu64(__m128i __A, __m128i __B)
509 1.1 mrg {
510 1.1 mrg return (__m128i) __builtin_ia32_vpcomequq ((__v2di)__A, (__v2di)__B);
511 1.1 mrg }
512 1.1 mrg
513 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
514 1.1 mrg _mm_comneq_epu64(__m128i __A, __m128i __B)
515 1.1 mrg {
516 1.1 mrg return (__m128i) __builtin_ia32_vpcomnequq ((__v2di)__A, (__v2di)__B);
517 1.1 mrg }
518 1.1 mrg
519 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
520 1.1 mrg _mm_comfalse_epu64(__m128i __A, __m128i __B)
521 1.1 mrg {
522 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalseuq ((__v2di)__A, (__v2di)__B);
523 1.1 mrg }
524 1.1 mrg
525 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
526 1.1 mrg _mm_comtrue_epu64(__m128i __A, __m128i __B)
527 1.1 mrg {
528 1.1 mrg return (__m128i) __builtin_ia32_vpcomtrueuq ((__v2di)__A, (__v2di)__B);
529 1.1 mrg }
530 1.1 mrg
531 1.1 mrg /*pcom (integer, signed bytes) */
532 1.1 mrg
533 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
534 1.1 mrg _mm_comlt_epi8(__m128i __A, __m128i __B)
535 1.1 mrg {
536 1.1 mrg return (__m128i) __builtin_ia32_vpcomltb ((__v16qi)__A, (__v16qi)__B);
537 1.1 mrg }
538 1.1 mrg
539 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
540 1.1 mrg _mm_comle_epi8(__m128i __A, __m128i __B)
541 1.1 mrg {
542 1.1 mrg return (__m128i) __builtin_ia32_vpcomleb ((__v16qi)__A, (__v16qi)__B);
543 1.1 mrg }
544 1.1 mrg
545 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
546 1.1 mrg _mm_comgt_epi8(__m128i __A, __m128i __B)
547 1.1 mrg {
548 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtb ((__v16qi)__A, (__v16qi)__B);
549 1.1 mrg }
550 1.1 mrg
551 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
552 1.1 mrg _mm_comge_epi8(__m128i __A, __m128i __B)
553 1.1 mrg {
554 1.1 mrg return (__m128i) __builtin_ia32_vpcomgeb ((__v16qi)__A, (__v16qi)__B);
555 1.1 mrg }
556 1.1 mrg
557 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
558 1.1 mrg _mm_comeq_epi8(__m128i __A, __m128i __B)
559 1.1 mrg {
560 1.1 mrg return (__m128i) __builtin_ia32_vpcomeqb ((__v16qi)__A, (__v16qi)__B);
561 1.1 mrg }
562 1.1 mrg
563 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
564 1.1 mrg _mm_comneq_epi8(__m128i __A, __m128i __B)
565 1.1 mrg {
566 1.1 mrg return (__m128i) __builtin_ia32_vpcomneqb ((__v16qi)__A, (__v16qi)__B);
567 1.1 mrg }
568 1.1 mrg
569 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
570 1.1 mrg _mm_comfalse_epi8(__m128i __A, __m128i __B)
571 1.1 mrg {
572 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalseb ((__v16qi)__A, (__v16qi)__B);
573 1.1 mrg }
574 1.1 mrg
575 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
576 1.1 mrg _mm_comtrue_epi8(__m128i __A, __m128i __B)
577 1.1 mrg {
578 1.1 mrg return (__m128i) __builtin_ia32_vpcomtrueb ((__v16qi)__A, (__v16qi)__B);
579 1.1 mrg }
580 1.1 mrg
581 1.1 mrg /*pcom (integer, signed words) */
582 1.1 mrg
583 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
584 1.1 mrg _mm_comlt_epi16(__m128i __A, __m128i __B)
585 1.1 mrg {
586 1.1 mrg return (__m128i) __builtin_ia32_vpcomltw ((__v8hi)__A, (__v8hi)__B);
587 1.1 mrg }
588 1.1 mrg
589 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
590 1.1 mrg _mm_comle_epi16(__m128i __A, __m128i __B)
591 1.1 mrg {
592 1.1 mrg return (__m128i) __builtin_ia32_vpcomlew ((__v8hi)__A, (__v8hi)__B);
593 1.1 mrg }
594 1.1 mrg
595 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
596 1.1 mrg _mm_comgt_epi16(__m128i __A, __m128i __B)
597 1.1 mrg {
598 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtw ((__v8hi)__A, (__v8hi)__B);
599 1.1 mrg }
600 1.1 mrg
601 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
602 1.1 mrg _mm_comge_epi16(__m128i __A, __m128i __B)
603 1.1 mrg {
604 1.1 mrg return (__m128i) __builtin_ia32_vpcomgew ((__v8hi)__A, (__v8hi)__B);
605 1.1 mrg }
606 1.1 mrg
607 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
608 1.1 mrg _mm_comeq_epi16(__m128i __A, __m128i __B)
609 1.1 mrg {
610 1.1 mrg return (__m128i) __builtin_ia32_vpcomeqw ((__v8hi)__A, (__v8hi)__B);
611 1.1 mrg }
612 1.1 mrg
613 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
614 1.1 mrg _mm_comneq_epi16(__m128i __A, __m128i __B)
615 1.1 mrg {
616 1.1 mrg return (__m128i) __builtin_ia32_vpcomneqw ((__v8hi)__A, (__v8hi)__B);
617 1.1 mrg }
618 1.1 mrg
619 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
620 1.1 mrg _mm_comfalse_epi16(__m128i __A, __m128i __B)
621 1.1 mrg {
622 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalsew ((__v8hi)__A, (__v8hi)__B);
623 1.1 mrg }
624 1.1 mrg
625 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
626 1.1 mrg _mm_comtrue_epi16(__m128i __A, __m128i __B)
627 1.1 mrg {
628 1.1 mrg return (__m128i) __builtin_ia32_vpcomtruew ((__v8hi)__A, (__v8hi)__B);
629 1.1 mrg }
630 1.1 mrg
631 1.1 mrg /*pcom (integer, signed double words) */
632 1.1 mrg
633 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
634 1.1 mrg _mm_comlt_epi32(__m128i __A, __m128i __B)
635 1.1 mrg {
636 1.1 mrg return (__m128i) __builtin_ia32_vpcomltd ((__v4si)__A, (__v4si)__B);
637 1.1 mrg }
638 1.1 mrg
639 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
640 1.1 mrg _mm_comle_epi32(__m128i __A, __m128i __B)
641 1.1 mrg {
642 1.1 mrg return (__m128i) __builtin_ia32_vpcomled ((__v4si)__A, (__v4si)__B);
643 1.1 mrg }
644 1.1 mrg
645 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
646 1.1 mrg _mm_comgt_epi32(__m128i __A, __m128i __B)
647 1.1 mrg {
648 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtd ((__v4si)__A, (__v4si)__B);
649 1.1 mrg }
650 1.1 mrg
651 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
652 1.1 mrg _mm_comge_epi32(__m128i __A, __m128i __B)
653 1.1 mrg {
654 1.1 mrg return (__m128i) __builtin_ia32_vpcomged ((__v4si)__A, (__v4si)__B);
655 1.1 mrg }
656 1.1 mrg
657 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
658 1.1 mrg _mm_comeq_epi32(__m128i __A, __m128i __B)
659 1.1 mrg {
660 1.1 mrg return (__m128i) __builtin_ia32_vpcomeqd ((__v4si)__A, (__v4si)__B);
661 1.1 mrg }
662 1.1 mrg
663 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
664 1.1 mrg _mm_comneq_epi32(__m128i __A, __m128i __B)
665 1.1 mrg {
666 1.1 mrg return (__m128i) __builtin_ia32_vpcomneqd ((__v4si)__A, (__v4si)__B);
667 1.1 mrg }
668 1.1 mrg
669 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
670 1.1 mrg _mm_comfalse_epi32(__m128i __A, __m128i __B)
671 1.1 mrg {
672 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalsed ((__v4si)__A, (__v4si)__B);
673 1.1 mrg }
674 1.1 mrg
675 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
676 1.1 mrg _mm_comtrue_epi32(__m128i __A, __m128i __B)
677 1.1 mrg {
678 1.1 mrg return (__m128i) __builtin_ia32_vpcomtrued ((__v4si)__A, (__v4si)__B);
679 1.1 mrg }
680 1.1 mrg
681 1.1 mrg /*pcom (integer, signed quad words) */
682 1.1 mrg
683 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
684 1.1 mrg _mm_comlt_epi64(__m128i __A, __m128i __B)
685 1.1 mrg {
686 1.1 mrg return (__m128i) __builtin_ia32_vpcomltq ((__v2di)__A, (__v2di)__B);
687 1.1 mrg }
688 1.1 mrg
689 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
690 1.1 mrg _mm_comle_epi64(__m128i __A, __m128i __B)
691 1.1 mrg {
692 1.1 mrg return (__m128i) __builtin_ia32_vpcomleq ((__v2di)__A, (__v2di)__B);
693 1.1 mrg }
694 1.1 mrg
695 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
696 1.1 mrg _mm_comgt_epi64(__m128i __A, __m128i __B)
697 1.1 mrg {
698 1.1 mrg return (__m128i) __builtin_ia32_vpcomgtq ((__v2di)__A, (__v2di)__B);
699 1.1 mrg }
700 1.1 mrg
701 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
702 1.1 mrg _mm_comge_epi64(__m128i __A, __m128i __B)
703 1.1 mrg {
704 1.1 mrg return (__m128i) __builtin_ia32_vpcomgeq ((__v2di)__A, (__v2di)__B);
705 1.1 mrg }
706 1.1 mrg
707 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
708 1.1 mrg _mm_comeq_epi64(__m128i __A, __m128i __B)
709 1.1 mrg {
710 1.1 mrg return (__m128i) __builtin_ia32_vpcomeqq ((__v2di)__A, (__v2di)__B);
711 1.1 mrg }
712 1.1 mrg
713 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
714 1.1 mrg _mm_comneq_epi64(__m128i __A, __m128i __B)
715 1.1 mrg {
716 1.1 mrg return (__m128i) __builtin_ia32_vpcomneqq ((__v2di)__A, (__v2di)__B);
717 1.1 mrg }
718 1.1 mrg
719 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
720 1.1 mrg _mm_comfalse_epi64(__m128i __A, __m128i __B)
721 1.1 mrg {
722 1.1 mrg return (__m128i) __builtin_ia32_vpcomfalseq ((__v2di)__A, (__v2di)__B);
723 1.1 mrg }
724 1.1 mrg
725 1.1 mrg extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
726 1.1 mrg _mm_comtrue_epi64(__m128i __A, __m128i __B)
727 1.1 mrg {
728 1.1 mrg return (__m128i) __builtin_ia32_vpcomtrueq ((__v2di)__A, (__v2di)__B);
729 1.1 mrg }
730 1.1 mrg
731 1.1 mrg /* FRCZ */
732 1.1 mrg
733 1.1 mrg extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
734 1.1 mrg _mm_frcz_ps (__m128 __A)
735 1.1 mrg {
736 1.1 mrg return (__m128) __builtin_ia32_vfrczps ((__v4sf)__A);
737 1.1 mrg }
738 1.1 mrg
739 1.1 mrg extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
740 1.1 mrg _mm_frcz_pd (__m128d __A)
741 1.1 mrg {
742 1.1 mrg return (__m128d) __builtin_ia32_vfrczpd ((__v2df)__A);
743 1.1 mrg }
744 1.1 mrg
745 1.1 mrg extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
746 1.1 mrg _mm_frcz_ss (__m128 __A, __m128 __B)
747 1.1 mrg {
748 1.1 mrg return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
749 1.1 mrg }
750 1.1 mrg
751 1.1 mrg extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
752 1.1 mrg _mm_frcz_sd (__m128d __A, __m128d __B)
753 1.1 mrg {
754 1.1 mrg return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
755 1.1 mrg }
756 1.1 mrg
757 1.1 mrg extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
758 1.1 mrg _mm256_frcz_ps (__m256 __A)
759 1.1 mrg {
760 1.1 mrg return (__m256) __builtin_ia32_vfrczps256 ((__v8sf)__A);
761 1.1 mrg }
762 1.1 mrg
763 1.1 mrg extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
764 1.1 mrg _mm256_frcz_pd (__m256d __A)
765 1.1 mrg {
766 1.1 mrg return (__m256d) __builtin_ia32_vfrczpd256 ((__v4df)__A);
767 1.1 mrg }
768 1.1 mrg
769 1.1 mrg /* PERMIL2 */
770 1.1 mrg
771 1.1 mrg #ifdef __OPTIMIZE__
772 1.1 mrg extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
773 1.1 mrg _mm_permute2_pd (__m128d __X, __m128d __Y, __m128i __C, const int __I)
774 1.1 mrg {
775 1.1 mrg return (__m128d) __builtin_ia32_vpermil2pd ((__v2df)__X,
776 1.1 mrg (__v2df)__Y,
777 1.1 mrg (__v2di)__C,
778 1.1 mrg __I);
779 1.1 mrg }
780 1.1 mrg
781 1.1 mrg extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
782 1.1 mrg _mm256_permute2_pd (__m256d __X, __m256d __Y, __m256i __C, const int __I)
783 1.1 mrg {
784 1.1 mrg return (__m256d) __builtin_ia32_vpermil2pd256 ((__v4df)__X,
785 1.1 mrg (__v4df)__Y,
786 1.1 mrg (__v4di)__C,
787 1.1 mrg __I);
788 1.1 mrg }
789 1.1 mrg
790 1.1 mrg extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
791 1.1 mrg _mm_permute2_ps (__m128 __X, __m128 __Y, __m128i __C, const int __I)
792 1.1 mrg {
793 1.1 mrg return (__m128) __builtin_ia32_vpermil2ps ((__v4sf)__X,
794 1.1 mrg (__v4sf)__Y,
795 1.1 mrg (__v4si)__C,
796 1.1 mrg __I);
797 1.1 mrg }
798 1.1 mrg
799 1.1 mrg extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
800 1.1 mrg _mm256_permute2_ps (__m256 __X, __m256 __Y, __m256i __C, const int __I)
801 1.1 mrg {
802 1.1 mrg return (__m256) __builtin_ia32_vpermil2ps256 ((__v8sf)__X,
803 1.1 mrg (__v8sf)__Y,
804 1.1 mrg (__v8si)__C,
805 1.1 mrg __I);
806 1.1 mrg }
807 1.1 mrg #else
808 1.1 mrg #define _mm_permute2_pd(X, Y, C, I) \
809 1.1 mrg ((__m128d) __builtin_ia32_vpermil2pd ((__v2df)(__m128d)(X), \
810 1.1 mrg (__v2df)(__m128d)(Y), \
811 1.1 mrg (__v2di)(__m128d)(C), \
812 1.1 mrg (int)(I)))
813 1.1 mrg
814 1.1 mrg #define _mm256_permute2_pd(X, Y, C, I) \
815 1.1 mrg ((__m256d) __builtin_ia32_vpermil2pd256 ((__v4df)(__m256d)(X), \
816 1.1 mrg (__v4df)(__m256d)(Y), \
817 1.1 mrg (__v4di)(__m256d)(C), \
818 1.1 mrg (int)(I)))
819 1.1 mrg
820 1.1 mrg #define _mm_permute2_ps(X, Y, C, I) \
821 1.1 mrg ((__m128) __builtin_ia32_vpermil2ps ((__v4sf)(__m128)(X), \
822 1.1 mrg (__v4sf)(__m128)(Y), \
823 1.1 mrg (__v4si)(__m128)(C), \
824 1.1 mrg (int)(I)))
825 1.1 mrg
826 1.1 mrg #define _mm256_permute2_ps(X, Y, C, I) \
827 1.1 mrg ((__m256) __builtin_ia32_vpermil2ps256 ((__v8sf)(__m256)(X), \
828 1.1 mrg (__v8sf)(__m256)(Y), \
829 1.1 mrg (__v8si)(__m256)(C), \
830 1.1 mrg (int)(I)))
831 1.1 mrg #endif /* __OPTIMIZE__ */
832 1.1 mrg
833 1.1 mrg #endif /* __XOP__ */
834 1.1 mrg
835 1.1 mrg #endif /* _XOPMMINTRIN_H_INCLUDED */
836