1251662Sdim/*===---- xopintrin.h - XOP intrinsics -------------------------------------=== 2239313Sdim * 3353358Sdim * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim * See https://llvm.org/LICENSE.txt for license information. 5353358Sdim * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6239313Sdim * 7239313Sdim *===-----------------------------------------------------------------------=== 8239313Sdim */ 9239313Sdim 10239313Sdim#ifndef __X86INTRIN_H 11251662Sdim#error "Never use <xopintrin.h> directly; include <x86intrin.h> instead." 12239313Sdim#endif 13239313Sdim 14239313Sdim#ifndef __XOPINTRIN_H 15239313Sdim#define __XOPINTRIN_H 16239313Sdim 17239313Sdim#include <fma4intrin.h> 18239313Sdim 19288943Sdim/* Define the default attributes for the functions in this file. */ 20341825Sdim#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(128))) 21341825Sdim#define __DEFAULT_FN_ATTRS256 __attribute__((__always_inline__, __nodebug__, __target__("xop"), __min_vector_width__(256))) 22288943Sdim 23288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 24239313Sdim_mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) 25239313Sdim{ 26239313Sdim return (__m128i)__builtin_ia32_vpmacssww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C); 27239313Sdim} 28239313Sdim 29288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 30239313Sdim_mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C) 31239313Sdim{ 32239313Sdim return (__m128i)__builtin_ia32_vpmacsww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C); 33239313Sdim} 34239313Sdim 35288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 36239313Sdim_mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C) 37239313Sdim{ 38239313Sdim return (__m128i)__builtin_ia32_vpmacsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); 39239313Sdim} 40239313Sdim 41288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 42239313Sdim_mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C) 43239313Sdim{ 44239313Sdim return (__m128i)__builtin_ia32_vpmacswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); 45239313Sdim} 46239313Sdim 47288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 48239313Sdim_mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C) 49239313Sdim{ 50239313Sdim return (__m128i)__builtin_ia32_vpmacssdd((__v4si)__A, (__v4si)__B, (__v4si)__C); 51239313Sdim} 52239313Sdim 53288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 54239313Sdim_mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C) 55239313Sdim{ 56239313Sdim return (__m128i)__builtin_ia32_vpmacsdd((__v4si)__A, (__v4si)__B, (__v4si)__C); 57239313Sdim} 58239313Sdim 59288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 60239313Sdim_mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C) 61239313Sdim{ 62239313Sdim return (__m128i)__builtin_ia32_vpmacssdql((__v4si)__A, (__v4si)__B, (__v2di)__C); 63239313Sdim} 64239313Sdim 65288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 66239313Sdim_mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C) 67239313Sdim{ 68239313Sdim return (__m128i)__builtin_ia32_vpmacsdql((__v4si)__A, (__v4si)__B, (__v2di)__C); 69239313Sdim} 70239313Sdim 71288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 72239313Sdim_mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C) 73239313Sdim{ 74239313Sdim return (__m128i)__builtin_ia32_vpmacssdqh((__v4si)__A, (__v4si)__B, (__v2di)__C); 75239313Sdim} 76239313Sdim 77288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 78239313Sdim_mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C) 79239313Sdim{ 80239313Sdim return (__m128i)__builtin_ia32_vpmacsdqh((__v4si)__A, (__v4si)__B, (__v2di)__C); 81239313Sdim} 82239313Sdim 83288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 84239313Sdim_mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C) 85239313Sdim{ 86239313Sdim return (__m128i)__builtin_ia32_vpmadcsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); 87239313Sdim} 88239313Sdim 89288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 90239313Sdim_mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C) 91239313Sdim{ 92239313Sdim return (__m128i)__builtin_ia32_vpmadcswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); 93239313Sdim} 94239313Sdim 95288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 96239313Sdim_mm_haddw_epi8(__m128i __A) 97239313Sdim{ 98239313Sdim return (__m128i)__builtin_ia32_vphaddbw((__v16qi)__A); 99239313Sdim} 100239313Sdim 101288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 102239313Sdim_mm_haddd_epi8(__m128i __A) 103239313Sdim{ 104239313Sdim return (__m128i)__builtin_ia32_vphaddbd((__v16qi)__A); 105239313Sdim} 106239313Sdim 107288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 108239313Sdim_mm_haddq_epi8(__m128i __A) 109239313Sdim{ 110239313Sdim return (__m128i)__builtin_ia32_vphaddbq((__v16qi)__A); 111239313Sdim} 112239313Sdim 113288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 114239313Sdim_mm_haddd_epi16(__m128i __A) 115239313Sdim{ 116239313Sdim return (__m128i)__builtin_ia32_vphaddwd((__v8hi)__A); 117239313Sdim} 118239313Sdim 119288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 120239313Sdim_mm_haddq_epi16(__m128i __A) 121239313Sdim{ 122239313Sdim return (__m128i)__builtin_ia32_vphaddwq((__v8hi)__A); 123239313Sdim} 124239313Sdim 125288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 126239313Sdim_mm_haddq_epi32(__m128i __A) 127239313Sdim{ 128239313Sdim return (__m128i)__builtin_ia32_vphadddq((__v4si)__A); 129239313Sdim} 130239313Sdim 131288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 132239313Sdim_mm_haddw_epu8(__m128i __A) 133239313Sdim{ 134239313Sdim return (__m128i)__builtin_ia32_vphaddubw((__v16qi)__A); 135239313Sdim} 136239313Sdim 137288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 138239313Sdim_mm_haddd_epu8(__m128i __A) 139239313Sdim{ 140239313Sdim return (__m128i)__builtin_ia32_vphaddubd((__v16qi)__A); 141239313Sdim} 142239313Sdim 143288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 144239313Sdim_mm_haddq_epu8(__m128i __A) 145239313Sdim{ 146239313Sdim return (__m128i)__builtin_ia32_vphaddubq((__v16qi)__A); 147239313Sdim} 148239313Sdim 149288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 150239313Sdim_mm_haddd_epu16(__m128i __A) 151239313Sdim{ 152239313Sdim return (__m128i)__builtin_ia32_vphadduwd((__v8hi)__A); 153239313Sdim} 154239313Sdim 155288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 156239313Sdim_mm_haddq_epu16(__m128i __A) 157239313Sdim{ 158239313Sdim return (__m128i)__builtin_ia32_vphadduwq((__v8hi)__A); 159239313Sdim} 160239313Sdim 161288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 162239313Sdim_mm_haddq_epu32(__m128i __A) 163239313Sdim{ 164239313Sdim return (__m128i)__builtin_ia32_vphaddudq((__v4si)__A); 165239313Sdim} 166239313Sdim 167288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 168239313Sdim_mm_hsubw_epi8(__m128i __A) 169239313Sdim{ 170239313Sdim return (__m128i)__builtin_ia32_vphsubbw((__v16qi)__A); 171239313Sdim} 172239313Sdim 173288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 174239313Sdim_mm_hsubd_epi16(__m128i __A) 175239313Sdim{ 176239313Sdim return (__m128i)__builtin_ia32_vphsubwd((__v8hi)__A); 177239313Sdim} 178239313Sdim 179288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 180239313Sdim_mm_hsubq_epi32(__m128i __A) 181239313Sdim{ 182239313Sdim return (__m128i)__builtin_ia32_vphsubdq((__v4si)__A); 183239313Sdim} 184239313Sdim 185288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 186239313Sdim_mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C) 187239313Sdim{ 188321369Sdim return (__m128i)(((__v2du)__A & (__v2du)__C) | ((__v2du)__B & ~(__v2du)__C)); 189239313Sdim} 190239313Sdim 191341825Sdimstatic __inline__ __m256i __DEFAULT_FN_ATTRS256 192239313Sdim_mm256_cmov_si256(__m256i __A, __m256i __B, __m256i __C) 193239313Sdim{ 194321369Sdim return (__m256i)(((__v4du)__A & (__v4du)__C) | ((__v4du)__B & ~(__v4du)__C)); 195239313Sdim} 196239313Sdim 197288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 198239313Sdim_mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C) 199239313Sdim{ 200239313Sdim return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C); 201239313Sdim} 202239313Sdim 203288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 204239313Sdim_mm_rot_epi8(__m128i __A, __m128i __B) 205239313Sdim{ 206239313Sdim return (__m128i)__builtin_ia32_vprotb((__v16qi)__A, (__v16qi)__B); 207239313Sdim} 208239313Sdim 209288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 210239313Sdim_mm_rot_epi16(__m128i __A, __m128i __B) 211239313Sdim{ 212239313Sdim return (__m128i)__builtin_ia32_vprotw((__v8hi)__A, (__v8hi)__B); 213239313Sdim} 214239313Sdim 215288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 216239313Sdim_mm_rot_epi32(__m128i __A, __m128i __B) 217239313Sdim{ 218239313Sdim return (__m128i)__builtin_ia32_vprotd((__v4si)__A, (__v4si)__B); 219239313Sdim} 220239313Sdim 221288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 222239313Sdim_mm_rot_epi64(__m128i __A, __m128i __B) 223239313Sdim{ 224239313Sdim return (__m128i)__builtin_ia32_vprotq((__v2di)__A, (__v2di)__B); 225239313Sdim} 226239313Sdim 227341825Sdim#define _mm_roti_epi8(A, N) \ 228341825Sdim (__m128i)__builtin_ia32_vprotbi((__v16qi)(__m128i)(A), (N)) 229239313Sdim 230341825Sdim#define _mm_roti_epi16(A, N) \ 231341825Sdim (__m128i)__builtin_ia32_vprotwi((__v8hi)(__m128i)(A), (N)) 232239313Sdim 233341825Sdim#define _mm_roti_epi32(A, N) \ 234341825Sdim (__m128i)__builtin_ia32_vprotdi((__v4si)(__m128i)(A), (N)) 235239313Sdim 236341825Sdim#define _mm_roti_epi64(A, N) \ 237341825Sdim (__m128i)__builtin_ia32_vprotqi((__v2di)(__m128i)(A), (N)) 238239313Sdim 239288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 240239313Sdim_mm_shl_epi8(__m128i __A, __m128i __B) 241239313Sdim{ 242239313Sdim return (__m128i)__builtin_ia32_vpshlb((__v16qi)__A, (__v16qi)__B); 243239313Sdim} 244239313Sdim 245288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 246239313Sdim_mm_shl_epi16(__m128i __A, __m128i __B) 247239313Sdim{ 248239313Sdim return (__m128i)__builtin_ia32_vpshlw((__v8hi)__A, (__v8hi)__B); 249239313Sdim} 250239313Sdim 251288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 252239313Sdim_mm_shl_epi32(__m128i __A, __m128i __B) 253239313Sdim{ 254239313Sdim return (__m128i)__builtin_ia32_vpshld((__v4si)__A, (__v4si)__B); 255239313Sdim} 256239313Sdim 257288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 258239313Sdim_mm_shl_epi64(__m128i __A, __m128i __B) 259239313Sdim{ 260239313Sdim return (__m128i)__builtin_ia32_vpshlq((__v2di)__A, (__v2di)__B); 261239313Sdim} 262239313Sdim 263288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 264239313Sdim_mm_sha_epi8(__m128i __A, __m128i __B) 265239313Sdim{ 266239313Sdim return (__m128i)__builtin_ia32_vpshab((__v16qi)__A, (__v16qi)__B); 267239313Sdim} 268239313Sdim 269288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 270239313Sdim_mm_sha_epi16(__m128i __A, __m128i __B) 271239313Sdim{ 272239313Sdim return (__m128i)__builtin_ia32_vpshaw((__v8hi)__A, (__v8hi)__B); 273239313Sdim} 274239313Sdim 275288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 276239313Sdim_mm_sha_epi32(__m128i __A, __m128i __B) 277239313Sdim{ 278239313Sdim return (__m128i)__builtin_ia32_vpshad((__v4si)__A, (__v4si)__B); 279239313Sdim} 280239313Sdim 281288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 282239313Sdim_mm_sha_epi64(__m128i __A, __m128i __B) 283239313Sdim{ 284239313Sdim return (__m128i)__builtin_ia32_vpshaq((__v2di)__A, (__v2di)__B); 285239313Sdim} 286239313Sdim 287341825Sdim#define _mm_com_epu8(A, B, N) \ 288296417Sdim (__m128i)__builtin_ia32_vpcomub((__v16qi)(__m128i)(A), \ 289341825Sdim (__v16qi)(__m128i)(B), (N)) 290239313Sdim 291341825Sdim#define _mm_com_epu16(A, B, N) \ 292296417Sdim (__m128i)__builtin_ia32_vpcomuw((__v8hi)(__m128i)(A), \ 293341825Sdim (__v8hi)(__m128i)(B), (N)) 294239313Sdim 295341825Sdim#define _mm_com_epu32(A, B, N) \ 296296417Sdim (__m128i)__builtin_ia32_vpcomud((__v4si)(__m128i)(A), \ 297341825Sdim (__v4si)(__m128i)(B), (N)) 298239313Sdim 299341825Sdim#define _mm_com_epu64(A, B, N) \ 300296417Sdim (__m128i)__builtin_ia32_vpcomuq((__v2di)(__m128i)(A), \ 301341825Sdim (__v2di)(__m128i)(B), (N)) 302239313Sdim 303341825Sdim#define _mm_com_epi8(A, B, N) \ 304296417Sdim (__m128i)__builtin_ia32_vpcomb((__v16qi)(__m128i)(A), \ 305341825Sdim (__v16qi)(__m128i)(B), (N)) 306239313Sdim 307341825Sdim#define _mm_com_epi16(A, B, N) \ 308296417Sdim (__m128i)__builtin_ia32_vpcomw((__v8hi)(__m128i)(A), \ 309341825Sdim (__v8hi)(__m128i)(B), (N)) 310239313Sdim 311341825Sdim#define _mm_com_epi32(A, B, N) \ 312296417Sdim (__m128i)__builtin_ia32_vpcomd((__v4si)(__m128i)(A), \ 313341825Sdim (__v4si)(__m128i)(B), (N)) 314239313Sdim 315341825Sdim#define _mm_com_epi64(A, B, N) \ 316296417Sdim (__m128i)__builtin_ia32_vpcomq((__v2di)(__m128i)(A), \ 317341825Sdim (__v2di)(__m128i)(B), (N)) 318239313Sdim 319261991Sdim#define _MM_PCOMCTRL_LT 0 320261991Sdim#define _MM_PCOMCTRL_LE 1 321261991Sdim#define _MM_PCOMCTRL_GT 2 322261991Sdim#define _MM_PCOMCTRL_GE 3 323261991Sdim#define _MM_PCOMCTRL_EQ 4 324261991Sdim#define _MM_PCOMCTRL_NEQ 5 325261991Sdim#define _MM_PCOMCTRL_FALSE 6 326261991Sdim#define _MM_PCOMCTRL_TRUE 7 327261991Sdim 328288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 329261991Sdim_mm_comlt_epu8(__m128i __A, __m128i __B) 330261991Sdim{ 331261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT); 332261991Sdim} 333261991Sdim 334288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 335261991Sdim_mm_comle_epu8(__m128i __A, __m128i __B) 336261991Sdim{ 337261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE); 338261991Sdim} 339261991Sdim 340288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 341261991Sdim_mm_comgt_epu8(__m128i __A, __m128i __B) 342261991Sdim{ 343261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT); 344261991Sdim} 345261991Sdim 346288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 347261991Sdim_mm_comge_epu8(__m128i __A, __m128i __B) 348261991Sdim{ 349261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE); 350261991Sdim} 351261991Sdim 352288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 353261991Sdim_mm_comeq_epu8(__m128i __A, __m128i __B) 354261991Sdim{ 355261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ); 356261991Sdim} 357261991Sdim 358288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 359261991Sdim_mm_comneq_epu8(__m128i __A, __m128i __B) 360261991Sdim{ 361261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ); 362261991Sdim} 363261991Sdim 364288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 365261991Sdim_mm_comfalse_epu8(__m128i __A, __m128i __B) 366261991Sdim{ 367261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE); 368261991Sdim} 369261991Sdim 370288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 371261991Sdim_mm_comtrue_epu8(__m128i __A, __m128i __B) 372261991Sdim{ 373261991Sdim return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE); 374261991Sdim} 375261991Sdim 376288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 377261991Sdim_mm_comlt_epu16(__m128i __A, __m128i __B) 378261991Sdim{ 379261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT); 380261991Sdim} 381261991Sdim 382288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 383261991Sdim_mm_comle_epu16(__m128i __A, __m128i __B) 384261991Sdim{ 385261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE); 386261991Sdim} 387261991Sdim 388288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 389261991Sdim_mm_comgt_epu16(__m128i __A, __m128i __B) 390261991Sdim{ 391261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT); 392261991Sdim} 393261991Sdim 394288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 395261991Sdim_mm_comge_epu16(__m128i __A, __m128i __B) 396261991Sdim{ 397261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE); 398261991Sdim} 399261991Sdim 400288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 401261991Sdim_mm_comeq_epu16(__m128i __A, __m128i __B) 402261991Sdim{ 403261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ); 404261991Sdim} 405261991Sdim 406288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 407261991Sdim_mm_comneq_epu16(__m128i __A, __m128i __B) 408261991Sdim{ 409261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ); 410261991Sdim} 411261991Sdim 412288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 413261991Sdim_mm_comfalse_epu16(__m128i __A, __m128i __B) 414261991Sdim{ 415261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE); 416261991Sdim} 417261991Sdim 418288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 419261991Sdim_mm_comtrue_epu16(__m128i __A, __m128i __B) 420261991Sdim{ 421261991Sdim return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE); 422261991Sdim} 423261991Sdim 424288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 425261991Sdim_mm_comlt_epu32(__m128i __A, __m128i __B) 426261991Sdim{ 427261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT); 428261991Sdim} 429261991Sdim 430288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 431261991Sdim_mm_comle_epu32(__m128i __A, __m128i __B) 432261991Sdim{ 433261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE); 434261991Sdim} 435261991Sdim 436288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 437261991Sdim_mm_comgt_epu32(__m128i __A, __m128i __B) 438261991Sdim{ 439261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT); 440261991Sdim} 441261991Sdim 442288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 443261991Sdim_mm_comge_epu32(__m128i __A, __m128i __B) 444261991Sdim{ 445261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE); 446261991Sdim} 447261991Sdim 448288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 449261991Sdim_mm_comeq_epu32(__m128i __A, __m128i __B) 450261991Sdim{ 451261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ); 452261991Sdim} 453261991Sdim 454288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 455261991Sdim_mm_comneq_epu32(__m128i __A, __m128i __B) 456261991Sdim{ 457261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ); 458261991Sdim} 459261991Sdim 460288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 461261991Sdim_mm_comfalse_epu32(__m128i __A, __m128i __B) 462261991Sdim{ 463261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE); 464261991Sdim} 465261991Sdim 466288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 467261991Sdim_mm_comtrue_epu32(__m128i __A, __m128i __B) 468261991Sdim{ 469261991Sdim return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE); 470261991Sdim} 471261991Sdim 472288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 473261991Sdim_mm_comlt_epu64(__m128i __A, __m128i __B) 474261991Sdim{ 475261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT); 476261991Sdim} 477261991Sdim 478288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 479261991Sdim_mm_comle_epu64(__m128i __A, __m128i __B) 480261991Sdim{ 481261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE); 482261991Sdim} 483261991Sdim 484288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 485261991Sdim_mm_comgt_epu64(__m128i __A, __m128i __B) 486261991Sdim{ 487261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT); 488261991Sdim} 489261991Sdim 490288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 491261991Sdim_mm_comge_epu64(__m128i __A, __m128i __B) 492261991Sdim{ 493261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE); 494261991Sdim} 495261991Sdim 496288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 497261991Sdim_mm_comeq_epu64(__m128i __A, __m128i __B) 498261991Sdim{ 499261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ); 500261991Sdim} 501261991Sdim 502288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 503261991Sdim_mm_comneq_epu64(__m128i __A, __m128i __B) 504261991Sdim{ 505261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ); 506261991Sdim} 507261991Sdim 508288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 509261991Sdim_mm_comfalse_epu64(__m128i __A, __m128i __B) 510261991Sdim{ 511261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE); 512261991Sdim} 513261991Sdim 514288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 515261991Sdim_mm_comtrue_epu64(__m128i __A, __m128i __B) 516261991Sdim{ 517261991Sdim return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE); 518261991Sdim} 519261991Sdim 520288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 521261991Sdim_mm_comlt_epi8(__m128i __A, __m128i __B) 522261991Sdim{ 523261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT); 524261991Sdim} 525261991Sdim 526288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 527261991Sdim_mm_comle_epi8(__m128i __A, __m128i __B) 528261991Sdim{ 529261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE); 530261991Sdim} 531261991Sdim 532288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 533261991Sdim_mm_comgt_epi8(__m128i __A, __m128i __B) 534261991Sdim{ 535261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT); 536261991Sdim} 537261991Sdim 538288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 539261991Sdim_mm_comge_epi8(__m128i __A, __m128i __B) 540261991Sdim{ 541261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE); 542261991Sdim} 543261991Sdim 544288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 545261991Sdim_mm_comeq_epi8(__m128i __A, __m128i __B) 546261991Sdim{ 547261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ); 548261991Sdim} 549261991Sdim 550288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 551261991Sdim_mm_comneq_epi8(__m128i __A, __m128i __B) 552261991Sdim{ 553261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ); 554261991Sdim} 555261991Sdim 556288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 557261991Sdim_mm_comfalse_epi8(__m128i __A, __m128i __B) 558261991Sdim{ 559261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE); 560261991Sdim} 561261991Sdim 562288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 563261991Sdim_mm_comtrue_epi8(__m128i __A, __m128i __B) 564261991Sdim{ 565261991Sdim return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE); 566261991Sdim} 567261991Sdim 568288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 569261991Sdim_mm_comlt_epi16(__m128i __A, __m128i __B) 570261991Sdim{ 571261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT); 572261991Sdim} 573261991Sdim 574288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 575261991Sdim_mm_comle_epi16(__m128i __A, __m128i __B) 576261991Sdim{ 577261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE); 578261991Sdim} 579261991Sdim 580288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 581261991Sdim_mm_comgt_epi16(__m128i __A, __m128i __B) 582261991Sdim{ 583261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT); 584261991Sdim} 585261991Sdim 586288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 587261991Sdim_mm_comge_epi16(__m128i __A, __m128i __B) 588261991Sdim{ 589261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE); 590261991Sdim} 591261991Sdim 592288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 593261991Sdim_mm_comeq_epi16(__m128i __A, __m128i __B) 594261991Sdim{ 595261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ); 596261991Sdim} 597261991Sdim 598288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 599261991Sdim_mm_comneq_epi16(__m128i __A, __m128i __B) 600261991Sdim{ 601261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ); 602261991Sdim} 603261991Sdim 604288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 605261991Sdim_mm_comfalse_epi16(__m128i __A, __m128i __B) 606261991Sdim{ 607261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE); 608261991Sdim} 609261991Sdim 610288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 611261991Sdim_mm_comtrue_epi16(__m128i __A, __m128i __B) 612261991Sdim{ 613261991Sdim return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE); 614261991Sdim} 615261991Sdim 616288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 617261991Sdim_mm_comlt_epi32(__m128i __A, __m128i __B) 618261991Sdim{ 619261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT); 620261991Sdim} 621261991Sdim 622288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 623261991Sdim_mm_comle_epi32(__m128i __A, __m128i __B) 624261991Sdim{ 625261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE); 626261991Sdim} 627261991Sdim 628288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 629261991Sdim_mm_comgt_epi32(__m128i __A, __m128i __B) 630261991Sdim{ 631261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT); 632261991Sdim} 633261991Sdim 634288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 635261991Sdim_mm_comge_epi32(__m128i __A, __m128i __B) 636261991Sdim{ 637261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE); 638261991Sdim} 639261991Sdim 640288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 641261991Sdim_mm_comeq_epi32(__m128i __A, __m128i __B) 642261991Sdim{ 643261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ); 644261991Sdim} 645261991Sdim 646288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 647261991Sdim_mm_comneq_epi32(__m128i __A, __m128i __B) 648261991Sdim{ 649261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ); 650261991Sdim} 651261991Sdim 652288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 653261991Sdim_mm_comfalse_epi32(__m128i __A, __m128i __B) 654261991Sdim{ 655261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE); 656261991Sdim} 657261991Sdim 658288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 659261991Sdim_mm_comtrue_epi32(__m128i __A, __m128i __B) 660261991Sdim{ 661261991Sdim return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE); 662261991Sdim} 663261991Sdim 664288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 665261991Sdim_mm_comlt_epi64(__m128i __A, __m128i __B) 666261991Sdim{ 667261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT); 668261991Sdim} 669261991Sdim 670288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 671261991Sdim_mm_comle_epi64(__m128i __A, __m128i __B) 672261991Sdim{ 673261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE); 674261991Sdim} 675261991Sdim 676288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 677261991Sdim_mm_comgt_epi64(__m128i __A, __m128i __B) 678261991Sdim{ 679261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT); 680261991Sdim} 681261991Sdim 682288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 683261991Sdim_mm_comge_epi64(__m128i __A, __m128i __B) 684261991Sdim{ 685261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE); 686261991Sdim} 687261991Sdim 688288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 689261991Sdim_mm_comeq_epi64(__m128i __A, __m128i __B) 690261991Sdim{ 691261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ); 692261991Sdim} 693261991Sdim 694288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 695261991Sdim_mm_comneq_epi64(__m128i __A, __m128i __B) 696261991Sdim{ 697261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ); 698261991Sdim} 699261991Sdim 700288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 701261991Sdim_mm_comfalse_epi64(__m128i __A, __m128i __B) 702261991Sdim{ 703261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE); 704261991Sdim} 705261991Sdim 706288943Sdimstatic __inline__ __m128i __DEFAULT_FN_ATTRS 707261991Sdim_mm_comtrue_epi64(__m128i __A, __m128i __B) 708261991Sdim{ 709261991Sdim return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE); 710261991Sdim} 711261991Sdim 712341825Sdim#define _mm_permute2_pd(X, Y, C, I) \ 713296417Sdim (__m128d)__builtin_ia32_vpermil2pd((__v2df)(__m128d)(X), \ 714296417Sdim (__v2df)(__m128d)(Y), \ 715341825Sdim (__v2di)(__m128i)(C), (I)) 716239313Sdim 717341825Sdim#define _mm256_permute2_pd(X, Y, C, I) \ 718296417Sdim (__m256d)__builtin_ia32_vpermil2pd256((__v4df)(__m256d)(X), \ 719296417Sdim (__v4df)(__m256d)(Y), \ 720341825Sdim (__v4di)(__m256i)(C), (I)) 721239313Sdim 722341825Sdim#define _mm_permute2_ps(X, Y, C, I) \ 723296417Sdim (__m128)__builtin_ia32_vpermil2ps((__v4sf)(__m128)(X), (__v4sf)(__m128)(Y), \ 724341825Sdim (__v4si)(__m128i)(C), (I)) 725239313Sdim 726341825Sdim#define _mm256_permute2_ps(X, Y, C, I) \ 727296417Sdim (__m256)__builtin_ia32_vpermil2ps256((__v8sf)(__m256)(X), \ 728296417Sdim (__v8sf)(__m256)(Y), \ 729341825Sdim (__v8si)(__m256i)(C), (I)) 730239313Sdim 731288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS 732239313Sdim_mm_frcz_ss(__m128 __A) 733239313Sdim{ 734239313Sdim return (__m128)__builtin_ia32_vfrczss((__v4sf)__A); 735239313Sdim} 736239313Sdim 737288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS 738239313Sdim_mm_frcz_sd(__m128d __A) 739239313Sdim{ 740239313Sdim return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A); 741239313Sdim} 742239313Sdim 743288943Sdimstatic __inline__ __m128 __DEFAULT_FN_ATTRS 744239313Sdim_mm_frcz_ps(__m128 __A) 745239313Sdim{ 746239313Sdim return (__m128)__builtin_ia32_vfrczps((__v4sf)__A); 747239313Sdim} 748239313Sdim 749288943Sdimstatic __inline__ __m128d __DEFAULT_FN_ATTRS 750239313Sdim_mm_frcz_pd(__m128d __A) 751239313Sdim{ 752239313Sdim return (__m128d)__builtin_ia32_vfrczpd((__v2df)__A); 753239313Sdim} 754239313Sdim 755341825Sdimstatic __inline__ __m256 __DEFAULT_FN_ATTRS256 756239313Sdim_mm256_frcz_ps(__m256 __A) 757239313Sdim{ 758239313Sdim return (__m256)__builtin_ia32_vfrczps256((__v8sf)__A); 759239313Sdim} 760239313Sdim 761341825Sdimstatic __inline__ __m256d __DEFAULT_FN_ATTRS256 762239313Sdim_mm256_frcz_pd(__m256d __A) 763239313Sdim{ 764239313Sdim return (__m256d)__builtin_ia32_vfrczpd256((__v4df)__A); 765239313Sdim} 766239313Sdim 767288943Sdim#undef __DEFAULT_FN_ATTRS 768341825Sdim#undef __DEFAULT_FN_ATTRS256 769288943Sdim 770239313Sdim#endif /* __XOPINTRIN_H */ 771