1251662Sdim/*===---- xopintrin.h - XOP intrinsics -------------------------------------===
2239313Sdim *
3353358Sdim * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim * See https://llvm.org/LICENSE.txt for license information.
5353358Sdim * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6239313Sdim *
7239313Sdim *===-----------------------------------------------------------------------===
8239313Sdim */
9239313Sdim
10239313Sdim#ifndef __X86INTRIN_H
11251662Sdim#error "Never use <xopintrin.h> directly; include <x86intrin.h> instead."
12239313Sdim#endif
13239313Sdim
14239313Sdim#ifndef __XOPINTRIN_H
15239313Sdim#define __XOPINTRIN_H
16239313Sdim
17239313Sdim#include <fma4intrin.h>
18239313Sdim
19288943Sdim/* Define the default attributes for the functions in this file. */
20341825Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(128)))
21341825Sdim#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(256)))
22288943Sdim
23288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
24239313Sdim_mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
25239313Sdim{
26239313Sdim  return (__m128i)__builtin_ia32_vpmacssww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
27239313Sdim}
28239313Sdim
29288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
30239313Sdim_mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C)
31239313Sdim{
32239313Sdim  return (__m128i)__builtin_ia32_vpmacsww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
33239313Sdim}
34239313Sdim
35288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
36239313Sdim_mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C)
37239313Sdim{
38239313Sdim  return (__m128i)__builtin_ia32_vpmacsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
39239313Sdim}
40239313Sdim
41288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
42239313Sdim_mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C)
43239313Sdim{
44239313Sdim  return (__m128i)__builtin_ia32_vpmacswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
45239313Sdim}
46239313Sdim
47288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
48239313Sdim_mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C)
49239313Sdim{
50239313Sdim  return (__m128i)__builtin_ia32_vpmacssdd((__v4si)__A, (__v4si)__B, (__v4si)__C);
51239313Sdim}
52239313Sdim
53288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
54239313Sdim_mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C)
55239313Sdim{
56239313Sdim  return (__m128i)__builtin_ia32_vpmacsdd((__v4si)__A, (__v4si)__B, (__v4si)__C);
57239313Sdim}
58239313Sdim
59288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
60239313Sdim_mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C)
61239313Sdim{
62239313Sdim  return (__m128i)__builtin_ia32_vpmacssdql((__v4si)__A, (__v4si)__B, (__v2di)__C);
63239313Sdim}
64239313Sdim
65288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
66239313Sdim_mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C)
67239313Sdim{
68239313Sdim  return (__m128i)__builtin_ia32_vpmacsdql((__v4si)__A, (__v4si)__B, (__v2di)__C);
69239313Sdim}
70239313Sdim
71288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
72239313Sdim_mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C)
73239313Sdim{
74239313Sdim  return (__m128i)__builtin_ia32_vpmacssdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);
75239313Sdim}
76239313Sdim
77288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
78239313Sdim_mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C)
79239313Sdim{
80239313Sdim  return (__m128i)__builtin_ia32_vpmacsdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);
81239313Sdim}
82239313Sdim
83288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
84239313Sdim_mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C)
85239313Sdim{
86239313Sdim  return (__m128i)__builtin_ia32_vpmadcsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
87239313Sdim}
88239313Sdim
89288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
90239313Sdim_mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C)
91239313Sdim{
92239313Sdim  return (__m128i)__builtin_ia32_vpmadcswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
93239313Sdim}
94239313Sdim
95288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
96239313Sdim_mm_haddw_epi8(__m128i __A)
97239313Sdim{
98239313Sdim  return (__m128i)__builtin_ia32_vphaddbw((__v16qi)__A);
99239313Sdim}
100239313Sdim
101288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
102239313Sdim_mm_haddd_epi8(__m128i __A)
103239313Sdim{
104239313Sdim  return (__m128i)__builtin_ia32_vphaddbd((__v16qi)__A);
105239313Sdim}
106239313Sdim
107288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
108239313Sdim_mm_haddq_epi8(__m128i __A)
109239313Sdim{
110239313Sdim  return (__m128i)__builtin_ia32_vphaddbq((__v16qi)__A);
111239313Sdim}
112239313Sdim
113288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
114239313Sdim_mm_haddd_epi16(__m128i __A)
115239313Sdim{
116239313Sdim  return (__m128i)__builtin_ia32_vphaddwd((__v8hi)__A);
117239313Sdim}
118239313Sdim
119288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
120239313Sdim_mm_haddq_epi16(__m128i __A)
121239313Sdim{
122239313Sdim  return (__m128i)__builtin_ia32_vphaddwq((__v8hi)__A);
123239313Sdim}
124239313Sdim
125288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
126239313Sdim_mm_haddq_epi32(__m128i __A)
127239313Sdim{
128239313Sdim  return (__m128i)__builtin_ia32_vphadddq((__v4si)__A);
129239313Sdim}
130239313Sdim
131288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
132239313Sdim_mm_haddw_epu8(__m128i __A)
133239313Sdim{
134239313Sdim  return (__m128i)__builtin_ia32_vphaddubw((__v16qi)__A);
135239313Sdim}
136239313Sdim
137288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
138239313Sdim_mm_haddd_epu8(__m128i __A)
139239313Sdim{
140239313Sdim  return (__m128i)__builtin_ia32_vphaddubd((__v16qi)__A);
141239313Sdim}
142239313Sdim
143288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
144239313Sdim_mm_haddq_epu8(__m128i __A)
145239313Sdim{
146239313Sdim  return (__m128i)__builtin_ia32_vphaddubq((__v16qi)__A);
147239313Sdim}
148239313Sdim
149288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
150239313Sdim_mm_haddd_epu16(__m128i __A)
151239313Sdim{
152239313Sdim  return (__m128i)__builtin_ia32_vphadduwd((__v8hi)__A);
153239313Sdim}
154239313Sdim
155288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
156239313Sdim_mm_haddq_epu16(__m128i __A)
157239313Sdim{
158239313Sdim  return (__m128i)__builtin_ia32_vphadduwq((__v8hi)__A);
159239313Sdim}
160239313Sdim
161288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
162239313Sdim_mm_haddq_epu32(__m128i __A)
163239313Sdim{
164239313Sdim  return (__m128i)__builtin_ia32_vphaddudq((__v4si)__A);
165239313Sdim}
166239313Sdim
167288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
168239313Sdim_mm_hsubw_epi8(__m128i __A)
169239313Sdim{
170239313Sdim  return (__m128i)__builtin_ia32_vphsubbw((__v16qi)__A);
171239313Sdim}
172239313Sdim
173288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
174239313Sdim_mm_hsubd_epi16(__m128i __A)
175239313Sdim{
176239313Sdim  return (__m128i)__builtin_ia32_vphsubwd((__v8hi)__A);
177239313Sdim}
178239313Sdim
179288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
180239313Sdim_mm_hsubq_epi32(__m128i __A)
181239313Sdim{
182239313Sdim  return (__m128i)__builtin_ia32_vphsubdq((__v4si)__A);
183239313Sdim}
184239313Sdim
185288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
186239313Sdim_mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C)
187239313Sdim{
188321369Sdim  return (__m128i)(((__v2du)__A & (__v2du)__C) | ((__v2du)__B & ~(__v2du)__C));
189239313Sdim}
190239313Sdim
191341825Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS256
192239313Sdim_mm256_cmov_si256(__m256i __A, __m256i __B, __m256i __C)
193239313Sdim{
194321369Sdim  return (__m256i)(((__v4du)__A & (__v4du)__C) | ((__v4du)__B & ~(__v4du)__C));
195239313Sdim}
196239313Sdim
197288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
198239313Sdim_mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)
199239313Sdim{
200239313Sdim  return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);
201239313Sdim}
202239313Sdim
203288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
204239313Sdim_mm_rot_epi8(__m128i __A, __m128i __B)
205239313Sdim{
206239313Sdim  return (__m128i)__builtin_ia32_vprotb((__v16qi)__A, (__v16qi)__B);
207239313Sdim}
208239313Sdim
209288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
210239313Sdim_mm_rot_epi16(__m128i __A, __m128i __B)
211239313Sdim{
212239313Sdim  return (__m128i)__builtin_ia32_vprotw((__v8hi)__A, (__v8hi)__B);
213239313Sdim}
214239313Sdim
215288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
216239313Sdim_mm_rot_epi32(__m128i __A, __m128i __B)
217239313Sdim{
218239313Sdim  return (__m128i)__builtin_ia32_vprotd((__v4si)__A, (__v4si)__B);
219239313Sdim}
220239313Sdim
221288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
222239313Sdim_mm_rot_epi64(__m128i __A, __m128i __B)
223239313Sdim{
224239313Sdim  return (__m128i)__builtin_ia32_vprotq((__v2di)__A, (__v2di)__B);
225239313Sdim}
226239313Sdim
227341825Sdim#define _mm_roti_epi8(A, N) \
228341825Sdim  (__m128i)__builtin_ia32_vprotbi((__v16qi)(__m128i)(A), (N))
229239313Sdim
230341825Sdim#define _mm_roti_epi16(A, N) \
231341825Sdim  (__m128i)__builtin_ia32_vprotwi((__v8hi)(__m128i)(A), (N))
232239313Sdim
233341825Sdim#define _mm_roti_epi32(A, N) \
234341825Sdim  (__m128i)__builtin_ia32_vprotdi((__v4si)(__m128i)(A), (N))
235239313Sdim
236341825Sdim#define _mm_roti_epi64(A, N) \
237341825Sdim  (__m128i)__builtin_ia32_vprotqi((__v2di)(__m128i)(A), (N))
238239313Sdim
239288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
240239313Sdim_mm_shl_epi8(__m128i __A, __m128i __B)
241239313Sdim{
242239313Sdim  return (__m128i)__builtin_ia32_vpshlb((__v16qi)__A, (__v16qi)__B);
243239313Sdim}
244239313Sdim
245288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
246239313Sdim_mm_shl_epi16(__m128i __A, __m128i __B)
247239313Sdim{
248239313Sdim  return (__m128i)__builtin_ia32_vpshlw((__v8hi)__A, (__v8hi)__B);
249239313Sdim}
250239313Sdim
251288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
252239313Sdim_mm_shl_epi32(__m128i __A, __m128i __B)
253239313Sdim{
254239313Sdim  return (__m128i)__builtin_ia32_vpshld((__v4si)__A, (__v4si)__B);
255239313Sdim}
256239313Sdim
257288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
258239313Sdim_mm_shl_epi64(__m128i __A, __m128i __B)
259239313Sdim{
260239313Sdim  return (__m128i)__builtin_ia32_vpshlq((__v2di)__A, (__v2di)__B);
261239313Sdim}
262239313Sdim
263288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
264239313Sdim_mm_sha_epi8(__m128i __A, __m128i __B)
265239313Sdim{
266239313Sdim  return (__m128i)__builtin_ia32_vpshab((__v16qi)__A, (__v16qi)__B);
267239313Sdim}
268239313Sdim
269288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
270239313Sdim_mm_sha_epi16(__m128i __A, __m128i __B)
271239313Sdim{
272239313Sdim  return (__m128i)__builtin_ia32_vpshaw((__v8hi)__A, (__v8hi)__B);
273239313Sdim}
274239313Sdim
275288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
276239313Sdim_mm_sha_epi32(__m128i __A, __m128i __B)
277239313Sdim{
278239313Sdim  return (__m128i)__builtin_ia32_vpshad((__v4si)__A, (__v4si)__B);
279239313Sdim}
280239313Sdim
281288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
282239313Sdim_mm_sha_epi64(__m128i __A, __m128i __B)
283239313Sdim{
284239313Sdim  return (__m128i)__builtin_ia32_vpshaq((__v2di)__A, (__v2di)__B);
285239313Sdim}
286239313Sdim
287341825Sdim#define _mm_com_epu8(A, B, N) \
288296417Sdim  (__m128i)__builtin_ia32_vpcomub((__v16qi)(__m128i)(A), \
289341825Sdim                                  (__v16qi)(__m128i)(B), (N))
290239313Sdim
291341825Sdim#define _mm_com_epu16(A, B, N) \
292296417Sdim  (__m128i)__builtin_ia32_vpcomuw((__v8hi)(__m128i)(A), \
293341825Sdim                                  (__v8hi)(__m128i)(B), (N))
294239313Sdim
295341825Sdim#define _mm_com_epu32(A, B, N) \
296296417Sdim  (__m128i)__builtin_ia32_vpcomud((__v4si)(__m128i)(A), \
297341825Sdim                                  (__v4si)(__m128i)(B), (N))
298239313Sdim
299341825Sdim#define _mm_com_epu64(A, B, N) \
300296417Sdim  (__m128i)__builtin_ia32_vpcomuq((__v2di)(__m128i)(A), \
301341825Sdim                                  (__v2di)(__m128i)(B), (N))
302239313Sdim
303341825Sdim#define _mm_com_epi8(A, B, N) \
304296417Sdim  (__m128i)__builtin_ia32_vpcomb((__v16qi)(__m128i)(A), \
305341825Sdim                                 (__v16qi)(__m128i)(B), (N))
306239313Sdim
307341825Sdim#define _mm_com_epi16(A, B, N) \
308296417Sdim  (__m128i)__builtin_ia32_vpcomw((__v8hi)(__m128i)(A), \
309341825Sdim                                 (__v8hi)(__m128i)(B), (N))
310239313Sdim
311341825Sdim#define _mm_com_epi32(A, B, N) \
312296417Sdim  (__m128i)__builtin_ia32_vpcomd((__v4si)(__m128i)(A), \
313341825Sdim                                 (__v4si)(__m128i)(B), (N))
314239313Sdim
315341825Sdim#define _mm_com_epi64(A, B, N) \
316296417Sdim  (__m128i)__builtin_ia32_vpcomq((__v2di)(__m128i)(A), \
317341825Sdim                                 (__v2di)(__m128i)(B), (N))
318239313Sdim
319261991Sdim#define _MM_PCOMCTRL_LT    0
320261991Sdim#define _MM_PCOMCTRL_LE    1
321261991Sdim#define _MM_PCOMCTRL_GT    2
322261991Sdim#define _MM_PCOMCTRL_GE    3
323261991Sdim#define _MM_PCOMCTRL_EQ    4
324261991Sdim#define _MM_PCOMCTRL_NEQ   5
325261991Sdim#define _MM_PCOMCTRL_FALSE 6
326261991Sdim#define _MM_PCOMCTRL_TRUE  7
327261991Sdim
328288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
329261991Sdim_mm_comlt_epu8(__m128i __A, __m128i __B)
330261991Sdim{
331261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT);
332261991Sdim}
333261991Sdim
334288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
335261991Sdim_mm_comle_epu8(__m128i __A, __m128i __B)
336261991Sdim{
337261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE);
338261991Sdim}
339261991Sdim
340288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
341261991Sdim_mm_comgt_epu8(__m128i __A, __m128i __B)
342261991Sdim{
343261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT);
344261991Sdim}
345261991Sdim
346288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
347261991Sdim_mm_comge_epu8(__m128i __A, __m128i __B)
348261991Sdim{
349261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE);
350261991Sdim}
351261991Sdim
352288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
353261991Sdim_mm_comeq_epu8(__m128i __A, __m128i __B)
354261991Sdim{
355261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ);
356261991Sdim}
357261991Sdim
358288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
359261991Sdim_mm_comneq_epu8(__m128i __A, __m128i __B)
360261991Sdim{
361261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ);
362261991Sdim}
363261991Sdim
364288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
365261991Sdim_mm_comfalse_epu8(__m128i __A, __m128i __B)
366261991Sdim{
367261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE);
368261991Sdim}
369261991Sdim
370288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
371261991Sdim_mm_comtrue_epu8(__m128i __A, __m128i __B)
372261991Sdim{
373261991Sdim  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE);
374261991Sdim}
375261991Sdim
376288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
377261991Sdim_mm_comlt_epu16(__m128i __A, __m128i __B)
378261991Sdim{
379261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT);
380261991Sdim}
381261991Sdim
382288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
383261991Sdim_mm_comle_epu16(__m128i __A, __m128i __B)
384261991Sdim{
385261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE);
386261991Sdim}
387261991Sdim
388288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
389261991Sdim_mm_comgt_epu16(__m128i __A, __m128i __B)
390261991Sdim{
391261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT);
392261991Sdim}
393261991Sdim
394288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
395261991Sdim_mm_comge_epu16(__m128i __A, __m128i __B)
396261991Sdim{
397261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE);
398261991Sdim}
399261991Sdim
400288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
401261991Sdim_mm_comeq_epu16(__m128i __A, __m128i __B)
402261991Sdim{
403261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ);
404261991Sdim}
405261991Sdim
406288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
407261991Sdim_mm_comneq_epu16(__m128i __A, __m128i __B)
408261991Sdim{
409261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ);
410261991Sdim}
411261991Sdim
412288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
413261991Sdim_mm_comfalse_epu16(__m128i __A, __m128i __B)
414261991Sdim{
415261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE);
416261991Sdim}
417261991Sdim
418288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
419261991Sdim_mm_comtrue_epu16(__m128i __A, __m128i __B)
420261991Sdim{
421261991Sdim  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE);
422261991Sdim}
423261991Sdim
424288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
425261991Sdim_mm_comlt_epu32(__m128i __A, __m128i __B)
426261991Sdim{
427261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT);
428261991Sdim}
429261991Sdim
430288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
431261991Sdim_mm_comle_epu32(__m128i __A, __m128i __B)
432261991Sdim{
433261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE);
434261991Sdim}
435261991Sdim
436288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
437261991Sdim_mm_comgt_epu32(__m128i __A, __m128i __B)
438261991Sdim{
439261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT);
440261991Sdim}
441261991Sdim
442288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
443261991Sdim_mm_comge_epu32(__m128i __A, __m128i __B)
444261991Sdim{
445261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE);
446261991Sdim}
447261991Sdim
448288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
449261991Sdim_mm_comeq_epu32(__m128i __A, __m128i __B)
450261991Sdim{
451261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ);
452261991Sdim}
453261991Sdim
454288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
455261991Sdim_mm_comneq_epu32(__m128i __A, __m128i __B)
456261991Sdim{
457261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ);
458261991Sdim}
459261991Sdim
460288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
461261991Sdim_mm_comfalse_epu32(__m128i __A, __m128i __B)
462261991Sdim{
463261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE);
464261991Sdim}
465261991Sdim
466288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
467261991Sdim_mm_comtrue_epu32(__m128i __A, __m128i __B)
468261991Sdim{
469261991Sdim  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE);
470261991Sdim}
471261991Sdim
472288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
473261991Sdim_mm_comlt_epu64(__m128i __A, __m128i __B)
474261991Sdim{
475261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT);
476261991Sdim}
477261991Sdim
478288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
479261991Sdim_mm_comle_epu64(__m128i __A, __m128i __B)
480261991Sdim{
481261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE);
482261991Sdim}
483261991Sdim
484288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
485261991Sdim_mm_comgt_epu64(__m128i __A, __m128i __B)
486261991Sdim{
487261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT);
488261991Sdim}
489261991Sdim
490288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
491261991Sdim_mm_comge_epu64(__m128i __A, __m128i __B)
492261991Sdim{
493261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE);
494261991Sdim}
495261991Sdim
496288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
497261991Sdim_mm_comeq_epu64(__m128i __A, __m128i __B)
498261991Sdim{
499261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ);
500261991Sdim}
501261991Sdim
502288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
503261991Sdim_mm_comneq_epu64(__m128i __A, __m128i __B)
504261991Sdim{
505261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ);
506261991Sdim}
507261991Sdim
508288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
509261991Sdim_mm_comfalse_epu64(__m128i __A, __m128i __B)
510261991Sdim{
511261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE);
512261991Sdim}
513261991Sdim
514288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
515261991Sdim_mm_comtrue_epu64(__m128i __A, __m128i __B)
516261991Sdim{
517261991Sdim  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE);
518261991Sdim}
519261991Sdim
520288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
521261991Sdim_mm_comlt_epi8(__m128i __A, __m128i __B)
522261991Sdim{
523261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT);
524261991Sdim}
525261991Sdim
526288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
527261991Sdim_mm_comle_epi8(__m128i __A, __m128i __B)
528261991Sdim{
529261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE);
530261991Sdim}
531261991Sdim
532288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
533261991Sdim_mm_comgt_epi8(__m128i __A, __m128i __B)
534261991Sdim{
535261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT);
536261991Sdim}
537261991Sdim
538288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
539261991Sdim_mm_comge_epi8(__m128i __A, __m128i __B)
540261991Sdim{
541261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE);
542261991Sdim}
543261991Sdim
544288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
545261991Sdim_mm_comeq_epi8(__m128i __A, __m128i __B)
546261991Sdim{
547261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ);
548261991Sdim}
549261991Sdim
550288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
551261991Sdim_mm_comneq_epi8(__m128i __A, __m128i __B)
552261991Sdim{
553261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ);
554261991Sdim}
555261991Sdim
556288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
557261991Sdim_mm_comfalse_epi8(__m128i __A, __m128i __B)
558261991Sdim{
559261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE);
560261991Sdim}
561261991Sdim
562288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
563261991Sdim_mm_comtrue_epi8(__m128i __A, __m128i __B)
564261991Sdim{
565261991Sdim  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE);
566261991Sdim}
567261991Sdim
568288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
569261991Sdim_mm_comlt_epi16(__m128i __A, __m128i __B)
570261991Sdim{
571261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT);
572261991Sdim}
573261991Sdim
574288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
575261991Sdim_mm_comle_epi16(__m128i __A, __m128i __B)
576261991Sdim{
577261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE);
578261991Sdim}
579261991Sdim
580288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
581261991Sdim_mm_comgt_epi16(__m128i __A, __m128i __B)
582261991Sdim{
583261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT);
584261991Sdim}
585261991Sdim
586288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
587261991Sdim_mm_comge_epi16(__m128i __A, __m128i __B)
588261991Sdim{
589261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE);
590261991Sdim}
591261991Sdim
592288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
593261991Sdim_mm_comeq_epi16(__m128i __A, __m128i __B)
594261991Sdim{
595261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ);
596261991Sdim}
597261991Sdim
598288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
599261991Sdim_mm_comneq_epi16(__m128i __A, __m128i __B)
600261991Sdim{
601261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ);
602261991Sdim}
603261991Sdim
604288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
605261991Sdim_mm_comfalse_epi16(__m128i __A, __m128i __B)
606261991Sdim{
607261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE);
608261991Sdim}
609261991Sdim
610288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
611261991Sdim_mm_comtrue_epi16(__m128i __A, __m128i __B)
612261991Sdim{
613261991Sdim  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE);
614261991Sdim}
615261991Sdim
616288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
617261991Sdim_mm_comlt_epi32(__m128i __A, __m128i __B)
618261991Sdim{
619261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT);
620261991Sdim}
621261991Sdim
622288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
623261991Sdim_mm_comle_epi32(__m128i __A, __m128i __B)
624261991Sdim{
625261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE);
626261991Sdim}
627261991Sdim
628288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
629261991Sdim_mm_comgt_epi32(__m128i __A, __m128i __B)
630261991Sdim{
631261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT);
632261991Sdim}
633261991Sdim
634288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
635261991Sdim_mm_comge_epi32(__m128i __A, __m128i __B)
636261991Sdim{
637261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE);
638261991Sdim}
639261991Sdim
640288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
641261991Sdim_mm_comeq_epi32(__m128i __A, __m128i __B)
642261991Sdim{
643261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ);
644261991Sdim}
645261991Sdim
646288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
647261991Sdim_mm_comneq_epi32(__m128i __A, __m128i __B)
648261991Sdim{
649261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ);
650261991Sdim}
651261991Sdim
652288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
653261991Sdim_mm_comfalse_epi32(__m128i __A, __m128i __B)
654261991Sdim{
655261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE);
656261991Sdim}
657261991Sdim
658288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
659261991Sdim_mm_comtrue_epi32(__m128i __A, __m128i __B)
660261991Sdim{
661261991Sdim  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE);
662261991Sdim}
663261991Sdim
664288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
665261991Sdim_mm_comlt_epi64(__m128i __A, __m128i __B)
666261991Sdim{
667261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT);
668261991Sdim}
669261991Sdim
670288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
671261991Sdim_mm_comle_epi64(__m128i __A, __m128i __B)
672261991Sdim{
673261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE);
674261991Sdim}
675261991Sdim
676288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
677261991Sdim_mm_comgt_epi64(__m128i __A, __m128i __B)
678261991Sdim{
679261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT);
680261991Sdim}
681261991Sdim
682288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
683261991Sdim_mm_comge_epi64(__m128i __A, __m128i __B)
684261991Sdim{
685261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE);
686261991Sdim}
687261991Sdim
688288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
689261991Sdim_mm_comeq_epi64(__m128i __A, __m128i __B)
690261991Sdim{
691261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ);
692261991Sdim}
693261991Sdim
694288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
695261991Sdim_mm_comneq_epi64(__m128i __A, __m128i __B)
696261991Sdim{
697261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ);
698261991Sdim}
699261991Sdim
700288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
701261991Sdim_mm_comfalse_epi64(__m128i __A, __m128i __B)
702261991Sdim{
703261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE);
704261991Sdim}
705261991Sdim
706288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS
707261991Sdim_mm_comtrue_epi64(__m128i __A, __m128i __B)
708261991Sdim{
709261991Sdim  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE);
710261991Sdim}
711261991Sdim
712341825Sdim#define _mm_permute2_pd(X, Y, C, I) \
713296417Sdim  (__m128d)__builtin_ia32_vpermil2pd((__v2df)(__m128d)(X), \
714296417Sdim                                     (__v2df)(__m128d)(Y), \
715341825Sdim                                     (__v2di)(__m128i)(C), (I))
716239313Sdim
717341825Sdim#define _mm256_permute2_pd(X, Y, C, I) \
718296417Sdim  (__m256d)__builtin_ia32_vpermil2pd256((__v4df)(__m256d)(X), \
719296417Sdim                                        (__v4df)(__m256d)(Y), \
720341825Sdim                                        (__v4di)(__m256i)(C), (I))
721239313Sdim
722341825Sdim#define _mm_permute2_ps(X, Y, C, I) \
723296417Sdim  (__m128)__builtin_ia32_vpermil2ps((__v4sf)(__m128)(X), (__v4sf)(__m128)(Y), \
724341825Sdim                                    (__v4si)(__m128i)(C), (I))
725239313Sdim
726341825Sdim#define _mm256_permute2_ps(X, Y, C, I) \
727296417Sdim  (__m256)__builtin_ia32_vpermil2ps256((__v8sf)(__m256)(X), \
728296417Sdim                                       (__v8sf)(__m256)(Y), \
729341825Sdim                                       (__v8si)(__m256i)(C), (I))
730239313Sdim
731288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
732239313Sdim_mm_frcz_ss(__m128 __A)
733239313Sdim{
734239313Sdim  return (__m128)__builtin_ia32_vfrczss((__v4sf)__A);
735239313Sdim}
736239313Sdim
737288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
738239313Sdim_mm_frcz_sd(__m128d __A)
739239313Sdim{
740239313Sdim  return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A);
741239313Sdim}
742239313Sdim
743288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS
744239313Sdim_mm_frcz_ps(__m128 __A)
745239313Sdim{
746239313Sdim  return (__m128)__builtin_ia32_vfrczps((__v4sf)__A);
747239313Sdim}
748239313Sdim
749288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS
750239313Sdim_mm_frcz_pd(__m128d __A)
751239313Sdim{
752239313Sdim  return (__m128d)__builtin_ia32_vfrczpd((__v2df)__A);
753239313Sdim}
754239313Sdim
755341825Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS256
756239313Sdim_mm256_frcz_ps(__m256 __A)
757239313Sdim{
758239313Sdim  return (__m256)__builtin_ia32_vfrczps256((__v8sf)__A);
759239313Sdim}
760239313Sdim
761341825Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS256
762239313Sdim_mm256_frcz_pd(__m256d __A)
763239313Sdim{
764239313Sdim  return (__m256d)__builtin_ia32_vfrczpd256((__v4df)__A);
765239313Sdim}
766239313Sdim
767288943Sdim#undef __DEFAULT_FN_ATTRS
768341825Sdim#undef __DEFAULT_FN_ATTRS256
769288943Sdim
770239313Sdim#endif /* __XOPINTRIN_H */
771