Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
/*===---- xopintrin.h - XOP intrinsics -------------------------------------===
2
 *
3
 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
 * See https://llvm.org/LICENSE.txt for license information.
5
 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
 *
7
 *===-----------------------------------------------------------------------===
8
 */
9
 
10
#ifndef __X86INTRIN_H
11
#error "Never use <xopintrin.h> directly; include <x86intrin.h> instead."
12
#endif
13
 
14
#ifndef __XOPINTRIN_H
15
#define __XOPINTRIN_H
16
 
17
#include <fma4intrin.h>
18
 
19
/* Define the default attributes for the functions in this file. */
20
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(128)))
21
#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(256)))
22
 
23
static __inline__ __m128i __DEFAULT_FN_ATTRS
24
_mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)
25
{
26
  return (__m128i)__builtin_ia32_vpmacssww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
27
}
28
 
29
static __inline__ __m128i __DEFAULT_FN_ATTRS
30
_mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C)
31
{
32
  return (__m128i)__builtin_ia32_vpmacsww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);
33
}
34
 
35
static __inline__ __m128i __DEFAULT_FN_ATTRS
36
_mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C)
37
{
38
  return (__m128i)__builtin_ia32_vpmacsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
39
}
40
 
41
static __inline__ __m128i __DEFAULT_FN_ATTRS
42
_mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C)
43
{
44
  return (__m128i)__builtin_ia32_vpmacswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
45
}
46
 
47
static __inline__ __m128i __DEFAULT_FN_ATTRS
48
_mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C)
49
{
50
  return (__m128i)__builtin_ia32_vpmacssdd((__v4si)__A, (__v4si)__B, (__v4si)__C);
51
}
52
 
53
static __inline__ __m128i __DEFAULT_FN_ATTRS
54
_mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C)
55
{
56
  return (__m128i)__builtin_ia32_vpmacsdd((__v4si)__A, (__v4si)__B, (__v4si)__C);
57
}
58
 
59
static __inline__ __m128i __DEFAULT_FN_ATTRS
60
_mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C)
61
{
62
  return (__m128i)__builtin_ia32_vpmacssdql((__v4si)__A, (__v4si)__B, (__v2di)__C);
63
}
64
 
65
static __inline__ __m128i __DEFAULT_FN_ATTRS
66
_mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C)
67
{
68
  return (__m128i)__builtin_ia32_vpmacsdql((__v4si)__A, (__v4si)__B, (__v2di)__C);
69
}
70
 
71
static __inline__ __m128i __DEFAULT_FN_ATTRS
72
_mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C)
73
{
74
  return (__m128i)__builtin_ia32_vpmacssdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);
75
}
76
 
77
static __inline__ __m128i __DEFAULT_FN_ATTRS
78
_mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C)
79
{
80
  return (__m128i)__builtin_ia32_vpmacsdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);
81
}
82
 
83
static __inline__ __m128i __DEFAULT_FN_ATTRS
84
_mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C)
85
{
86
  return (__m128i)__builtin_ia32_vpmadcsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
87
}
88
 
89
static __inline__ __m128i __DEFAULT_FN_ATTRS
90
_mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C)
91
{
92
  return (__m128i)__builtin_ia32_vpmadcswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);
93
}
94
 
95
static __inline__ __m128i __DEFAULT_FN_ATTRS
96
_mm_haddw_epi8(__m128i __A)
97
{
98
  return (__m128i)__builtin_ia32_vphaddbw((__v16qi)__A);
99
}
100
 
101
static __inline__ __m128i __DEFAULT_FN_ATTRS
102
_mm_haddd_epi8(__m128i __A)
103
{
104
  return (__m128i)__builtin_ia32_vphaddbd((__v16qi)__A);
105
}
106
 
107
static __inline__ __m128i __DEFAULT_FN_ATTRS
108
_mm_haddq_epi8(__m128i __A)
109
{
110
  return (__m128i)__builtin_ia32_vphaddbq((__v16qi)__A);
111
}
112
 
113
static __inline__ __m128i __DEFAULT_FN_ATTRS
114
_mm_haddd_epi16(__m128i __A)
115
{
116
  return (__m128i)__builtin_ia32_vphaddwd((__v8hi)__A);
117
}
118
 
