zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

xopintrin.h (20434B) - Raw


      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 */