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
/*===---- lzcntintrin.h - LZCNT 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
#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H
11
#error "Never use <lzcntintrin.h> directly; include <x86intrin.h> instead."
12
#endif
13
 
14
#ifndef __LZCNTINTRIN_H
15
#define __LZCNTINTRIN_H
16
 
17
/* Define the default attributes for the functions in this file. */
18
#define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("lzcnt")))
19
 
20
#ifndef _MSC_VER
21
/// Counts the number of leading zero bits in the operand.
22
///
23
/// \headerfile <x86intrin.h>
24
///
25
/// This intrinsic corresponds to the \c LZCNT instruction.
26
///
27
/// \param __X
28
///    An unsigned 16-bit integer whose leading zeros are to be counted.
29
/// \returns An unsigned 16-bit integer containing the number of leading zero
30
///    bits in the operand.
31
#define __lzcnt16(X) __builtin_ia32_lzcnt_u16((unsigned short)(X))
32
#endif // _MSC_VER
33
 
34
/// Counts the number of leading zero bits in the operand.
35
///
36
/// \headerfile <x86intrin.h>
37
///
38
/// This intrinsic corresponds to the \c LZCNT instruction.
39
///
40
/// \param __X
41
///    An unsigned 32-bit integer whose leading zeros are to be counted.
42
/// \returns An unsigned 32-bit integer containing the number of leading zero
43
///    bits in the operand.
44
/// \see _lzcnt_u32
45
static __inline__ unsigned int __DEFAULT_FN_ATTRS
46
__lzcnt32(unsigned int __X)
47
{
48
  return __builtin_ia32_lzcnt_u32(__X);
49
}
50
 
51
/// Counts the number of leading zero bits in the operand.
52
///
53
/// \headerfile <x86intrin.h>
54
///
55
/// This intrinsic corresponds to the \c LZCNT instruction.
56
///
57
/// \param __X
58
///    An unsigned 32-bit integer whose leading zeros are to be counted.
59
/// \returns An unsigned 32-bit integer containing the number of leading zero
60
///    bits in the operand.
61
/// \see __lzcnt32
62
static __inline__ unsigned int __DEFAULT_FN_ATTRS
63
_lzcnt_u32(unsigned int __X)
64
{
65
  return __builtin_ia32_lzcnt_u32(__X);
66
}
67
 
68
#ifdef __x86_64__
69
#ifndef _MSC_VER
70
/// Counts the number of leading zero bits in the operand.
71
///
72
/// \headerfile <x86intrin.h>
73
///
74
/// This intrinsic corresponds to the \c LZCNT instruction.
75
///
76
/// \param __X
77
///    An unsigned 64-bit integer whose leading zeros are to be counted.
78
/// \returns An unsigned 64-bit integer containing the number of leading zero
79
///    bits in the operand.
80
/// \see _lzcnt_u64
81
#define __lzcnt64(X) __builtin_ia32_lzcnt_u64((unsigned long long)(X))
82
#endif // _MSC_VER
83
 
84
/// Counts the number of leading zero bits in the operand.
85
///
86
/// \headerfile <x86intrin.h>
87
///
88
/// This intrinsic corresponds to the \c LZCNT instruction.
89
///
90
/// \param __X
91
///    An unsigned 64-bit integer whose leading zeros are to be counted.
92
/// \returns An unsigned 64-bit integer containing the number of leading zero
93
///    bits in the operand.
94
/// \see __lzcnt64
95
static __inline__ unsigned long long __DEFAULT_FN_ATTRS
96
_lzcnt_u64(unsigned long long __X)
97
{
98
  return __builtin_ia32_lzcnt_u64(__X);
99
}
100
#endif
101
 
102
#undef __DEFAULT_FN_ATTRS
103
 
104
#endif /* __LZCNTINTRIN_H */