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