119
static __inline__ __m128i __DEFAULT_FN_ATTRS
120
_mm_haddq_epi16(__m128i __A)
121
{
122
  return (__m128i)__builtin_ia32_vphaddwq((__v8hi)__A);
123
}
124
 
125
static __inline__ __m128i __DEFAULT_FN_ATTRS
126
_mm_haddq_epi32(__m128i __A)
127
{
128
  return (__m128i)__builtin_ia32_vphadddq((__v4si)__A);
129
}
130
 
131
static __inline__ __m128i __DEFAULT_FN_ATTRS
132
_mm_haddw_epu8(__m128i __A)
133
{
134
  return (__m128i)__builtin_ia32_vphaddubw((__v16qi)__A);
135
}
136
 
137
static __inline__ __m128i __DEFAULT_FN_ATTRS
138
_mm_haddd_epu8(__m128i __A)
139
{
140
  return (__m128i)__builtin_ia32_vphaddubd((__v16qi)__A);
141
}
142
 
143
static __inline__ __m128i __DEFAULT_FN_ATTRS
144
_mm_haddq_epu8(__m128i __A)
145
{
146
  return (__m128i)__builtin_ia32_vphaddubq((__v16qi)__A);
147
}
148
 
149
static __inline__ __m128i __DEFAULT_FN_ATTRS
150
_mm_haddd_epu16(__m128i __A)
151
{
152
  return (__m128i)__builtin_ia32_vphadduwd((__v8hi)__A);
153
}
154
 
155
static __inline__ __m128i __DEFAULT_FN_ATTRS
156
_mm_haddq_epu16(__m128i __A)
157
{
158
  return (__m128i)__builtin_ia32_vphadduwq((__v8hi)__A);
159
}
160
 
161
static __inline__ __m128i __DEFAULT_FN_ATTRS
162
_mm_haddq_epu32(__m128i __A)
163
{
164
  return (__m128i)__builtin_ia32_vphaddudq((__v4si)__A);
165
}
166
 
167
static __inline__ __m128i __DEFAULT_FN_ATTRS
168
_mm_hsubw_epi8(__m128i __A)
169
{
170
  return (__m128i)__builtin_ia32_vphsubbw((__v16qi)__A);
171
}
172
 
173
static __inline__ __m128i __DEFAULT_FN_ATTRS
174
_mm_hsubd_epi16(__m128i __A)
175
{
176
  return (__m128i)__builtin_ia32_vphsubwd((__v8hi)__A);
177
}
178
 
179
static __inline__ __m128i __DEFAULT_FN_ATTRS
180
_mm_hsubq_epi32(__m128i __A)
181
{
182
  return (__m128i)__builtin_ia32_vphsubdq((__v4si)__A);
183
}
184
 
185
static __inline__ __m128i __DEFAULT_FN_ATTRS
186
_mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C)
187
{
188
  return (__m128i)(((__v2du)__A & (__v2du)__C) | ((__v2du)__B & ~(__v2du)__C));
189
}
190
 
191
static __inline__ __m256i __DEFAULT_FN_ATTRS256
192
_mm256_cmov_si256(__m256i __A, __m256i __B, __m256i __C)
193
{
194
  return (__m256i)(((__v4du)__A & (__v4du)__C) | ((__v4du)__B & ~(__v4du)__C));
195
}
196
 
197
static __inline__ __m128i __DEFAULT_FN_ATTRS
198
_mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)
199
{
200
  return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);
201
}
202
 
203
static __inline__ __m128i __DEFAULT_FN_ATTRS
204
_mm_rot_epi8(__m128i __A, __m128i __B)
205
{
206
  return (__m128i)__builtin_ia32_vprotb((__v16qi)__A, (__v16qi)__B);
207
}
208
 
209
static __inline__ __m128i __DEFAULT_FN_ATTRS
210
_mm_rot_epi16(__m128i __A, __m128i __B)
211
{
212
  return (__m128i)__builtin_ia32_vprotw((__v8hi)__A, (__v8hi)__B);
213
}
214
 
