Warning: This file is not a C or C++ file. It does not have highlighting.
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 */ |
105 |
Warning: This file is not a C or C++ file. It does not have highlighting.