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