215
static __inline__ __m128i __DEFAULT_FN_ATTRS
216
_mm_rot_epi32(__m128i __A, __m128i __B)
217
{
218
  return (__m128i)__builtin_ia32_vprotd((__v4si)__A, (__v4si)__B);
219
}
220
 
221
static __inline__ __m128i __DEFAULT_FN_ATTRS
222
_mm_rot_epi64(__m128i __A, __m128i __B)
223
{
224
  return (__m128i)__builtin_ia32_vprotq((__v2di)__A, (__v2di)__B);
225
}
226
 
227
#define _mm_roti_epi8(A, N) \
228
  ((__m128i)__builtin_ia32_vprotbi((__v16qi)(__m128i)(A), (N)))
229
 
230
#define _mm_roti_epi16(A, N) \
231
  ((__m128i)__builtin_ia32_vprotwi((__v8hi)(__m128i)(A), (N)))
232
 
233
#define _mm_roti_epi32(A, N) \
234
  ((__m128i)__builtin_ia32_vprotdi((__v4si)(__m128i)(A), (N)))
235
 
236
#define _mm_roti_epi64(A, N) \
237
  ((__m128i)__builtin_ia32_vprotqi((__v2di)(__m128i)(A), (N)))
238
 
239
static __inline__ __m128i __DEFAULT_FN_ATTRS
240
_mm_shl_epi8(__m128i __A, __m128i __B)
241
{
242
  return (__m128i)__builtin_ia32_vpshlb((__v16qi)__A, (__v16qi)__B);
243
}
244
 
245
static __inline__ __m128i __DEFAULT_FN_ATTRS
246
_mm_shl_epi16(__m128i __A, __m128i __B)
247
{
248
  return (__m128i)__builtin_ia32_vpshlw((__v8hi)__A, (__v8hi)__B);
249
}
250
 
251
static __inline__ __m128i __DEFAULT_FN_ATTRS
252
_mm_shl_epi32(__m128i __A, __m128i __B)
253
{
254
  return (__m128i)__builtin_ia32_vpshld((__v4si)__A, (__v4si)__B);
255
}
256
 
257
static __inline__ __m128i __DEFAULT_FN_ATTRS
258
_mm_shl_epi64(__m128i __A, __m128i __B)
259
{
260
  return (__m128i)__builtin_ia32_vpshlq((__v2di)__A, (__v2di)__B);
261
}
262
 
263
static __inline__ __m128i __DEFAULT_FN_ATTRS
264
_mm_sha_epi8(__m128i __A, __m128i __B)
265
{
266
  return (__m128i)__builtin_ia32_vpshab((__v16qi)__A, (__v16qi)__B);
267
}
268
 
269
static __inline__ __m128i __DEFAULT_FN_ATTRS
270
_mm_sha_epi16(__m128i __A, __m128i __B)
271
{
272
  return (__m128i)__builtin_ia32_vpshaw((__v8hi)__A, (__v8hi)__B);
273
}
274
 
275
static __inline__ __m128i __DEFAULT_FN_ATTRS
276
_mm_sha_epi32(__m128i __A, __m128i __B)
277
{
278
  return (__m128i)__builtin_ia32_vpshad((__v4si)__A, (__v4si)__B);
279
}
280
 
281
static __inline__ __m128i __DEFAULT_FN_ATTRS
282
_mm_sha_epi64(__m128i __A, __m128i __B)
283
{
284
  return (__m128i)__builtin_ia32_vpshaq((__v2di)__A, (__v2di)__B);
285
}
286
 
287
#define _mm_com_epu8(A, B, N) \
288
  ((__m128i)__builtin_ia32_vpcomub((__v16qi)(__m128i)(A), \
289
                                   (__v16qi)(__m128i)(B), (N)))
290
 
291
#define _mm_com_epu16(A, B, N) \
292
  ((__m128i)__builtin_ia32_vpcomuw((__v8hi)(__m128i)(A), \
293
                                   (__v8hi)(__m128i)(B), (N)))
294
 
295
#define _mm_com_epu32(A, B, N) \
296
  ((__m128i)__builtin_ia32_vpcomud((__v4si)(__m128i)(A), \
297
                                   (__v4si)(__m128i)(B), (N)))
298
 
