Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. /*===---- popcntintrin.h - POPCNT intrinsics -------------------------------===
  2.  *
  3.  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4.  * See https://llvm.org/LICENSE.txt for license information.
  5.  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6.  *
  7.  *===-----------------------------------------------------------------------===
  8.  */
  9.  
  10. #ifndef __POPCNTINTRIN_H
  11. #define __POPCNTINTRIN_H
  12.  
  13. /* Define the default attributes for the functions in this file. */
  14. #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("popcnt")))
  15.  
  16. #if defined(__cplusplus) && (__cplusplus >= 201103L)
  17. #define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS constexpr
  18. #else
  19. #define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS
  20. #endif
  21.  
  22. /// Counts the number of bits in the source operand having a value of 1.
  23. ///
  24. /// \headerfile <x86intrin.h>
  25. ///
  26. /// This intrinsic corresponds to the <c> POPCNT </c> instruction.
  27. ///
  28. /// \param __A
  29. ///    An unsigned 32-bit integer operand.
  30. /// \returns A 32-bit integer containing the number of bits with value 1 in the
  31. ///    source operand.
  32. static __inline__ int __DEFAULT_FN_ATTRS_CONSTEXPR
  33. _mm_popcnt_u32(unsigned int __A)
  34. {
  35.   return __builtin_popcount(__A);
  36. }
  37.  
  38. #ifdef __x86_64__
  39. /// Counts the number of bits in the source operand having a value of 1.
  40. ///
  41. /// \headerfile <x86intrin.h>
  42. ///
  43. /// This intrinsic corresponds to the <c> POPCNT </c> instruction.
  44. ///
  45. /// \param __A
  46. ///    An unsigned 64-bit integer operand.
  47. /// \returns A 64-bit integer containing the number of bits with value 1 in the
  48. ///    source operand.
  49. static __inline__ long long __DEFAULT_FN_ATTRS_CONSTEXPR
  50. _mm_popcnt_u64(unsigned long long __A)
  51. {
  52.   return __builtin_popcountll(__A);
  53. }
  54. #endif /* __x86_64__ */
  55.  
  56. #undef __DEFAULT_FN_ATTRS
  57. #undef __DEFAULT_FN_ATTRS_CONSTEXPR
  58.  
  59. #endif /* __POPCNTINTRIN_H */
  60.