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