299
#define _mm_com_epu64(A, B, N) \
300
  ((__m128i)__builtin_ia32_vpcomuq((__v2di)(__m128i)(A), \
301
                                   (__v2di)(__m128i)(B), (N)))
302
 
303
#define _mm_com_epi8(A, B, N) \
304
  ((__m128i)__builtin_ia32_vpcomb((__v16qi)(__m128i)(A), \
305
                                  (__v16qi)(__m128i)(B), (N)))
306
 
307
#define _mm_com_epi16(A, B, N) \
308
  ((__m128i)__builtin_ia32_vpcomw((__v8hi)(__m128i)(A), \
309
                                  (__v8hi)(__m128i)(B), (N)))
310
 
311
#define _mm_com_epi32(A, B, N) \
312
  ((__m128i)__builtin_ia32_vpcomd((__v4si)(__m128i)(A), \
313
                                  (__v4si)(__m128i)(B), (N)))
314
 
315
#define _mm_com_epi64(A, B, N) \
316
  ((__m128i)__builtin_ia32_vpcomq((__v2di)(__m128i)(A), \
317
                                  (__v2di)(__m128i)(B), (N)))
318
 
319
#define _MM_PCOMCTRL_LT    0
320
#define _MM_PCOMCTRL_LE    1
321
#define _MM_PCOMCTRL_GT    2
322
#define _MM_PCOMCTRL_GE    3
323
#define _MM_PCOMCTRL_EQ    4
324
#define _MM_PCOMCTRL_NEQ   5
325
#define _MM_PCOMCTRL_FALSE 6
326
#define _MM_PCOMCTRL_TRUE  7
327
 
328
static __inline__ __m128i __DEFAULT_FN_ATTRS
329
_mm_comlt_epu8(__m128i __A, __m128i __B)
330
{
331
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT);
332
}
333
 
334
static __inline__ __m128i __DEFAULT_FN_ATTRS
335
_mm_comle_epu8(__m128i __A, __m128i __B)
336
{
337
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE);
338
}
339
 
340
static __inline__ __m128i __DEFAULT_FN_ATTRS
341
_mm_comgt_epu8(__m128i __A, __m128i __B)
342
{
343
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT);
344
}
345
 
346
static __inline__ __m128i __DEFAULT_FN_ATTRS
347
_mm_comge_epu8(__m128i __A, __m128i __B)
348
{
349
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE);
350
}
351
 
352
static __inline__ __m128i __DEFAULT_FN_ATTRS
353
_mm_comeq_epu8(__m128i __A, __m128i __B)
354
{
355
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ);
356
}
357
 
358
static __inline__ __m128i __DEFAULT_FN_ATTRS
359
_mm_comneq_epu8(__m128i __A, __m128i __B)
360
{
361
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ);
362
}
363
 
364
static __inline__ __m128i __DEFAULT_FN_ATTRS
365
_mm_comfalse_epu8(__m128i __A, __m128i __B)
366
{
367
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE);
368
}
369
 
370
static __inline__ __m128i __DEFAULT_FN_ATTRS
371
_mm_comtrue_epu8(__m128i __A, __m128i __B)
372
{
373
  return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE);
374
}
375
 
376
static __inline__ __m128i __DEFAULT_FN_ATTRS
377
_mm_comlt_epu16(__m128i __A, __m128i __B)
378
{
379
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT);
380
}
381
 
382
static __inline__ __m128i __DEFAULT_FN_ATTRS
383
_mm_comle_epu16(__m128i __A, __m128i __B)
384
{
385
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE);
386
}
387
 
388
static __inline__ __m128i __DEFAULT_FN_ATTRS
389
_mm_comgt_epu16(__m128i __A, __m128i __B)
390
{
391
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT);
392
}
393
 
394
static __inline__ __m128i __DEFAULT_FN_ATTRS
395
_mm_comge_epu16(__m128i __A, __m128i __B)
396
{
397
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE);
398
}
399
 
400
static __inline__ __m128i __DEFAULT_FN_ATTRS
401
_mm_comeq_epu16(__m128i __A, __m128i __B)
402
{
403
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ);
404
}
405
 
