Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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 */