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