406
static __inline__ __m128i __DEFAULT_FN_ATTRS
407
_mm_comneq_epu16(__m128i __A, __m128i __B)
408
{
409
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ);
410
}
411
 
412
static __inline__ __m128i __DEFAULT_FN_ATTRS
413
_mm_comfalse_epu16(__m128i __A, __m128i __B)
414
{
415
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE);
416
}
417
 
418
static __inline__ __m128i __DEFAULT_FN_ATTRS
419
_mm_comtrue_epu16(__m128i __A, __m128i __B)
420
{
421
  return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE);
422
}
423
 
424
static __inline__ __m128i __DEFAULT_FN_ATTRS
425
_mm_comlt_epu32(__m128i __A, __m128i __B)
426
{
427
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT);
428
}
429
 
430
static __inline__ __m128i __DEFAULT_FN_ATTRS
431
_mm_comle_epu32(__m128i __A, __m128i __B)
432
{
433
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE);
434
}
435
 
436
static __inline__ __m128i __DEFAULT_FN_ATTRS
437
_mm_comgt_epu32(__m128i __A, __m128i __B)
438
{
439
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT);
440
}
441
 
442
static __inline__ __m128i __DEFAULT_FN_ATTRS
443
_mm_comge_epu32(__m128i __A, __m128i __B)
444
{
445
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE);
446
}
447
 
448
static __inline__ __m128i __DEFAULT_FN_ATTRS
449
_mm_comeq_epu32(__m128i __A, __m128i __B)
450
{
451
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ);
452
}
453
 
454
static __inline__ __m128i __DEFAULT_FN_ATTRS
455
_mm_comneq_epu32(__m128i __A, __m128i __B)
456
{
457
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ);
458
}
459
 
460
static __inline__ __m128i __DEFAULT_FN_ATTRS
461
_mm_comfalse_epu32(__m128i __A, __m128i __B)
462
{
463
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE);
464
}
465
 
466
static __inline__ __m128i __DEFAULT_FN_ATTRS
467
_mm_comtrue_epu32(__m128i __A, __m128i __B)
468
{
469
  return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE);
470
}
471
 
472
static __inline__ __m128i __DEFAULT_FN_ATTRS
473
_mm_comlt_epu64(__m128i __A, __m128i __B)
474
{
475
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT);
476
}
477
 
478
static __inline__ __m128i __DEFAULT_FN_ATTRS
479
_mm_comle_epu64(__m128i __A, __m128i __B)
480
{
481
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE);
482
}
483
 
484
static __inline__ __m128i __DEFAULT_FN_ATTRS
485
_mm_comgt_epu64(__m128i __A, __m128i __B)
486
{
487
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT);
488
}
489
 
490
static __inline__ __m128i __DEFAULT_FN_ATTRS
491
_mm_comge_epu64(__m128i __A, __m128i __B)
492
{
493
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE);
494
}
495
 
496
static __inline__ __m128i __DEFAULT_FN_ATTRS
497
_mm_comeq_epu64(__m128i __A, __m128i __B)
498
{
499
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ);
500
}
501
 
502
static __inline__ __m128i __DEFAULT_FN_ATTRS
503
_mm_comneq_epu64(__m128i __A, __m128i __B)
504
{
505
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ);
506
}
507
 
508
static __inline__ __m128i __DEFAULT_FN_ATTRS
509
_mm_comfalse_epu64(__m128i __A, __m128i __B)
510
{
511
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE);
512
}
513
 
514
static __inline__ __m128i __DEFAULT_FN_ATTRS
515
_mm_comtrue_epu64(__m128i __A, __m128i __B)
516
{
517
  return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE);
518
}
519
 
520
static __inline__ __m128i __DEFAULT_FN_ATTRS
521
_mm_comlt_epi8(__m128i __A, __m128i __B)
522
{
523
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT);
524
}
525
 
526
static __inline__ __m128i __DEFAULT_FN_ATTRS
527
_mm_comle_epi8(__m128i __A, __m128i __B)
528
{
529
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE);
530
}
531
 
532
static __inline__ __m128i __DEFAULT_FN_ATTRS
533
_mm_comgt_epi8(__m128i __A, __m128i __B)
534
{
535
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT);
536
}
537
 
