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