Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. /*===---- avx512vpopcntdqintrin.h - AVX512VPOPCNTDQ 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                                                                         \
  12.     "Never use <avx512vpopcntdqvlintrin.h> directly; include <immintrin.h> instead."
  13. #endif
  14.  
  15. #ifndef __AVX512VPOPCNTDQVLINTRIN_H
  16. #define __AVX512VPOPCNTDQVLINTRIN_H
  17.  
  18. /* Define the default attributes for the functions in this file. */
  19. #define __DEFAULT_FN_ATTRS128                                                  \
  20.   __attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl"), __min_vector_width__(128)))
  21. #define __DEFAULT_FN_ATTRS256                                                  \
  22.   __attribute__((__always_inline__, __nodebug__, __target__("avx512vpopcntdq,avx512vl"), __min_vector_width__(256)))
  23.  
  24. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  25. _mm_popcnt_epi64(__m128i __A) {
  26.   return (__m128i)__builtin_ia32_vpopcntq_128((__v2di)__A);
  27. }
  28.  
  29. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  30. _mm_mask_popcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
  31.   return (__m128i)__builtin_ia32_selectq_128(
  32.       (__mmask8)__U, (__v2di)_mm_popcnt_epi64(__A), (__v2di)__W);
  33. }
  34.  
  35. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  36. _mm_maskz_popcnt_epi64(__mmask8 __U, __m128i __A) {
  37.   return _mm_mask_popcnt_epi64((__m128i)_mm_setzero_si128(), __U, __A);
  38. }
  39.  
  40. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  41. _mm_popcnt_epi32(__m128i __A) {
  42.   return (__m128i)__builtin_ia32_vpopcntd_128((__v4si)__A);
  43. }
  44.  
  45. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  46. _mm_mask_popcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
  47.   return (__m128i)__builtin_ia32_selectd_128(
  48.       (__mmask8)__U, (__v4si)_mm_popcnt_epi32(__A), (__v4si)__W);
  49. }
  50.  
  51. static __inline__ __m128i __DEFAULT_FN_ATTRS128
  52. _mm_maskz_popcnt_epi32(__mmask8 __U, __m128i __A) {
  53.   return _mm_mask_popcnt_epi32((__m128i)_mm_setzero_si128(), __U, __A);
  54. }
  55.  
  56. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  57. _mm256_popcnt_epi64(__m256i __A) {
  58.   return (__m256i)__builtin_ia32_vpopcntq_256((__v4di)__A);
  59. }
  60.  
  61. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  62. _mm256_mask_popcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
  63.   return (__m256i)__builtin_ia32_selectq_256(
  64.       (__mmask8)__U, (__v4di)_mm256_popcnt_epi64(__A), (__v4di)__W);
  65. }
  66.  
  67. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  68. _mm256_maskz_popcnt_epi64(__mmask8 __U, __m256i __A) {
  69.   return _mm256_mask_popcnt_epi64((__m256i)_mm256_setzero_si256(), __U, __A);
  70. }
  71.  
  72. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  73. _mm256_popcnt_epi32(__m256i __A) {
  74.   return (__m256i)__builtin_ia32_vpopcntd_256((__v8si)__A);
  75. }
  76.  
  77. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  78. _mm256_mask_popcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
  79.   return (__m256i)__builtin_ia32_selectd_256(
  80.       (__mmask8)__U, (__v8si)_mm256_popcnt_epi32(__A), (__v8si)__W);
  81. }
  82.  
  83. static __inline__ __m256i __DEFAULT_FN_ATTRS256
  84. _mm256_maskz_popcnt_epi32(__mmask8 __U, __m256i __A) {
  85.   return _mm256_mask_popcnt_epi32((__m256i)_mm256_setzero_si256(), __U, __A);
  86. }
  87.  
  88. #undef __DEFAULT_FN_ATTRS128
  89. #undef __DEFAULT_FN_ATTRS256
  90.  
  91. #endif
  92.