538
static __inline__ __m128i __DEFAULT_FN_ATTRS
539
_mm_comge_epi8(__m128i __A, __m128i __B)
540
{
541
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE);
542
}
543
 
544
static __inline__ __m128i __DEFAULT_FN_ATTRS
545
_mm_comeq_epi8(__m128i __A, __m128i __B)
546
{
547
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ);
548
}
549
 
550
static __inline__ __m128i __DEFAULT_FN_ATTRS
551
_mm_comneq_epi8(__m128i __A, __m128i __B)
552
{
553
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ);
554
}
555
 
556
static __inline__ __m128i __DEFAULT_FN_ATTRS
557
_mm_comfalse_epi8(__m128i __A, __m128i __B)
558
{
559
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE);
560
}
561
 
562
static __inline__ __m128i __DEFAULT_FN_ATTRS
563
_mm_comtrue_epi8(__m128i __A, __m128i __B)
564
{
565
  return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE);
566
}
567
 
568
static __inline__ __m128i __DEFAULT_FN_ATTRS
569
_mm_comlt_epi16(__m128i __A, __m128i __B)
570
{
571
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT);
572
}
573
 
574
static __inline__ __m128i __DEFAULT_FN_ATTRS
575
_mm_comle_epi16(__m128i __A, __m128i __B)
576
{
577
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE);
578
}
579
 
580
static __inline__ __m128i __DEFAULT_FN_ATTRS
581
_mm_comgt_epi16(__m128i __A, __m128i __B)
582
{
583
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT);
584
}
585
 
586
static __inline__ __m128i __DEFAULT_FN_ATTRS
587
_mm_comge_epi16(__m128i __A, __m128i __B)
588
{
589
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE);
590
}
591
 
592
static __inline__ __m128i __DEFAULT_FN_ATTRS
593
_mm_comeq_epi16(__m128i __A, __m128i __B)
594
{
595
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ);
596
}
597
 
598
static __inline__ __m128i __DEFAULT_FN_ATTRS
599
_mm_comneq_epi16(__m128i __A, __m128i __B)
600
{
601
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ);
602
}
603
 
604
static __inline__ __m128i __DEFAULT_FN_ATTRS
605
_mm_comfalse_epi16(__m128i __A, __m128i __B)
606
{
607
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE);
608
}
609
 
610
static __inline__ __m128i __DEFAULT_FN_ATTRS
611
_mm_comtrue_epi16(__m128i __A, __m128i __B)
612
{
613
  return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE);
614
}
615
 
616
static __inline__ __m128i __DEFAULT_FN_ATTRS
617
_mm_comlt_epi32(__m128i __A, __m128i __B)
618
{
619
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT);
620
}
621
 
622
static __inline__ __m128i __DEFAULT_FN_ATTRS
623
_mm_comle_epi32(__m128i __A, __m128i __B)
624
{
625
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE);
626
}
627
 
628
static __inline__ __m128i __DEFAULT_FN_ATTRS
629
_mm_comgt_epi32(__m128i __A, __m128i __B)
630
{
631
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT);
632
}
633
 
634
static __inline__ __m128i __DEFAULT_FN_ATTRS
635
_mm_comge_epi32(__m128i __A, __m128i __B)
636
{
637
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE);
638
}
639
 
640
static __inline__ __m128i __DEFAULT_FN_ATTRS
641
_mm_comeq_epi32(__m128i __A, __m128i __B)
642
{
643
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ);
644
}
645
 
646
static __inline__ __m128i __DEFAULT_FN_ATTRS
647
_mm_comneq_epi32(__m128i __A, __m128i __B)
648
{
649
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ);
650
}
651
 
652
static __inline__ __m128i __DEFAULT_FN_ATTRS
653
_mm_comfalse_epi32(__m128i __A, __m128i __B)
654
{
655
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE);
656
}
657
 
658
static __inline__ __m128i __DEFAULT_FN_ATTRS
659
_mm_comtrue_epi32(__m128i __A, __m128i __B)
660
{
661
  return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE);
662
}
663
 
664
static __inline__ __m128i __DEFAULT_FN_ATTRS
665
_mm_comlt_epi64(__m128i __A, __m128i __B)
666
{
667
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT);
668
}
669
 
