clang
15.0.0git
lib
Headers
lzcntintrin.h
Go to the documentation of this file.
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 */
__lzcnt32
static __inline__ unsigned int __DEFAULT_FN_ATTRS __lzcnt32(unsigned int __X)
Counts the number of leading zero bits in the operand.
Definition:
lzcntintrin.h:46
_lzcnt_u32
static __inline__ unsigned int __DEFAULT_FN_ATTRS _lzcnt_u32(unsigned int __X)
Counts the number of leading zero bits in the operand.
Definition:
lzcntintrin.h:63
__DEFAULT_FN_ATTRS
#define __DEFAULT_FN_ATTRS
Definition:
lzcntintrin.h:18
Generated on Wed Jul 20 2022 15:25:35 for clang by
1.8.17