Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*===------------- avx512vbmiintrin.h - VBMI intrinsics ------------------===
  2.  *
  3.  *
  4.  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  5.  * See https://llvm.org/LICENSE.txt for license information.
  6.  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  7.  *
  8.  *===-----------------------------------------------------------------------===
  9.  */
  10. #ifndef __IMMINTRIN_H
  11. #error "Never use <avx512vbmiintrin.h> directly; include <immintrin.h> instead."
  12. #endif
  13.  
  14. #ifndef __VBMIINTRIN_H
  15. #define __VBMIINTRIN_H
  16.  
  17. /* Define the default attributes for the functions in this file. */
  18. #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("avx512vbmi"), __min_vector_width__(512)))
  19.  
  20.  
  21. static __inline__ __m512i __DEFAULT_FN_ATTRS
  22. _mm512_permutex2var_epi8(__m512i __A, __m512i __I, __m512i __B)
  23. {
  24.   return (__m512i)__builtin_ia32_vpermi2varqi512((__v64qi)__A, (__v64qi)__I,
  25.                                                  (__v64qi) __B);
  26. }
  27.  
  28. static __inline__ __m512i __DEFAULT_FN_ATTRS
  29. _mm512_mask_permutex2var_epi8(__m512i __A, __mmask64 __U, __m512i __I,
  30.                               __m512i __B)
  31. {
  32.   return (__m512i)__builtin_ia32_selectb_512(__U,
  33.                                (__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
  34.                                (__v64qi)__A);
  35. }
  36.  
  37. static __inline__ __m512i __DEFAULT_FN_ATTRS
  38. _mm512_mask2_permutex2var_epi8(__m512i __A, __m512i __I, __mmask64 __U,
  39.                                __m512i __B)
  40. {
  41.   return (__m512i)__builtin_ia32_selectb_512(__U,
  42.                                (__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
  43.                                (__v64qi)__I);
  44. }
  45.  
  46. static __inline__ __m512i __DEFAULT_FN_ATTRS
  47. _mm512_maskz_permutex2var_epi8(__mmask64 __U, __m512i __A, __m512i __I,
  48.                                __m512i __B)
  49. {
  50.   return (__m512i)__builtin_ia32_selectb_512(__U,
  51.                                (__v64qi)_mm512_permutex2var_epi8(__A, __I, __B),
  52.                                (__v64qi)_mm512_setzero_si512());
  53. }
  54.  
  55. static __inline__ __m512i __DEFAULT_FN_ATTRS
  56. _mm512_permutexvar_epi8 (__m512i __A, __m512i __B)
  57. {
  58.   return (__m512i)__builtin_ia32_permvarqi512((__v64qi) __B, (__v64qi) __A);
  59. }
  60.  
  61. static __inline__ __m512i __DEFAULT_FN_ATTRS
  62. _mm512_maskz_permutexvar_epi8 (__mmask64 __M, __m512i __A,
  63.         __m512i __B)
  64. {
  65.   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
  66.                                      (__v64qi)_mm512_permutexvar_epi8(__A, __B),
  67.                                      (__v64qi)_mm512_setzero_si512());
  68. }
  69.  
  70. static __inline__ __m512i __DEFAULT_FN_ATTRS
  71. _mm512_mask_permutexvar_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
  72.              __m512i __B)
  73. {
  74.   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
  75.                                      (__v64qi)_mm512_permutexvar_epi8(__A, __B),
  76.                                      (__v64qi)__W);
  77. }
  78.  
  79. static __inline__ __m512i __DEFAULT_FN_ATTRS
  80. _mm512_multishift_epi64_epi8(__m512i __X, __m512i __Y)
  81. {
  82.   return (__m512i)__builtin_ia32_vpmultishiftqb512((__v64qi)__X, (__v64qi) __Y);
  83. }
  84.  
  85. static __inline__ __m512i __DEFAULT_FN_ATTRS
  86. _mm512_mask_multishift_epi64_epi8(__m512i __W, __mmask64 __M, __m512i __X,
  87.                                   __m512i __Y)
  88. {
  89.   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
  90.                                 (__v64qi)_mm512_multishift_epi64_epi8(__X, __Y),
  91.                                 (__v64qi)__W);
  92. }
  93.  
  94. static __inline__ __m512i __DEFAULT_FN_ATTRS
  95. _mm512_maskz_multishift_epi64_epi8(__mmask64 __M, __m512i __X, __m512i __Y)
  96. {
  97.   return (__m512i)__builtin_ia32_selectb_512((__mmask64)__M,
  98.                                 (__v64qi)_mm512_multishift_epi64_epi8(__X, __Y),
  99.                                 (__v64qi)_mm512_setzero_si512());
  100. }
  101.  
  102.  
  103. #undef __DEFAULT_FN_ATTRS
  104.  
  105. #endif
  106.