781 lines · c
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-exception6 *7 *===-----------------------------------------------------------------------===8 */9 10#ifndef __X86INTRIN_H11#error "Never use <xopintrin.h> directly; include <x86intrin.h> instead."12#endif13 14#ifndef __XOPINTRIN_H15#define __XOPINTRIN_H16 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#if defined(__cplusplus) && (__cplusplus >= 201103L)24#define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS constexpr25#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256 constexpr26#else27#define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS28#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS25629#endif30 31static __inline__ __m128i __DEFAULT_FN_ATTRS32_mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C)33{34 return (__m128i)__builtin_ia32_vpmacssww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);35}36 37static __inline__ __m128i __DEFAULT_FN_ATTRS38_mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C)39{40 return (__m128i)__builtin_ia32_vpmacsww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C);41}42 43static __inline__ __m128i __DEFAULT_FN_ATTRS44_mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C)45{46 return (__m128i)__builtin_ia32_vpmacsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);47}48 49static __inline__ __m128i __DEFAULT_FN_ATTRS50_mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C)51{52 return (__m128i)__builtin_ia32_vpmacswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);53}54 55static __inline__ __m128i __DEFAULT_FN_ATTRS56_mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C)57{58 return (__m128i)__builtin_ia32_vpmacssdd((__v4si)__A, (__v4si)__B, (__v4si)__C);59}60 61static __inline__ __m128i __DEFAULT_FN_ATTRS62_mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C)63{64 return (__m128i)__builtin_ia32_vpmacsdd((__v4si)__A, (__v4si)__B, (__v4si)__C);65}66 67static __inline__ __m128i __DEFAULT_FN_ATTRS68_mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C)69{70 return (__m128i)__builtin_ia32_vpmacssdql((__v4si)__A, (__v4si)__B, (__v2di)__C);71}72 73static __inline__ __m128i __DEFAULT_FN_ATTRS74_mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C)75{76 return (__m128i)__builtin_ia32_vpmacsdql((__v4si)__A, (__v4si)__B, (__v2di)__C);77}78 79static __inline__ __m128i __DEFAULT_FN_ATTRS80_mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C)81{82 return (__m128i)__builtin_ia32_vpmacssdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);83}84 85static __inline__ __m128i __DEFAULT_FN_ATTRS86_mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C)87{88 return (__m128i)__builtin_ia32_vpmacsdqh((__v4si)__A, (__v4si)__B, (__v2di)__C);89}90 91static __inline__ __m128i __DEFAULT_FN_ATTRS92_mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C)93{94 return (__m128i)__builtin_ia32_vpmadcsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);95}96 97static __inline__ __m128i __DEFAULT_FN_ATTRS98_mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C)99{100 return (__m128i)__builtin_ia32_vpmadcswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C);101}102 103static __inline__ __m128i __DEFAULT_FN_ATTRS104_mm_haddw_epi8(__m128i __A)105{106 return (__m128i)__builtin_ia32_vphaddbw((__v16qi)__A);107}108 109static __inline__ __m128i __DEFAULT_FN_ATTRS110_mm_haddd_epi8(__m128i __A)111{112 return (__m128i)__builtin_ia32_vphaddbd((__v16qi)__A);113}114 115static __inline__ __m128i __DEFAULT_FN_ATTRS116_mm_haddq_epi8(__m128i __A)117{118 return (__m128i)__builtin_ia32_vphaddbq((__v16qi)__A);119}120 121static __inline__ __m128i __DEFAULT_FN_ATTRS122_mm_haddd_epi16(__m128i __A)123{124 return (__m128i)__builtin_ia32_vphaddwd((__v8hi)__A);125}126 127static __inline__ __m128i __DEFAULT_FN_ATTRS128_mm_haddq_epi16(__m128i __A)129{130 return (__m128i)__builtin_ia32_vphaddwq((__v8hi)__A);131}132 133static __inline__ __m128i __DEFAULT_FN_ATTRS134_mm_haddq_epi32(__m128i __A)135{136 return (__m128i)__builtin_ia32_vphadddq((__v4si)__A);137}138 139static __inline__ __m128i __DEFAULT_FN_ATTRS140_mm_haddw_epu8(__m128i __A)141{142 return (__m128i)__builtin_ia32_vphaddubw((__v16qi)__A);143}144 145static __inline__ __m128i __DEFAULT_FN_ATTRS146_mm_haddd_epu8(__m128i __A)147{148 return (__m128i)__builtin_ia32_vphaddubd((__v16qi)__A);149}150 151static __inline__ __m128i __DEFAULT_FN_ATTRS152_mm_haddq_epu8(__m128i __A)153{154 return (__m128i)__builtin_ia32_vphaddubq((__v16qi)__A);155}156 157static __inline__ __m128i __DEFAULT_FN_ATTRS158_mm_haddd_epu16(__m128i __A)159{160 return (__m128i)__builtin_ia32_vphadduwd((__v8hi)__A);161}162 163static __inline__ __m128i __DEFAULT_FN_ATTRS164_mm_haddq_epu16(__m128i __A)165{166 return (__m128i)__builtin_ia32_vphadduwq((__v8hi)__A);167}168 169static __inline__ __m128i __DEFAULT_FN_ATTRS170_mm_haddq_epu32(__m128i __A)171{172 return (__m128i)__builtin_ia32_vphaddudq((__v4si)__A);173}174 175static __inline__ __m128i __DEFAULT_FN_ATTRS176_mm_hsubw_epi8(__m128i __A)177{178 return (__m128i)__builtin_ia32_vphsubbw((__v16qi)__A);179}180 181static __inline__ __m128i __DEFAULT_FN_ATTRS182_mm_hsubd_epi16(__m128i __A)183{184 return (__m128i)__builtin_ia32_vphsubwd((__v8hi)__A);185}186 187static __inline__ __m128i __DEFAULT_FN_ATTRS188_mm_hsubq_epi32(__m128i __A)189{190 return (__m128i)__builtin_ia32_vphsubdq((__v4si)__A);191}192 193static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR194_mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C)195{196 return (__m128i)(((__v2du)__A & (__v2du)__C) | ((__v2du)__B & ~(__v2du)__C));197}198 199static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR200_mm256_cmov_si256(__m256i __A, __m256i __B, __m256i __C)201{202 return (__m256i)(((__v4du)__A & (__v4du)__C) | ((__v4du)__B & ~(__v4du)__C));203}204 205static __inline__ __m128i __DEFAULT_FN_ATTRS206_mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)207{208 return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);209}210 211static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR212_mm_rot_epi8(__m128i __A, __m128i __B)213{214 return (__m128i)__builtin_elementwise_fshl((__v16qu)__A, (__v16qu)__A, (__v16qu)__B);215}216 217static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR218_mm_rot_epi16(__m128i __A, __m128i __B)219{220 return (__m128i)__builtin_elementwise_fshl((__v8hu)__A, (__v8hu)__A, (__v8hu)__B);221}222 223static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR224_mm_rot_epi32(__m128i __A, __m128i __B)225{226 return (__m128i)__builtin_elementwise_fshl((__v4su)__A, (__v4su)__A, (__v4su)__B);227}228 229static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR230_mm_rot_epi64(__m128i __A, __m128i __B)231{232 return (__m128i)__builtin_elementwise_fshl((__v2du)__A, (__v2du)__A, (__v2du)__B);233}234 235#define _mm_roti_epi8(A, N) \236 ((__m128i)__builtin_ia32_vprotbi((__v16qi)(__m128i)(A), (N)))237 238#define _mm_roti_epi16(A, N) \239 ((__m128i)__builtin_ia32_vprotwi((__v8hi)(__m128i)(A), (N)))240 241#define _mm_roti_epi32(A, N) \242 ((__m128i)__builtin_ia32_vprotdi((__v4si)(__m128i)(A), (N)))243 244#define _mm_roti_epi64(A, N) \245 ((__m128i)__builtin_ia32_vprotqi((__v2di)(__m128i)(A), (N)))246 247static __inline__ __m128i __DEFAULT_FN_ATTRS248_mm_shl_epi8(__m128i __A, __m128i __B)249{250 return (__m128i)__builtin_ia32_vpshlb((__v16qi)__A, (__v16qi)__B);251}252 253static __inline__ __m128i __DEFAULT_FN_ATTRS254_mm_shl_epi16(__m128i __A, __m128i __B)255{256 return (__m128i)__builtin_ia32_vpshlw((__v8hi)__A, (__v8hi)__B);257}258 259static __inline__ __m128i __DEFAULT_FN_ATTRS260_mm_shl_epi32(__m128i __A, __m128i __B)261{262 return (__m128i)__builtin_ia32_vpshld((__v4si)__A, (__v4si)__B);263}264 265static __inline__ __m128i __DEFAULT_FN_ATTRS266_mm_shl_epi64(__m128i __A, __m128i __B)267{268 return (__m128i)__builtin_ia32_vpshlq((__v2di)__A, (__v2di)__B);269}270 271static __inline__ __m128i __DEFAULT_FN_ATTRS272_mm_sha_epi8(__m128i __A, __m128i __B)273{274 return (__m128i)__builtin_ia32_vpshab((__v16qi)__A, (__v16qi)__B);275}276 277static __inline__ __m128i __DEFAULT_FN_ATTRS278_mm_sha_epi16(__m128i __A, __m128i __B)279{280 return (__m128i)__builtin_ia32_vpshaw((__v8hi)__A, (__v8hi)__B);281}282 283static __inline__ __m128i __DEFAULT_FN_ATTRS284_mm_sha_epi32(__m128i __A, __m128i __B)285{286 return (__m128i)__builtin_ia32_vpshad((__v4si)__A, (__v4si)__B);287}288 289static __inline__ __m128i __DEFAULT_FN_ATTRS290_mm_sha_epi64(__m128i __A, __m128i __B)291{292 return (__m128i)__builtin_ia32_vpshaq((__v2di)__A, (__v2di)__B);293}294 295#define _mm_com_epu8(A, B, N) \296 ((__m128i)__builtin_ia32_vpcomub((__v16qi)(__m128i)(A), \297 (__v16qi)(__m128i)(B), (N)))298 299#define _mm_com_epu16(A, B, N) \300 ((__m128i)__builtin_ia32_vpcomuw((__v8hi)(__m128i)(A), \301 (__v8hi)(__m128i)(B), (N)))302 303#define _mm_com_epu32(A, B, N) \304 ((__m128i)__builtin_ia32_vpcomud((__v4si)(__m128i)(A), \305 (__v4si)(__m128i)(B), (N)))306 307#define _mm_com_epu64(A, B, N) \308 ((__m128i)__builtin_ia32_vpcomuq((__v2di)(__m128i)(A), \309 (__v2di)(__m128i)(B), (N)))310 311#define _mm_com_epi8(A, B, N) \312 ((__m128i)__builtin_ia32_vpcomb((__v16qi)(__m128i)(A), \313 (__v16qi)(__m128i)(B), (N)))314 315#define _mm_com_epi16(A, B, N) \316 ((__m128i)__builtin_ia32_vpcomw((__v8hi)(__m128i)(A), \317 (__v8hi)(__m128i)(B), (N)))318 319#define _mm_com_epi32(A, B, N) \320 ((__m128i)__builtin_ia32_vpcomd((__v4si)(__m128i)(A), \321 (__v4si)(__m128i)(B), (N)))322 323#define _mm_com_epi64(A, B, N) \324 ((__m128i)__builtin_ia32_vpcomq((__v2di)(__m128i)(A), \325 (__v2di)(__m128i)(B), (N)))326 327#define _MM_PCOMCTRL_LT 0328#define _MM_PCOMCTRL_LE 1329#define _MM_PCOMCTRL_GT 2330#define _MM_PCOMCTRL_GE 3331#define _MM_PCOMCTRL_EQ 4332#define _MM_PCOMCTRL_NEQ 5333#define _MM_PCOMCTRL_FALSE 6334#define _MM_PCOMCTRL_TRUE 7335 336static __inline__ __m128i __DEFAULT_FN_ATTRS337_mm_comlt_epu8(__m128i __A, __m128i __B)338{339 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT);340}341 342static __inline__ __m128i __DEFAULT_FN_ATTRS343_mm_comle_epu8(__m128i __A, __m128i __B)344{345 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE);346}347 348static __inline__ __m128i __DEFAULT_FN_ATTRS349_mm_comgt_epu8(__m128i __A, __m128i __B)350{351 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT);352}353 354static __inline__ __m128i __DEFAULT_FN_ATTRS355_mm_comge_epu8(__m128i __A, __m128i __B)356{357 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE);358}359 360static __inline__ __m128i __DEFAULT_FN_ATTRS361_mm_comeq_epu8(__m128i __A, __m128i __B)362{363 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ);364}365 366static __inline__ __m128i __DEFAULT_FN_ATTRS367_mm_comneq_epu8(__m128i __A, __m128i __B)368{369 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ);370}371 372static __inline__ __m128i __DEFAULT_FN_ATTRS373_mm_comfalse_epu8(__m128i __A, __m128i __B)374{375 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE);376}377 378static __inline__ __m128i __DEFAULT_FN_ATTRS379_mm_comtrue_epu8(__m128i __A, __m128i __B)380{381 return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE);382}383 384static __inline__ __m128i __DEFAULT_FN_ATTRS385_mm_comlt_epu16(__m128i __A, __m128i __B)386{387 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT);388}389 390static __inline__ __m128i __DEFAULT_FN_ATTRS391_mm_comle_epu16(__m128i __A, __m128i __B)392{393 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE);394}395 396static __inline__ __m128i __DEFAULT_FN_ATTRS397_mm_comgt_epu16(__m128i __A, __m128i __B)398{399 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT);400}401 402static __inline__ __m128i __DEFAULT_FN_ATTRS403_mm_comge_epu16(__m128i __A, __m128i __B)404{405 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE);406}407 408static __inline__ __m128i __DEFAULT_FN_ATTRS409_mm_comeq_epu16(__m128i __A, __m128i __B)410{411 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ);412}413 414static __inline__ __m128i __DEFAULT_FN_ATTRS415_mm_comneq_epu16(__m128i __A, __m128i __B)416{417 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ);418}419 420static __inline__ __m128i __DEFAULT_FN_ATTRS421_mm_comfalse_epu16(__m128i __A, __m128i __B)422{423 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE);424}425 426static __inline__ __m128i __DEFAULT_FN_ATTRS427_mm_comtrue_epu16(__m128i __A, __m128i __B)428{429 return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE);430}431 432static __inline__ __m128i __DEFAULT_FN_ATTRS433_mm_comlt_epu32(__m128i __A, __m128i __B)434{435 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT);436}437 438static __inline__ __m128i __DEFAULT_FN_ATTRS439_mm_comle_epu32(__m128i __A, __m128i __B)440{441 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE);442}443 444static __inline__ __m128i __DEFAULT_FN_ATTRS445_mm_comgt_epu32(__m128i __A, __m128i __B)446{447 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT);448}449 450static __inline__ __m128i __DEFAULT_FN_ATTRS451_mm_comge_epu32(__m128i __A, __m128i __B)452{453 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE);454}455 456static __inline__ __m128i __DEFAULT_FN_ATTRS457_mm_comeq_epu32(__m128i __A, __m128i __B)458{459 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ);460}461 462static __inline__ __m128i __DEFAULT_FN_ATTRS463_mm_comneq_epu32(__m128i __A, __m128i __B)464{465 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ);466}467 468static __inline__ __m128i __DEFAULT_FN_ATTRS469_mm_comfalse_epu32(__m128i __A, __m128i __B)470{471 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE);472}473 474static __inline__ __m128i __DEFAULT_FN_ATTRS475_mm_comtrue_epu32(__m128i __A, __m128i __B)476{477 return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE);478}479 480static __inline__ __m128i __DEFAULT_FN_ATTRS481_mm_comlt_epu64(__m128i __A, __m128i __B)482{483 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT);484}485 486static __inline__ __m128i __DEFAULT_FN_ATTRS487_mm_comle_epu64(__m128i __A, __m128i __B)488{489 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE);490}491 492static __inline__ __m128i __DEFAULT_FN_ATTRS493_mm_comgt_epu64(__m128i __A, __m128i __B)494{495 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT);496}497 498static __inline__ __m128i __DEFAULT_FN_ATTRS499_mm_comge_epu64(__m128i __A, __m128i __B)500{501 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE);502}503 504static __inline__ __m128i __DEFAULT_FN_ATTRS505_mm_comeq_epu64(__m128i __A, __m128i __B)506{507 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ);508}509 510static __inline__ __m128i __DEFAULT_FN_ATTRS511_mm_comneq_epu64(__m128i __A, __m128i __B)512{513 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ);514}515 516static __inline__ __m128i __DEFAULT_FN_ATTRS517_mm_comfalse_epu64(__m128i __A, __m128i __B)518{519 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE);520}521 522static __inline__ __m128i __DEFAULT_FN_ATTRS523_mm_comtrue_epu64(__m128i __A, __m128i __B)524{525 return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE);526}527 528static __inline__ __m128i __DEFAULT_FN_ATTRS529_mm_comlt_epi8(__m128i __A, __m128i __B)530{531 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT);532}533 534static __inline__ __m128i __DEFAULT_FN_ATTRS535_mm_comle_epi8(__m128i __A, __m128i __B)536{537 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE);538}539 540static __inline__ __m128i __DEFAULT_FN_ATTRS541_mm_comgt_epi8(__m128i __A, __m128i __B)542{543 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT);544}545 546static __inline__ __m128i __DEFAULT_FN_ATTRS547_mm_comge_epi8(__m128i __A, __m128i __B)548{549 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE);550}551 552static __inline__ __m128i __DEFAULT_FN_ATTRS553_mm_comeq_epi8(__m128i __A, __m128i __B)554{555 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ);556}557 558static __inline__ __m128i __DEFAULT_FN_ATTRS559_mm_comneq_epi8(__m128i __A, __m128i __B)560{561 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ);562}563 564static __inline__ __m128i __DEFAULT_FN_ATTRS565_mm_comfalse_epi8(__m128i __A, __m128i __B)566{567 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE);568}569 570static __inline__ __m128i __DEFAULT_FN_ATTRS571_mm_comtrue_epi8(__m128i __A, __m128i __B)572{573 return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE);574}575 576static __inline__ __m128i __DEFAULT_FN_ATTRS577_mm_comlt_epi16(__m128i __A, __m128i __B)578{579 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT);580}581 582static __inline__ __m128i __DEFAULT_FN_ATTRS583_mm_comle_epi16(__m128i __A, __m128i __B)584{585 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE);586}587 588static __inline__ __m128i __DEFAULT_FN_ATTRS589_mm_comgt_epi16(__m128i __A, __m128i __B)590{591 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT);592}593 594static __inline__ __m128i __DEFAULT_FN_ATTRS595_mm_comge_epi16(__m128i __A, __m128i __B)596{597 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE);598}599 600static __inline__ __m128i __DEFAULT_FN_ATTRS601_mm_comeq_epi16(__m128i __A, __m128i __B)602{603 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ);604}605 606static __inline__ __m128i __DEFAULT_FN_ATTRS607_mm_comneq_epi16(__m128i __A, __m128i __B)608{609 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ);610}611 612static __inline__ __m128i __DEFAULT_FN_ATTRS613_mm_comfalse_epi16(__m128i __A, __m128i __B)614{615 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE);616}617 618static __inline__ __m128i __DEFAULT_FN_ATTRS619_mm_comtrue_epi16(__m128i __A, __m128i __B)620{621 return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE);622}623 624static __inline__ __m128i __DEFAULT_FN_ATTRS625_mm_comlt_epi32(__m128i __A, __m128i __B)626{627 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT);628}629 630static __inline__ __m128i __DEFAULT_FN_ATTRS631_mm_comle_epi32(__m128i __A, __m128i __B)632{633 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE);634}635 636static __inline__ __m128i __DEFAULT_FN_ATTRS637_mm_comgt_epi32(__m128i __A, __m128i __B)638{639 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT);640}641 642static __inline__ __m128i __DEFAULT_FN_ATTRS643_mm_comge_epi32(__m128i __A, __m128i __B)644{645 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE);646}647 648static __inline__ __m128i __DEFAULT_FN_ATTRS649_mm_comeq_epi32(__m128i __A, __m128i __B)650{651 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ);652}653 654static __inline__ __m128i __DEFAULT_FN_ATTRS655_mm_comneq_epi32(__m128i __A, __m128i __B)656{657 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ);658}659 660static __inline__ __m128i __DEFAULT_FN_ATTRS661_mm_comfalse_epi32(__m128i __A, __m128i __B)662{663 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE);664}665 666static __inline__ __m128i __DEFAULT_FN_ATTRS667_mm_comtrue_epi32(__m128i __A, __m128i __B)668{669 return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE);670}671 672static __inline__ __m128i __DEFAULT_FN_ATTRS673_mm_comlt_epi64(__m128i __A, __m128i __B)674{675 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT);676}677 678static __inline__ __m128i __DEFAULT_FN_ATTRS679_mm_comle_epi64(__m128i __A, __m128i __B)680{681 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE);682}683 684static __inline__ __m128i __DEFAULT_FN_ATTRS685_mm_comgt_epi64(__m128i __A, __m128i __B)686{687 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT);688}689 690static __inline__ __m128i __DEFAULT_FN_ATTRS691_mm_comge_epi64(__m128i __A, __m128i __B)692{693 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE);694}695 696static __inline__ __m128i __DEFAULT_FN_ATTRS697_mm_comeq_epi64(__m128i __A, __m128i __B)698{699 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ);700}701 702static __inline__ __m128i __DEFAULT_FN_ATTRS703_mm_comneq_epi64(__m128i __A, __m128i __B)704{705 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ);706}707 708static __inline__ __m128i __DEFAULT_FN_ATTRS709_mm_comfalse_epi64(__m128i __A, __m128i __B)710{711 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE);712}713 714static __inline__ __m128i __DEFAULT_FN_ATTRS715_mm_comtrue_epi64(__m128i __A, __m128i __B)716{717 return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE);718}719 720#define _mm_permute2_pd(X, Y, C, I) \721 ((__m128d)__builtin_ia32_vpermil2pd((__v2df)(__m128d)(X), \722 (__v2df)(__m128d)(Y), \723 (__v2di)(__m128i)(C), (I)))724 725#define _mm256_permute2_pd(X, Y, C, I) \726 ((__m256d)__builtin_ia32_vpermil2pd256((__v4df)(__m256d)(X), \727 (__v4df)(__m256d)(Y), \728 (__v4di)(__m256i)(C), (I)))729 730#define _mm_permute2_ps(X, Y, C, I) \731 ((__m128)__builtin_ia32_vpermil2ps((__v4sf)(__m128)(X), (__v4sf)(__m128)(Y), \732 (__v4si)(__m128i)(C), (I)))733 734#define _mm256_permute2_ps(X, Y, C, I) \735 ((__m256)__builtin_ia32_vpermil2ps256((__v8sf)(__m256)(X), \736 (__v8sf)(__m256)(Y), \737 (__v8si)(__m256i)(C), (I)))738 739static __inline__ __m128 __DEFAULT_FN_ATTRS740_mm_frcz_ss(__m128 __A)741{742 return (__m128)__builtin_ia32_vfrczss((__v4sf)__A);743}744 745static __inline__ __m128d __DEFAULT_FN_ATTRS746_mm_frcz_sd(__m128d __A)747{748 return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A);749}750 751static __inline__ __m128 __DEFAULT_FN_ATTRS752_mm_frcz_ps(__m128 __A)753{754 return (__m128)__builtin_ia32_vfrczps((__v4sf)__A);755}756 757static __inline__ __m128d __DEFAULT_FN_ATTRS758_mm_frcz_pd(__m128d __A)759{760 return (__m128d)__builtin_ia32_vfrczpd((__v2df)__A);761}762 763static __inline__ __m256 __DEFAULT_FN_ATTRS256764_mm256_frcz_ps(__m256 __A)765{766 return (__m256)__builtin_ia32_vfrczps256((__v8sf)__A);767}768 769static __inline__ __m256d __DEFAULT_FN_ATTRS256770_mm256_frcz_pd(__m256d __A)771{772 return (__m256d)__builtin_ia32_vfrczpd256((__v4df)__A);773}774 775#undef __DEFAULT_FN_ATTRS776#undef __DEFAULT_FN_ATTRS256777#undef __DEFAULT_FN_ATTRS_CONSTEXPR778#undef __DEFAULT_FN_ATTRS256_CONSTEXPR779 780#endif /* __XOPINTRIN_H */781