670
static __inline__ __m128i __DEFAULT_FN_ATTRS
671
_mm_comle_epi64(__m128i __A, __m128i __B)
672
{
673
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE);
674
}
675
 
676
static __inline__ __m128i __DEFAULT_FN_ATTRS
677
_mm_comgt_epi64(__m128i __A, __m128i __B)
678
{
679
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT);
680
}
681
 
682
static __inline__ __m128i __DEFAULT_FN_ATTRS
683
_mm_comge_epi64(__m128i __A, __m128i __B)
684
{
685
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE);
686
}
687
 
688
static __inline__ __m128i __DEFAULT_FN_ATTRS
689
_mm_comeq_epi64(__m128i __A, __m128i __B)
690
{
691
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ);
692
}
693
 
694
static __inline__ __m128i __DEFAULT_FN_ATTRS
695
_mm_comneq_epi64(__m128i __A, __m128i __B)
696
{
697
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ);
698
}
699
 
700
static __inline__ __m128i __DEFAULT_FN_ATTRS
701
_mm_comfalse_epi64(__m128i __A, __m128i __B)
702
{
703
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE);
704
}
705
 
706
static __inline__ __m128i __DEFAULT_FN_ATTRS
707
_mm_comtrue_epi64(__m128i __A, __m128i __B)
708
{
709
  return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE);
710
}
711
 
712
#define _mm_permute2_pd(X, Y, C, I) \
713
  ((__m128d)__builtin_ia32_vpermil2pd((__v2df)(__m128d)(X), \
714
                                      (__v2df)(__m128d)(Y), \
715
                                      (__v2di)(__m128i)(C), (I)))
716
 
717
#define _mm256_permute2_pd(X, Y, C, I) \
718
  ((__m256d)__builtin_ia32_vpermil2pd256((__v4df)(__m256d)(X), \
719
                                         (__v4df)(__m256d)(Y), \
720
                                         (__v4di)(__m256i)(C), (I)))
721
 
722
#define _mm_permute2_ps(X, Y, C, I) \
723
  ((__m128)__builtin_ia32_vpermil2ps((__v4sf)(__m128)(X), (__v4sf)(__m128)(Y), \
724
                                     (__v4si)(__m128i)(C), (I)))
725
 
726
#define _mm256_permute2_ps(X, Y, C, I) \
727
  ((__m256)__builtin_ia32_vpermil2ps256((__v8sf)(__m256)(X), \
728
                                        (__v8sf)(__m256)(Y), \
729
                                        (__v8si)(__m256i)(C), (I)))
730
 
731
static __inline__ __m128 __DEFAULT_FN_ATTRS
732
_mm_frcz_ss(__m128 __A)
733
{
734
  return (__m128)__builtin_ia32_vfrczss((__v4sf)__A);
735
}
736
 
737
static __inline__ __m128d __DEFAULT_FN_ATTRS
738
_mm_frcz_sd(__m128d __A)
739
{
740
  return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A);
741
}
742
 
743
static __inline__ __m128 __DEFAULT_FN_ATTRS
744
_mm_frcz_ps(__m128 __A)
745
{
746
  return (__m128)__builtin_ia32_vfrczps((__v4sf)__A);
747
}
748
 
749
static __inline__ __m128d __DEFAULT_FN_ATTRS
750
_mm_frcz_pd(__m128d __A)
751
{
752
  return (__m128d)__builtin_ia32_vfrczpd((__v2df)__A);
753
}
754
 
755
static __inline__ __m256 __DEFAULT_FN_ATTRS256
756
_mm256_frcz_ps(__m256 __A)
757
{
758
  return (__m256)__builtin_ia32_vfrczps256((__v8sf)__A);
759
}
760
 
761
static __inline__ __m256d __DEFAULT_FN_ATTRS256
762
_mm256_frcz_pd(__m256d __A)
763
{
764
  return (__m256d)__builtin_ia32_vfrczpd256((__v4df)__A);
765
}
766
 
767
#undef __DEFAULT_FN_ATTRS
768
#undef __DEFAULT_FN_ATTRS256
769
 
770
#endif /* __XOPINTRIN_H */