/src/capstonev5/MathExtras.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- llvm/Support/MathExtras.h - Useful math functions -------*- C++ -*-===// |
2 | | // |
3 | | // The LLVM Compiler Infrastructure |
4 | | // |
5 | | // This file is distributed under the University of Illinois Open Source |
6 | | // License. See LICENSE.TXT for details. |
7 | | // |
8 | | //===----------------------------------------------------------------------===// |
9 | | // |
10 | | // This file contains some functions that are useful for math stuff. |
11 | | // |
12 | | //===----------------------------------------------------------------------===// |
13 | | |
14 | | /* Capstone Disassembly Engine */ |
15 | | /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2019 */ |
16 | | |
17 | | #ifndef CS_LLVM_SUPPORT_MATHEXTRAS_H |
18 | | #define CS_LLVM_SUPPORT_MATHEXTRAS_H |
19 | | |
20 | | #if defined(_WIN32_WCE) && (_WIN32_WCE < 0x800) |
21 | | #include "windowsce/intrin.h" |
22 | | #elif defined(_MSC_VER) |
23 | | #include <intrin.h> |
24 | | #endif |
25 | | |
26 | | #ifndef __cplusplus |
27 | | #if defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64) |
28 | | #define inline /* inline */ |
29 | | #endif |
30 | | #endif |
31 | | |
32 | | // NOTE: The following support functions use the _32/_64 extensions instead of |
33 | | // type overloading so that signed and unsigned integers can be used without |
34 | | // ambiguity. |
35 | | |
36 | | /// Hi_32 - This function returns the high 32 bits of a 64 bit value. |
37 | 0 | static inline uint32_t Hi_32(uint64_t Value) { |
38 | 0 | return (uint32_t)(Value >> 32); |
39 | 0 | } Unexecuted instantiation: ARMDisassembler.c:Hi_32 Unexecuted instantiation: ARMInstPrinter.c:Hi_32 Unexecuted instantiation: AArch64Disassembler.c:Hi_32 Unexecuted instantiation: AArch64InstPrinter.c:Hi_32 Unexecuted instantiation: MipsDisassembler.c:Hi_32 Unexecuted instantiation: PPCDisassembler.c:Hi_32 Unexecuted instantiation: PPCInstPrinter.c:Hi_32 Unexecuted instantiation: SparcDisassembler.c:Hi_32 Unexecuted instantiation: SparcInstPrinter.c:Hi_32 Unexecuted instantiation: SystemZDisassembler.c:Hi_32 Unexecuted instantiation: SystemZInstPrinter.c:Hi_32 Unexecuted instantiation: XCoreDisassembler.c:Hi_32 Unexecuted instantiation: XCoreInstPrinter.c:Hi_32 Unexecuted instantiation: TMS320C64xDisassembler.c:Hi_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:Hi_32 Unexecuted instantiation: RISCVDisassembler.c:Hi_32 Unexecuted instantiation: TriCoreDisassembler.c:Hi_32 Unexecuted instantiation: TriCoreInstPrinter.c:Hi_32 |
40 | | |
41 | | /// Lo_32 - This function returns the low 32 bits of a 64 bit value. |
42 | 0 | static inline uint32_t Lo_32(uint64_t Value) { |
43 | 0 | return (uint32_t)(Value); |
44 | 0 | } Unexecuted instantiation: ARMDisassembler.c:Lo_32 Unexecuted instantiation: ARMInstPrinter.c:Lo_32 Unexecuted instantiation: AArch64Disassembler.c:Lo_32 Unexecuted instantiation: AArch64InstPrinter.c:Lo_32 Unexecuted instantiation: MipsDisassembler.c:Lo_32 Unexecuted instantiation: PPCDisassembler.c:Lo_32 Unexecuted instantiation: PPCInstPrinter.c:Lo_32 Unexecuted instantiation: SparcDisassembler.c:Lo_32 Unexecuted instantiation: SparcInstPrinter.c:Lo_32 Unexecuted instantiation: SystemZDisassembler.c:Lo_32 Unexecuted instantiation: SystemZInstPrinter.c:Lo_32 Unexecuted instantiation: XCoreDisassembler.c:Lo_32 Unexecuted instantiation: XCoreInstPrinter.c:Lo_32 Unexecuted instantiation: TMS320C64xDisassembler.c:Lo_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:Lo_32 Unexecuted instantiation: RISCVDisassembler.c:Lo_32 Unexecuted instantiation: TriCoreDisassembler.c:Lo_32 Unexecuted instantiation: TriCoreInstPrinter.c:Lo_32 |
45 | | |
46 | | /// isUIntN - Checks if an unsigned integer fits into the given (dynamic) |
47 | | /// bit width. |
48 | 0 | static inline bool isUIntN(unsigned N, uint64_t x) { |
49 | 0 | return x == (x & (~0ULL >> (64 - N))); |
50 | 0 | } Unexecuted instantiation: ARMDisassembler.c:isUIntN Unexecuted instantiation: ARMInstPrinter.c:isUIntN Unexecuted instantiation: AArch64Disassembler.c:isUIntN Unexecuted instantiation: AArch64InstPrinter.c:isUIntN Unexecuted instantiation: MipsDisassembler.c:isUIntN Unexecuted instantiation: PPCInstPrinter.c:isUIntN Unexecuted instantiation: SparcDisassembler.c:isUIntN Unexecuted instantiation: SparcInstPrinter.c:isUIntN Unexecuted instantiation: SystemZInstPrinter.c:isUIntN Unexecuted instantiation: XCoreDisassembler.c:isUIntN Unexecuted instantiation: XCoreInstPrinter.c:isUIntN Unexecuted instantiation: TMS320C64xDisassembler.c:isUIntN Unexecuted instantiation: TMS320C64xInstPrinter.c:isUIntN Unexecuted instantiation: RISCVDisassembler.c:isUIntN Unexecuted instantiation: TriCoreDisassembler.c:isUIntN Unexecuted instantiation: TriCoreInstPrinter.c:isUIntN |
51 | | |
52 | | /// isIntN - Checks if an signed integer fits into the given (dynamic) |
53 | | /// bit width. |
54 | | //static inline bool isIntN(unsigned N, int64_t x) { |
55 | | // return N >= 64 || (-(INT64_C(1)<<(N-1)) <= x && x < (INT64_C(1)<<(N-1))); |
56 | | //} |
57 | | |
58 | | /// isMask_32 - This function returns true if the argument is a sequence of ones |
59 | | /// starting at the least significant bit with the remainder zero (32 bit |
60 | | /// version). Ex. isMask_32(0x0000FFFFU) == true. |
61 | 0 | static inline bool isMask_32(uint32_t Value) { |
62 | 0 | return Value && ((Value + 1) & Value) == 0; |
63 | 0 | } Unexecuted instantiation: ARMDisassembler.c:isMask_32 Unexecuted instantiation: ARMInstPrinter.c:isMask_32 Unexecuted instantiation: AArch64Disassembler.c:isMask_32 Unexecuted instantiation: AArch64InstPrinter.c:isMask_32 Unexecuted instantiation: MipsDisassembler.c:isMask_32 Unexecuted instantiation: PPCDisassembler.c:isMask_32 Unexecuted instantiation: PPCInstPrinter.c:isMask_32 Unexecuted instantiation: SparcDisassembler.c:isMask_32 Unexecuted instantiation: SparcInstPrinter.c:isMask_32 Unexecuted instantiation: SystemZDisassembler.c:isMask_32 Unexecuted instantiation: SystemZInstPrinter.c:isMask_32 Unexecuted instantiation: XCoreDisassembler.c:isMask_32 Unexecuted instantiation: XCoreInstPrinter.c:isMask_32 Unexecuted instantiation: TMS320C64xDisassembler.c:isMask_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:isMask_32 Unexecuted instantiation: RISCVDisassembler.c:isMask_32 Unexecuted instantiation: TriCoreDisassembler.c:isMask_32 Unexecuted instantiation: TriCoreInstPrinter.c:isMask_32 |
64 | | |
65 | | /// isMask_64 - This function returns true if the argument is a sequence of ones |
66 | | /// starting at the least significant bit with the remainder zero (64 bit |
67 | | /// version). |
68 | 4.25k | static inline bool isMask_64(uint64_t Value) { |
69 | 4.25k | return Value && ((Value + 1) & Value) == 0; |
70 | 4.25k | } Unexecuted instantiation: ARMDisassembler.c:isMask_64 Unexecuted instantiation: ARMInstPrinter.c:isMask_64 Unexecuted instantiation: AArch64Disassembler.c:isMask_64 AArch64InstPrinter.c:isMask_64 Line | Count | Source | 68 | 4.25k | static inline bool isMask_64(uint64_t Value) { | 69 | 4.25k | return Value && ((Value + 1) & Value) == 0; | 70 | 4.25k | } |
Unexecuted instantiation: MipsDisassembler.c:isMask_64 Unexecuted instantiation: PPCDisassembler.c:isMask_64 Unexecuted instantiation: PPCInstPrinter.c:isMask_64 Unexecuted instantiation: SparcDisassembler.c:isMask_64 Unexecuted instantiation: SparcInstPrinter.c:isMask_64 Unexecuted instantiation: SystemZDisassembler.c:isMask_64 Unexecuted instantiation: SystemZInstPrinter.c:isMask_64 Unexecuted instantiation: XCoreDisassembler.c:isMask_64 Unexecuted instantiation: XCoreInstPrinter.c:isMask_64 Unexecuted instantiation: TMS320C64xDisassembler.c:isMask_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:isMask_64 Unexecuted instantiation: RISCVDisassembler.c:isMask_64 Unexecuted instantiation: TriCoreDisassembler.c:isMask_64 Unexecuted instantiation: TriCoreInstPrinter.c:isMask_64 |
71 | | |
72 | | /// isShiftedMask_32 - This function returns true if the argument contains a |
73 | | /// sequence of ones with the remainder zero (32 bit version.) |
74 | | /// Ex. isShiftedMask_32(0x0000FF00U) == true. |
75 | 0 | static inline bool isShiftedMask_32(uint32_t Value) { |
76 | 0 | return isMask_32((Value - 1) | Value); |
77 | 0 | } Unexecuted instantiation: ARMDisassembler.c:isShiftedMask_32 Unexecuted instantiation: ARMInstPrinter.c:isShiftedMask_32 Unexecuted instantiation: AArch64Disassembler.c:isShiftedMask_32 Unexecuted instantiation: AArch64InstPrinter.c:isShiftedMask_32 Unexecuted instantiation: MipsDisassembler.c:isShiftedMask_32 Unexecuted instantiation: PPCDisassembler.c:isShiftedMask_32 Unexecuted instantiation: PPCInstPrinter.c:isShiftedMask_32 Unexecuted instantiation: SparcDisassembler.c:isShiftedMask_32 Unexecuted instantiation: SparcInstPrinter.c:isShiftedMask_32 Unexecuted instantiation: SystemZDisassembler.c:isShiftedMask_32 Unexecuted instantiation: SystemZInstPrinter.c:isShiftedMask_32 Unexecuted instantiation: XCoreDisassembler.c:isShiftedMask_32 Unexecuted instantiation: XCoreInstPrinter.c:isShiftedMask_32 Unexecuted instantiation: TMS320C64xDisassembler.c:isShiftedMask_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:isShiftedMask_32 Unexecuted instantiation: RISCVDisassembler.c:isShiftedMask_32 Unexecuted instantiation: TriCoreDisassembler.c:isShiftedMask_32 Unexecuted instantiation: TriCoreInstPrinter.c:isShiftedMask_32 |
78 | | |
79 | | /// isShiftedMask_64 - This function returns true if the argument contains a |
80 | | /// sequence of ones with the remainder zero (64 bit version.) |
81 | 4.25k | static inline bool isShiftedMask_64(uint64_t Value) { |
82 | 4.25k | return isMask_64((Value - 1) | Value); |
83 | 4.25k | } Unexecuted instantiation: ARMDisassembler.c:isShiftedMask_64 Unexecuted instantiation: ARMInstPrinter.c:isShiftedMask_64 Unexecuted instantiation: AArch64Disassembler.c:isShiftedMask_64 AArch64InstPrinter.c:isShiftedMask_64 Line | Count | Source | 81 | 4.25k | static inline bool isShiftedMask_64(uint64_t Value) { | 82 | 4.25k | return isMask_64((Value - 1) | Value); | 83 | 4.25k | } |
Unexecuted instantiation: MipsDisassembler.c:isShiftedMask_64 Unexecuted instantiation: PPCDisassembler.c:isShiftedMask_64 Unexecuted instantiation: PPCInstPrinter.c:isShiftedMask_64 Unexecuted instantiation: SparcDisassembler.c:isShiftedMask_64 Unexecuted instantiation: SparcInstPrinter.c:isShiftedMask_64 Unexecuted instantiation: SystemZDisassembler.c:isShiftedMask_64 Unexecuted instantiation: SystemZInstPrinter.c:isShiftedMask_64 Unexecuted instantiation: XCoreDisassembler.c:isShiftedMask_64 Unexecuted instantiation: XCoreInstPrinter.c:isShiftedMask_64 Unexecuted instantiation: TMS320C64xDisassembler.c:isShiftedMask_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:isShiftedMask_64 Unexecuted instantiation: RISCVDisassembler.c:isShiftedMask_64 Unexecuted instantiation: TriCoreDisassembler.c:isShiftedMask_64 Unexecuted instantiation: TriCoreInstPrinter.c:isShiftedMask_64 |
84 | | |
85 | | /// isPowerOf2_32 - This function returns true if the argument is a power of |
86 | | /// two > 0. Ex. isPowerOf2_32(0x00100000U) == true (32 bit edition.) |
87 | 0 | static inline bool isPowerOf2_32(uint32_t Value) { |
88 | 0 | return Value && !(Value & (Value - 1)); |
89 | 0 | } Unexecuted instantiation: ARMDisassembler.c:isPowerOf2_32 Unexecuted instantiation: ARMInstPrinter.c:isPowerOf2_32 Unexecuted instantiation: AArch64Disassembler.c:isPowerOf2_32 Unexecuted instantiation: AArch64InstPrinter.c:isPowerOf2_32 Unexecuted instantiation: MipsDisassembler.c:isPowerOf2_32 Unexecuted instantiation: PPCDisassembler.c:isPowerOf2_32 Unexecuted instantiation: PPCInstPrinter.c:isPowerOf2_32 Unexecuted instantiation: SparcDisassembler.c:isPowerOf2_32 Unexecuted instantiation: SparcInstPrinter.c:isPowerOf2_32 Unexecuted instantiation: SystemZDisassembler.c:isPowerOf2_32 Unexecuted instantiation: SystemZInstPrinter.c:isPowerOf2_32 Unexecuted instantiation: XCoreDisassembler.c:isPowerOf2_32 Unexecuted instantiation: XCoreInstPrinter.c:isPowerOf2_32 Unexecuted instantiation: TMS320C64xDisassembler.c:isPowerOf2_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:isPowerOf2_32 Unexecuted instantiation: RISCVDisassembler.c:isPowerOf2_32 Unexecuted instantiation: TriCoreDisassembler.c:isPowerOf2_32 Unexecuted instantiation: TriCoreInstPrinter.c:isPowerOf2_32 |
90 | | |
91 | | /// CountLeadingZeros_32 - this function performs the platform optimal form of |
92 | | /// counting the number of zeros from the most significant bit to the first one |
93 | | /// bit. Ex. CountLeadingZeros_32(0x00F000FF) == 8. |
94 | | /// Returns 32 if the word is zero. |
95 | 53.1k | static inline unsigned CountLeadingZeros_32(uint32_t Value) { |
96 | 53.1k | unsigned Count; // result |
97 | 53.1k | #if __GNUC__ >= 4 |
98 | | // PowerPC is defined for __builtin_clz(0) |
99 | 53.1k | #if !defined(__ppc__) && !defined(__ppc64__) |
100 | 53.1k | if (!Value) return 32; |
101 | 53.0k | #endif |
102 | 53.0k | Count = __builtin_clz(Value); |
103 | | #else |
104 | | unsigned Shift; |
105 | | if (!Value) return 32; |
106 | | Count = 0; |
107 | | // bisection method for count leading zeros |
108 | | for (Shift = 32 >> 1; Shift; Shift >>= 1) { |
109 | | uint32_t Tmp = Value >> Shift; |
110 | | if (Tmp) { |
111 | | Value = Tmp; |
112 | | } else { |
113 | | Count |= Shift; |
114 | | } |
115 | | } |
116 | | #endif |
117 | 53.0k | return Count; |
118 | 53.1k | } Unexecuted instantiation: ARMDisassembler.c:CountLeadingZeros_32 ARMInstPrinter.c:CountLeadingZeros_32 Line | Count | Source | 95 | 1.59k | static inline unsigned CountLeadingZeros_32(uint32_t Value) { | 96 | 1.59k | unsigned Count; // result | 97 | 1.59k | #if __GNUC__ >= 4 | 98 | | // PowerPC is defined for __builtin_clz(0) | 99 | 1.59k | #if !defined(__ppc__) && !defined(__ppc64__) | 100 | 1.59k | if (!Value) return 32; | 101 | 1.59k | #endif | 102 | 1.59k | Count = __builtin_clz(Value); | 103 | | #else | 104 | | unsigned Shift; | 105 | | if (!Value) return 32; | 106 | | Count = 0; | 107 | | // bisection method for count leading zeros | 108 | | for (Shift = 32 >> 1; Shift; Shift >>= 1) { | 109 | | uint32_t Tmp = Value >> Shift; | 110 | | if (Tmp) { | 111 | | Value = Tmp; | 112 | | } else { | 113 | | Count |= Shift; | 114 | | } | 115 | | } | 116 | | #endif | 117 | 1.59k | return Count; | 118 | 1.59k | } |
AArch64Disassembler.c:CountLeadingZeros_32 Line | Count | Source | 95 | 6.70k | static inline unsigned CountLeadingZeros_32(uint32_t Value) { | 96 | 6.70k | unsigned Count; // result | 97 | 6.70k | #if __GNUC__ >= 4 | 98 | | // PowerPC is defined for __builtin_clz(0) | 99 | 6.70k | #if !defined(__ppc__) && !defined(__ppc64__) | 100 | 6.70k | if (!Value) return 32; | 101 | 6.69k | #endif | 102 | 6.69k | Count = __builtin_clz(Value); | 103 | | #else | 104 | | unsigned Shift; | 105 | | if (!Value) return 32; | 106 | | Count = 0; | 107 | | // bisection method for count leading zeros | 108 | | for (Shift = 32 >> 1; Shift; Shift >>= 1) { | 109 | | uint32_t Tmp = Value >> Shift; | 110 | | if (Tmp) { | 111 | | Value = Tmp; | 112 | | } else { | 113 | | Count |= Shift; | 114 | | } | 115 | | } | 116 | | #endif | 117 | 6.69k | return Count; | 118 | 6.70k | } |
AArch64InstPrinter.c:CountLeadingZeros_32 Line | Count | Source | 95 | 44.8k | static inline unsigned CountLeadingZeros_32(uint32_t Value) { | 96 | 44.8k | unsigned Count; // result | 97 | 44.8k | #if __GNUC__ >= 4 | 98 | | // PowerPC is defined for __builtin_clz(0) | 99 | 44.8k | #if !defined(__ppc__) && !defined(__ppc64__) | 100 | 44.8k | if (!Value) return 32; | 101 | 44.7k | #endif | 102 | 44.7k | Count = __builtin_clz(Value); | 103 | | #else | 104 | | unsigned Shift; | 105 | | if (!Value) return 32; | 106 | | Count = 0; | 107 | | // bisection method for count leading zeros | 108 | | for (Shift = 32 >> 1; Shift; Shift >>= 1) { | 109 | | uint32_t Tmp = Value >> Shift; | 110 | | if (Tmp) { | 111 | | Value = Tmp; | 112 | | } else { | 113 | | Count |= Shift; | 114 | | } | 115 | | } | 116 | | #endif | 117 | 44.7k | return Count; | 118 | 44.8k | } |
Unexecuted instantiation: MipsDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: PPCDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: PPCInstPrinter.c:CountLeadingZeros_32 Unexecuted instantiation: SparcDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: SparcInstPrinter.c:CountLeadingZeros_32 Unexecuted instantiation: SystemZDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: SystemZInstPrinter.c:CountLeadingZeros_32 Unexecuted instantiation: XCoreDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: XCoreInstPrinter.c:CountLeadingZeros_32 Unexecuted instantiation: TMS320C64xDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountLeadingZeros_32 Unexecuted instantiation: RISCVDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: TriCoreDisassembler.c:CountLeadingZeros_32 Unexecuted instantiation: TriCoreInstPrinter.c:CountLeadingZeros_32 |
119 | | |
120 | | /// CountLeadingOnes_32 - this function performs the operation of |
121 | | /// counting the number of ones from the most significant bit to the first zero |
122 | | /// bit. Ex. CountLeadingOnes_32(0xFF0FFF00) == 8. |
123 | | /// Returns 32 if the word is all ones. |
124 | 742 | static inline unsigned CountLeadingOnes_32(uint32_t Value) { |
125 | 742 | return CountLeadingZeros_32(~Value); |
126 | 742 | } Unexecuted instantiation: ARMDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: ARMInstPrinter.c:CountLeadingOnes_32 Unexecuted instantiation: AArch64Disassembler.c:CountLeadingOnes_32 AArch64InstPrinter.c:CountLeadingOnes_32 Line | Count | Source | 124 | 742 | static inline unsigned CountLeadingOnes_32(uint32_t Value) { | 125 | 742 | return CountLeadingZeros_32(~Value); | 126 | 742 | } |
Unexecuted instantiation: MipsDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: PPCDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: PPCInstPrinter.c:CountLeadingOnes_32 Unexecuted instantiation: SparcDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: SparcInstPrinter.c:CountLeadingOnes_32 Unexecuted instantiation: SystemZDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: SystemZInstPrinter.c:CountLeadingOnes_32 Unexecuted instantiation: XCoreDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: XCoreInstPrinter.c:CountLeadingOnes_32 Unexecuted instantiation: TMS320C64xDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountLeadingOnes_32 Unexecuted instantiation: RISCVDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: TriCoreDisassembler.c:CountLeadingOnes_32 Unexecuted instantiation: TriCoreInstPrinter.c:CountLeadingOnes_32 |
127 | | |
128 | | /// CountLeadingZeros_64 - This function performs the platform optimal form |
129 | | /// of counting the number of zeros from the most significant bit to the first |
130 | | /// one bit (64 bit edition.) |
131 | | /// Returns 64 if the word is zero. |
132 | 0 | static inline unsigned CountLeadingZeros_64(uint64_t Value) { |
133 | 0 | unsigned Count; // result |
134 | 0 | #if __GNUC__ >= 4 |
135 | 0 | // PowerPC is defined for __builtin_clzll(0) |
136 | 0 | #if !defined(__ppc__) && !defined(__ppc64__) |
137 | 0 | if (!Value) return 64; |
138 | 0 | #endif |
139 | 0 | Count = __builtin_clzll(Value); |
140 | 0 | #else |
141 | 0 | #ifndef _MSC_VER |
142 | 0 | unsigned Shift; |
143 | 0 | if (sizeof(long) == sizeof(int64_t)) |
144 | 0 | { |
145 | 0 | if (!Value) return 64; |
146 | 0 | Count = 0; |
147 | 0 | // bisection method for count leading zeros |
148 | 0 | for (Shift = 64 >> 1; Shift; Shift >>= 1) { |
149 | 0 | uint64_t Tmp = Value >> Shift; |
150 | 0 | if (Tmp) { |
151 | 0 | Value = Tmp; |
152 | 0 | } else { |
153 | 0 | Count |= Shift; |
154 | 0 | } |
155 | 0 | } |
156 | 0 | } |
157 | 0 | else |
158 | 0 | #endif |
159 | 0 | { |
160 | 0 | // get hi portion |
161 | 0 | uint32_t Hi = Hi_32(Value); |
162 | 0 |
|
163 | 0 | // if some bits in hi portion |
164 | 0 | if (Hi) { |
165 | 0 | // leading zeros in hi portion plus all bits in lo portion |
166 | 0 | Count = CountLeadingZeros_32(Hi); |
167 | 0 | } else { |
168 | 0 | // get lo portion |
169 | 0 | uint32_t Lo = Lo_32(Value); |
170 | 0 | // same as 32 bit value |
171 | 0 | Count = CountLeadingZeros_32(Lo)+32; |
172 | 0 | } |
173 | 0 | } |
174 | 0 | #endif |
175 | 0 | return Count; |
176 | 0 | } Unexecuted instantiation: ARMDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: ARMInstPrinter.c:CountLeadingZeros_64 Unexecuted instantiation: AArch64Disassembler.c:CountLeadingZeros_64 Unexecuted instantiation: MipsDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: PPCDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: PPCInstPrinter.c:CountLeadingZeros_64 Unexecuted instantiation: SparcDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: SparcInstPrinter.c:CountLeadingZeros_64 Unexecuted instantiation: SystemZDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: SystemZInstPrinter.c:CountLeadingZeros_64 Unexecuted instantiation: XCoreDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: XCoreInstPrinter.c:CountLeadingZeros_64 Unexecuted instantiation: TMS320C64xDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountLeadingZeros_64 Unexecuted instantiation: RISCVDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: TriCoreDisassembler.c:CountLeadingZeros_64 Unexecuted instantiation: TriCoreInstPrinter.c:CountLeadingZeros_64 |
177 | | |
178 | | /// CountLeadingOnes_64 - This function performs the operation |
179 | | /// of counting the number of ones from the most significant bit to the first |
180 | | /// zero bit (64 bit edition.) |
181 | | /// Returns 64 if the word is all ones. |
182 | 0 | static inline unsigned CountLeadingOnes_64(uint64_t Value) { |
183 | 0 | return CountLeadingZeros_64(~Value); |
184 | 0 | } Unexecuted instantiation: ARMDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: ARMInstPrinter.c:CountLeadingOnes_64 Unexecuted instantiation: AArch64Disassembler.c:CountLeadingOnes_64 Unexecuted instantiation: MipsDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: PPCDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: PPCInstPrinter.c:CountLeadingOnes_64 Unexecuted instantiation: SparcDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: SparcInstPrinter.c:CountLeadingOnes_64 Unexecuted instantiation: SystemZDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: SystemZInstPrinter.c:CountLeadingOnes_64 Unexecuted instantiation: XCoreDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: XCoreInstPrinter.c:CountLeadingOnes_64 Unexecuted instantiation: TMS320C64xDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountLeadingOnes_64 Unexecuted instantiation: RISCVDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: TriCoreDisassembler.c:CountLeadingOnes_64 Unexecuted instantiation: TriCoreInstPrinter.c:CountLeadingOnes_64 |
185 | | |
186 | | /// CountTrailingZeros_32 - this function performs the platform optimal form of |
187 | | /// counting the number of zeros from the least significant bit to the first one |
188 | | /// bit. Ex. CountTrailingZeros_32(0xFF00FF00) == 8. |
189 | | /// Returns 32 if the word is zero. |
190 | 46.5k | static inline unsigned CountTrailingZeros_32(uint32_t Value) { |
191 | 46.5k | #if __GNUC__ >= 4 |
192 | 46.5k | return Value ? __builtin_ctz(Value) : 32; |
193 | | #else |
194 | | static const unsigned Mod37BitPosition[] = { |
195 | | 32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13, |
196 | | 4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9, |
197 | | 5, 20, 8, 19, 18 |
198 | | }; |
199 | | // Replace "-Value" by "1+~Value" in the following commented code to avoid |
200 | | // MSVC warning C4146 |
201 | | // return Mod37BitPosition[(-Value & Value) % 37]; |
202 | | return Mod37BitPosition[((1 + ~Value) & Value) % 37]; |
203 | | #endif |
204 | 46.5k | } ARMDisassembler.c:CountTrailingZeros_32 Line | Count | Source | 190 | 3.38k | static inline unsigned CountTrailingZeros_32(uint32_t Value) { | 191 | 3.38k | #if __GNUC__ >= 4 | 192 | 3.38k | return Value ? __builtin_ctz(Value) : 32; | 193 | | #else | 194 | | static const unsigned Mod37BitPosition[] = { | 195 | | 32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13, | 196 | | 4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9, | 197 | | 5, 20, 8, 19, 18 | 198 | | }; | 199 | | // Replace "-Value" by "1+~Value" in the following commented code to avoid | 200 | | // MSVC warning C4146 | 201 | | // return Mod37BitPosition[(-Value & Value) % 37]; | 202 | | return Mod37BitPosition[((1 + ~Value) & Value) % 37]; | 203 | | #endif | 204 | 3.38k | } |
ARMInstPrinter.c:CountTrailingZeros_32 Line | Count | Source | 190 | 40.0k | static inline unsigned CountTrailingZeros_32(uint32_t Value) { | 191 | 40.0k | #if __GNUC__ >= 4 | 192 | 40.0k | return Value ? __builtin_ctz(Value) : 32; | 193 | | #else | 194 | | static const unsigned Mod37BitPosition[] = { | 195 | | 32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13, | 196 | | 4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9, | 197 | | 5, 20, 8, 19, 18 | 198 | | }; | 199 | | // Replace "-Value" by "1+~Value" in the following commented code to avoid | 200 | | // MSVC warning C4146 | 201 | | // return Mod37BitPosition[(-Value & Value) % 37]; | 202 | | return Mod37BitPosition[((1 + ~Value) & Value) % 37]; | 203 | | #endif | 204 | 40.0k | } |
Unexecuted instantiation: AArch64Disassembler.c:CountTrailingZeros_32 AArch64InstPrinter.c:CountTrailingZeros_32 Line | Count | Source | 190 | 3.12k | static inline unsigned CountTrailingZeros_32(uint32_t Value) { | 191 | 3.12k | #if __GNUC__ >= 4 | 192 | 3.12k | return Value ? __builtin_ctz(Value) : 32; | 193 | | #else | 194 | | static const unsigned Mod37BitPosition[] = { | 195 | | 32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13, | 196 | | 4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9, | 197 | | 5, 20, 8, 19, 18 | 198 | | }; | 199 | | // Replace "-Value" by "1+~Value" in the following commented code to avoid | 200 | | // MSVC warning C4146 | 201 | | // return Mod37BitPosition[(-Value & Value) % 37]; | 202 | | return Mod37BitPosition[((1 + ~Value) & Value) % 37]; | 203 | | #endif | 204 | 3.12k | } |
Unexecuted instantiation: MipsDisassembler.c:CountTrailingZeros_32 Unexecuted instantiation: PPCInstPrinter.c:CountTrailingZeros_32 Unexecuted instantiation: SparcDisassembler.c:CountTrailingZeros_32 Unexecuted instantiation: SparcInstPrinter.c:CountTrailingZeros_32 Unexecuted instantiation: SystemZDisassembler.c:CountTrailingZeros_32 Unexecuted instantiation: SystemZInstPrinter.c:CountTrailingZeros_32 Unexecuted instantiation: XCoreDisassembler.c:CountTrailingZeros_32 Unexecuted instantiation: XCoreInstPrinter.c:CountTrailingZeros_32 Unexecuted instantiation: TMS320C64xDisassembler.c:CountTrailingZeros_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountTrailingZeros_32 Unexecuted instantiation: RISCVDisassembler.c:CountTrailingZeros_32 Unexecuted instantiation: TriCoreDisassembler.c:CountTrailingZeros_32 Unexecuted instantiation: TriCoreInstPrinter.c:CountTrailingZeros_32 |
205 | | |
206 | | /// CountTrailingOnes_32 - this function performs the operation of |
207 | | /// counting the number of ones from the least significant bit to the first zero |
208 | | /// bit. Ex. CountTrailingOnes_32(0x00FF00FF) == 8. |
209 | | /// Returns 32 if the word is all ones. |
210 | 1.93k | static inline unsigned CountTrailingOnes_32(uint32_t Value) { |
211 | 1.93k | return CountTrailingZeros_32(~Value); |
212 | 1.93k | } Unexecuted instantiation: ARMDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: ARMInstPrinter.c:CountTrailingOnes_32 Unexecuted instantiation: AArch64Disassembler.c:CountTrailingOnes_32 AArch64InstPrinter.c:CountTrailingOnes_32 Line | Count | Source | 210 | 1.93k | static inline unsigned CountTrailingOnes_32(uint32_t Value) { | 211 | 1.93k | return CountTrailingZeros_32(~Value); | 212 | 1.93k | } |
Unexecuted instantiation: MipsDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: PPCDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: PPCInstPrinter.c:CountTrailingOnes_32 Unexecuted instantiation: SparcDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: SparcInstPrinter.c:CountTrailingOnes_32 Unexecuted instantiation: SystemZDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: SystemZInstPrinter.c:CountTrailingOnes_32 Unexecuted instantiation: XCoreDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: XCoreInstPrinter.c:CountTrailingOnes_32 Unexecuted instantiation: TMS320C64xDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountTrailingOnes_32 Unexecuted instantiation: RISCVDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: TriCoreDisassembler.c:CountTrailingOnes_32 Unexecuted instantiation: TriCoreInstPrinter.c:CountTrailingOnes_32 |
213 | | |
214 | | /// CountTrailingZeros_64 - This function performs the platform optimal form |
215 | | /// of counting the number of zeros from the least significant bit to the first |
216 | | /// one bit (64 bit edition.) |
217 | | /// Returns 64 if the word is zero. |
218 | 520 | static inline unsigned CountTrailingZeros_64(uint64_t Value) { |
219 | 520 | #if __GNUC__ >= 4 |
220 | 520 | return Value ? __builtin_ctzll(Value) : 64; |
221 | | #else |
222 | | static const unsigned Mod67Position[] = { |
223 | | 64, 0, 1, 39, 2, 15, 40, 23, 3, 12, 16, 59, 41, 19, 24, 54, |
224 | | 4, 64, 13, 10, 17, 62, 60, 28, 42, 30, 20, 51, 25, 44, 55, |
225 | | 47, 5, 32, 65, 38, 14, 22, 11, 58, 18, 53, 63, 9, 61, 27, |
226 | | 29, 50, 43, 46, 31, 37, 21, 57, 52, 8, 26, 49, 45, 36, 56, |
227 | | 7, 48, 35, 6, 34, 33, 0 |
228 | | }; |
229 | | // Replace "-Value" by "1+~Value" in the following commented code to avoid |
230 | | // MSVC warning C4146 |
231 | | // return Mod67Position[(-Value & Value) % 67]; |
232 | | return Mod67Position[((1 + ~Value) & Value) % 67]; |
233 | | #endif |
234 | 520 | } Unexecuted instantiation: ARMDisassembler.c:CountTrailingZeros_64 Unexecuted instantiation: ARMInstPrinter.c:CountTrailingZeros_64 Unexecuted instantiation: AArch64Disassembler.c:CountTrailingZeros_64 Unexecuted instantiation: MipsDisassembler.c:CountTrailingZeros_64 PPCDisassembler.c:CountTrailingZeros_64 Line | Count | Source | 218 | 520 | static inline unsigned CountTrailingZeros_64(uint64_t Value) { | 219 | 520 | #if __GNUC__ >= 4 | 220 | 520 | return Value ? __builtin_ctzll(Value) : 64; | 221 | | #else | 222 | | static const unsigned Mod67Position[] = { | 223 | | 64, 0, 1, 39, 2, 15, 40, 23, 3, 12, 16, 59, 41, 19, 24, 54, | 224 | | 4, 64, 13, 10, 17, 62, 60, 28, 42, 30, 20, 51, 25, 44, 55, | 225 | | 47, 5, 32, 65, 38, 14, 22, 11, 58, 18, 53, 63, 9, 61, 27, | 226 | | 29, 50, 43, 46, 31, 37, 21, 57, 52, 8, 26, 49, 45, 36, 56, | 227 | | 7, 48, 35, 6, 34, 33, 0 | 228 | | }; | 229 | | // Replace "-Value" by "1+~Value" in the following commented code to avoid | 230 | | // MSVC warning C4146 | 231 | | // return Mod67Position[(-Value & Value) % 67]; | 232 | | return Mod67Position[((1 + ~Value) & Value) % 67]; | 233 | | #endif | 234 | 520 | } |
Unexecuted instantiation: PPCInstPrinter.c:CountTrailingZeros_64 Unexecuted instantiation: SparcDisassembler.c:CountTrailingZeros_64 Unexecuted instantiation: SparcInstPrinter.c:CountTrailingZeros_64 Unexecuted instantiation: SystemZDisassembler.c:CountTrailingZeros_64 Unexecuted instantiation: SystemZInstPrinter.c:CountTrailingZeros_64 Unexecuted instantiation: XCoreDisassembler.c:CountTrailingZeros_64 Unexecuted instantiation: XCoreInstPrinter.c:CountTrailingZeros_64 Unexecuted instantiation: TMS320C64xDisassembler.c:CountTrailingZeros_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountTrailingZeros_64 Unexecuted instantiation: RISCVDisassembler.c:CountTrailingZeros_64 Unexecuted instantiation: TriCoreDisassembler.c:CountTrailingZeros_64 Unexecuted instantiation: TriCoreInstPrinter.c:CountTrailingZeros_64 |
235 | | |
236 | | /// CountTrailingOnes_64 - This function performs the operation |
237 | | /// of counting the number of ones from the least significant bit to the first |
238 | | /// zero bit (64 bit edition.) |
239 | | /// Returns 64 if the word is all ones. |
240 | 0 | static inline unsigned CountTrailingOnes_64(uint64_t Value) { |
241 | 0 | return CountTrailingZeros_64(~Value); |
242 | 0 | } Unexecuted instantiation: ARMDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: ARMInstPrinter.c:CountTrailingOnes_64 Unexecuted instantiation: AArch64Disassembler.c:CountTrailingOnes_64 Unexecuted instantiation: MipsDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: PPCDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: PPCInstPrinter.c:CountTrailingOnes_64 Unexecuted instantiation: SparcDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: SparcInstPrinter.c:CountTrailingOnes_64 Unexecuted instantiation: SystemZDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: SystemZInstPrinter.c:CountTrailingOnes_64 Unexecuted instantiation: XCoreDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: XCoreInstPrinter.c:CountTrailingOnes_64 Unexecuted instantiation: TMS320C64xDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountTrailingOnes_64 Unexecuted instantiation: RISCVDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: TriCoreDisassembler.c:CountTrailingOnes_64 Unexecuted instantiation: TriCoreInstPrinter.c:CountTrailingOnes_64 |
243 | | |
244 | | /// CountPopulation_32 - this function counts the number of set bits in a value. |
245 | | /// Ex. CountPopulation(0xF000F000) = 8 |
246 | | /// Returns 0 if the word is zero. |
247 | 0 | static inline unsigned CountPopulation_32(uint32_t Value) { |
248 | 0 | #if __GNUC__ >= 4 |
249 | 0 | return __builtin_popcount(Value); |
250 | 0 | #else |
251 | 0 | uint32_t v = Value - ((Value >> 1) & 0x55555555); |
252 | 0 | v = (v & 0x33333333) + ((v >> 2) & 0x33333333); |
253 | 0 | return (((v + (v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24; |
254 | 0 | #endif |
255 | 0 | } Unexecuted instantiation: ARMDisassembler.c:CountPopulation_32 Unexecuted instantiation: ARMInstPrinter.c:CountPopulation_32 Unexecuted instantiation: AArch64Disassembler.c:CountPopulation_32 Unexecuted instantiation: AArch64InstPrinter.c:CountPopulation_32 Unexecuted instantiation: MipsDisassembler.c:CountPopulation_32 Unexecuted instantiation: PPCDisassembler.c:CountPopulation_32 Unexecuted instantiation: PPCInstPrinter.c:CountPopulation_32 Unexecuted instantiation: SparcDisassembler.c:CountPopulation_32 Unexecuted instantiation: SparcInstPrinter.c:CountPopulation_32 Unexecuted instantiation: SystemZDisassembler.c:CountPopulation_32 Unexecuted instantiation: SystemZInstPrinter.c:CountPopulation_32 Unexecuted instantiation: XCoreDisassembler.c:CountPopulation_32 Unexecuted instantiation: XCoreInstPrinter.c:CountPopulation_32 Unexecuted instantiation: TMS320C64xDisassembler.c:CountPopulation_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountPopulation_32 Unexecuted instantiation: RISCVDisassembler.c:CountPopulation_32 Unexecuted instantiation: TriCoreDisassembler.c:CountPopulation_32 Unexecuted instantiation: TriCoreInstPrinter.c:CountPopulation_32 |
256 | | |
257 | | /// CountPopulation_64 - this function counts the number of set bits in a value, |
258 | | /// (64 bit edition.) |
259 | 0 | static inline unsigned CountPopulation_64(uint64_t Value) { |
260 | 0 | #if __GNUC__ >= 4 |
261 | 0 | return __builtin_popcountll(Value); |
262 | 0 | #else |
263 | 0 | uint64_t v = Value - ((Value >> 1) & 0x5555555555555555ULL); |
264 | 0 | v = (v & 0x3333333333333333ULL) + ((v >> 2) & 0x3333333333333333ULL); |
265 | 0 | v = (v + (v >> 4)) & 0x0F0F0F0F0F0F0F0FULL; |
266 | 0 | return (uint64_t)((v * 0x0101010101010101ULL) >> 56); |
267 | 0 | #endif |
268 | 0 | } Unexecuted instantiation: ARMDisassembler.c:CountPopulation_64 Unexecuted instantiation: ARMInstPrinter.c:CountPopulation_64 Unexecuted instantiation: AArch64Disassembler.c:CountPopulation_64 Unexecuted instantiation: AArch64InstPrinter.c:CountPopulation_64 Unexecuted instantiation: MipsDisassembler.c:CountPopulation_64 Unexecuted instantiation: PPCDisassembler.c:CountPopulation_64 Unexecuted instantiation: PPCInstPrinter.c:CountPopulation_64 Unexecuted instantiation: SparcDisassembler.c:CountPopulation_64 Unexecuted instantiation: SparcInstPrinter.c:CountPopulation_64 Unexecuted instantiation: SystemZDisassembler.c:CountPopulation_64 Unexecuted instantiation: SystemZInstPrinter.c:CountPopulation_64 Unexecuted instantiation: XCoreDisassembler.c:CountPopulation_64 Unexecuted instantiation: XCoreInstPrinter.c:CountPopulation_64 Unexecuted instantiation: TMS320C64xDisassembler.c:CountPopulation_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:CountPopulation_64 Unexecuted instantiation: RISCVDisassembler.c:CountPopulation_64 Unexecuted instantiation: TriCoreDisassembler.c:CountPopulation_64 Unexecuted instantiation: TriCoreInstPrinter.c:CountPopulation_64 |
269 | | |
270 | | /// Log2_32 - This function returns the floor log base 2 of the specified value, |
271 | | /// -1 if the value is zero. (32 bit edition.) |
272 | | /// Ex. Log2_32(32) == 5, Log2_32(1) == 0, Log2_32(0) == -1, Log2_32(6) == 2 |
273 | 17.3k | static inline unsigned Log2_32(uint32_t Value) { |
274 | 17.3k | return 31 - CountLeadingZeros_32(Value); |
275 | 17.3k | } Unexecuted instantiation: ARMDisassembler.c:Log2_32 Unexecuted instantiation: ARMInstPrinter.c:Log2_32 Unexecuted instantiation: AArch64Disassembler.c:Log2_32 AArch64InstPrinter.c:Log2_32 Line | Count | Source | 273 | 17.3k | static inline unsigned Log2_32(uint32_t Value) { | 274 | 17.3k | return 31 - CountLeadingZeros_32(Value); | 275 | 17.3k | } |
Unexecuted instantiation: MipsDisassembler.c:Log2_32 Unexecuted instantiation: PPCDisassembler.c:Log2_32 Unexecuted instantiation: PPCInstPrinter.c:Log2_32 Unexecuted instantiation: SparcDisassembler.c:Log2_32 Unexecuted instantiation: SparcInstPrinter.c:Log2_32 Unexecuted instantiation: SystemZDisassembler.c:Log2_32 Unexecuted instantiation: SystemZInstPrinter.c:Log2_32 Unexecuted instantiation: XCoreDisassembler.c:Log2_32 Unexecuted instantiation: XCoreInstPrinter.c:Log2_32 Unexecuted instantiation: TMS320C64xDisassembler.c:Log2_32 Unexecuted instantiation: TMS320C64xInstPrinter.c:Log2_32 Unexecuted instantiation: RISCVDisassembler.c:Log2_32 Unexecuted instantiation: TriCoreDisassembler.c:Log2_32 Unexecuted instantiation: TriCoreInstPrinter.c:Log2_32 |
276 | | |
277 | | /// Log2_64 - This function returns the floor log base 2 of the specified value, |
278 | | /// -1 if the value is zero. (64 bit edition.) |
279 | 0 | static inline unsigned Log2_64(uint64_t Value) { |
280 | 0 | return 63 - CountLeadingZeros_64(Value); |
281 | 0 | } Unexecuted instantiation: ARMDisassembler.c:Log2_64 Unexecuted instantiation: ARMInstPrinter.c:Log2_64 Unexecuted instantiation: AArch64Disassembler.c:Log2_64 Unexecuted instantiation: AArch64InstPrinter.c:Log2_64 Unexecuted instantiation: MipsDisassembler.c:Log2_64 Unexecuted instantiation: PPCDisassembler.c:Log2_64 Unexecuted instantiation: PPCInstPrinter.c:Log2_64 Unexecuted instantiation: SparcDisassembler.c:Log2_64 Unexecuted instantiation: SparcInstPrinter.c:Log2_64 Unexecuted instantiation: SystemZDisassembler.c:Log2_64 Unexecuted instantiation: SystemZInstPrinter.c:Log2_64 Unexecuted instantiation: XCoreDisassembler.c:Log2_64 Unexecuted instantiation: XCoreInstPrinter.c:Log2_64 Unexecuted instantiation: TMS320C64xDisassembler.c:Log2_64 Unexecuted instantiation: TMS320C64xInstPrinter.c:Log2_64 Unexecuted instantiation: RISCVDisassembler.c:Log2_64 Unexecuted instantiation: TriCoreDisassembler.c:Log2_64 Unexecuted instantiation: TriCoreInstPrinter.c:Log2_64 |
282 | | |
283 | | /// Log2_32_Ceil - This function returns the ceil log base 2 of the specified |
284 | | /// value, 32 if the value is zero. (32 bit edition). |
285 | | /// Ex. Log2_32_Ceil(32) == 5, Log2_32_Ceil(1) == 0, Log2_32_Ceil(6) == 3 |
286 | 0 | static inline unsigned Log2_32_Ceil(uint32_t Value) { |
287 | 0 | return 32-CountLeadingZeros_32(Value-1); |
288 | 0 | } Unexecuted instantiation: ARMDisassembler.c:Log2_32_Ceil Unexecuted instantiation: ARMInstPrinter.c:Log2_32_Ceil Unexecuted instantiation: AArch64Disassembler.c:Log2_32_Ceil Unexecuted instantiation: AArch64InstPrinter.c:Log2_32_Ceil Unexecuted instantiation: MipsDisassembler.c:Log2_32_Ceil Unexecuted instantiation: PPCDisassembler.c:Log2_32_Ceil Unexecuted instantiation: PPCInstPrinter.c:Log2_32_Ceil Unexecuted instantiation: SparcDisassembler.c:Log2_32_Ceil Unexecuted instantiation: SparcInstPrinter.c:Log2_32_Ceil Unexecuted instantiation: SystemZDisassembler.c:Log2_32_Ceil Unexecuted instantiation: SystemZInstPrinter.c:Log2_32_Ceil Unexecuted instantiation: XCoreDisassembler.c:Log2_32_Ceil Unexecuted instantiation: XCoreInstPrinter.c:Log2_32_Ceil Unexecuted instantiation: TMS320C64xDisassembler.c:Log2_32_Ceil Unexecuted instantiation: TMS320C64xInstPrinter.c:Log2_32_Ceil Unexecuted instantiation: RISCVDisassembler.c:Log2_32_Ceil Unexecuted instantiation: TriCoreDisassembler.c:Log2_32_Ceil Unexecuted instantiation: TriCoreInstPrinter.c:Log2_32_Ceil |
289 | | |
290 | | /// Log2_64_Ceil - This function returns the ceil log base 2 of the specified |
291 | | /// value, 64 if the value is zero. (64 bit edition.) |
292 | 0 | static inline unsigned Log2_64_Ceil(uint64_t Value) { |
293 | 0 | return 64-CountLeadingZeros_64(Value-1); |
294 | 0 | } Unexecuted instantiation: ARMDisassembler.c:Log2_64_Ceil Unexecuted instantiation: ARMInstPrinter.c:Log2_64_Ceil Unexecuted instantiation: AArch64Disassembler.c:Log2_64_Ceil Unexecuted instantiation: AArch64InstPrinter.c:Log2_64_Ceil Unexecuted instantiation: MipsDisassembler.c:Log2_64_Ceil Unexecuted instantiation: PPCDisassembler.c:Log2_64_Ceil Unexecuted instantiation: PPCInstPrinter.c:Log2_64_Ceil Unexecuted instantiation: SparcDisassembler.c:Log2_64_Ceil Unexecuted instantiation: SparcInstPrinter.c:Log2_64_Ceil Unexecuted instantiation: SystemZDisassembler.c:Log2_64_Ceil Unexecuted instantiation: SystemZInstPrinter.c:Log2_64_Ceil Unexecuted instantiation: XCoreDisassembler.c:Log2_64_Ceil Unexecuted instantiation: XCoreInstPrinter.c:Log2_64_Ceil Unexecuted instantiation: TMS320C64xDisassembler.c:Log2_64_Ceil Unexecuted instantiation: TMS320C64xInstPrinter.c:Log2_64_Ceil Unexecuted instantiation: RISCVDisassembler.c:Log2_64_Ceil Unexecuted instantiation: TriCoreDisassembler.c:Log2_64_Ceil Unexecuted instantiation: TriCoreInstPrinter.c:Log2_64_Ceil |
295 | | |
296 | | /// GreatestCommonDivisor64 - Return the greatest common divisor of the two |
297 | | /// values using Euclid's algorithm. |
298 | 0 | static inline uint64_t GreatestCommonDivisor64(uint64_t A, uint64_t B) { |
299 | 0 | while (B) { |
300 | 0 | uint64_t T = B; |
301 | 0 | B = A % B; |
302 | 0 | A = T; |
303 | 0 | } |
304 | 0 | return A; |
305 | 0 | } Unexecuted instantiation: ARMDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: ARMInstPrinter.c:GreatestCommonDivisor64 Unexecuted instantiation: AArch64Disassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: AArch64InstPrinter.c:GreatestCommonDivisor64 Unexecuted instantiation: MipsDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: PPCDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: PPCInstPrinter.c:GreatestCommonDivisor64 Unexecuted instantiation: SparcDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: SparcInstPrinter.c:GreatestCommonDivisor64 Unexecuted instantiation: SystemZDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: SystemZInstPrinter.c:GreatestCommonDivisor64 Unexecuted instantiation: XCoreDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: XCoreInstPrinter.c:GreatestCommonDivisor64 Unexecuted instantiation: TMS320C64xDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: TMS320C64xInstPrinter.c:GreatestCommonDivisor64 Unexecuted instantiation: RISCVDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: TriCoreDisassembler.c:GreatestCommonDivisor64 Unexecuted instantiation: TriCoreInstPrinter.c:GreatestCommonDivisor64 |
306 | | |
307 | | /// BitsToDouble - This function takes a 64-bit integer and returns the bit |
308 | | /// equivalent double. |
309 | 0 | static inline double BitsToDouble(uint64_t Bits) { |
310 | 0 | union { |
311 | 0 | uint64_t L; |
312 | 0 | double D; |
313 | 0 | } T; |
314 | 0 | T.L = Bits; |
315 | 0 | return T.D; |
316 | 0 | } Unexecuted instantiation: ARMDisassembler.c:BitsToDouble Unexecuted instantiation: ARMInstPrinter.c:BitsToDouble Unexecuted instantiation: AArch64Disassembler.c:BitsToDouble Unexecuted instantiation: AArch64InstPrinter.c:BitsToDouble Unexecuted instantiation: MipsDisassembler.c:BitsToDouble Unexecuted instantiation: PPCDisassembler.c:BitsToDouble Unexecuted instantiation: PPCInstPrinter.c:BitsToDouble Unexecuted instantiation: SparcDisassembler.c:BitsToDouble Unexecuted instantiation: SparcInstPrinter.c:BitsToDouble Unexecuted instantiation: SystemZDisassembler.c:BitsToDouble Unexecuted instantiation: SystemZInstPrinter.c:BitsToDouble Unexecuted instantiation: XCoreDisassembler.c:BitsToDouble Unexecuted instantiation: XCoreInstPrinter.c:BitsToDouble Unexecuted instantiation: TMS320C64xDisassembler.c:BitsToDouble Unexecuted instantiation: TMS320C64xInstPrinter.c:BitsToDouble Unexecuted instantiation: RISCVDisassembler.c:BitsToDouble Unexecuted instantiation: TriCoreDisassembler.c:BitsToDouble Unexecuted instantiation: TriCoreInstPrinter.c:BitsToDouble |
317 | | |
318 | | /// BitsToFloat - This function takes a 32-bit integer and returns the bit |
319 | | /// equivalent float. |
320 | 0 | static inline float BitsToFloat(uint32_t Bits) { |
321 | 0 | union { |
322 | 0 | uint32_t I; |
323 | 0 | float F; |
324 | 0 | } T; |
325 | 0 | T.I = Bits; |
326 | 0 | return T.F; |
327 | 0 | } Unexecuted instantiation: ARMDisassembler.c:BitsToFloat Unexecuted instantiation: AArch64Disassembler.c:BitsToFloat Unexecuted instantiation: MipsDisassembler.c:BitsToFloat Unexecuted instantiation: PPCDisassembler.c:BitsToFloat Unexecuted instantiation: PPCInstPrinter.c:BitsToFloat Unexecuted instantiation: SparcDisassembler.c:BitsToFloat Unexecuted instantiation: SparcInstPrinter.c:BitsToFloat Unexecuted instantiation: SystemZDisassembler.c:BitsToFloat Unexecuted instantiation: SystemZInstPrinter.c:BitsToFloat Unexecuted instantiation: XCoreDisassembler.c:BitsToFloat Unexecuted instantiation: XCoreInstPrinter.c:BitsToFloat Unexecuted instantiation: TMS320C64xDisassembler.c:BitsToFloat Unexecuted instantiation: TMS320C64xInstPrinter.c:BitsToFloat Unexecuted instantiation: RISCVDisassembler.c:BitsToFloat Unexecuted instantiation: TriCoreDisassembler.c:BitsToFloat Unexecuted instantiation: TriCoreInstPrinter.c:BitsToFloat |
328 | | |
329 | | /// DoubleToBits - This function takes a double and returns the bit |
330 | | /// equivalent 64-bit integer. Note that copying doubles around |
331 | | /// changes the bits of NaNs on some hosts, notably x86, so this |
332 | | /// routine cannot be used if these bits are needed. |
333 | 0 | static inline uint64_t DoubleToBits(double Double) { |
334 | 0 | union { |
335 | 0 | uint64_t L; |
336 | 0 | double D; |
337 | 0 | } T; |
338 | 0 | T.D = Double; |
339 | 0 | return T.L; |
340 | 0 | } Unexecuted instantiation: ARMDisassembler.c:DoubleToBits Unexecuted instantiation: ARMInstPrinter.c:DoubleToBits Unexecuted instantiation: AArch64Disassembler.c:DoubleToBits Unexecuted instantiation: AArch64InstPrinter.c:DoubleToBits Unexecuted instantiation: MipsDisassembler.c:DoubleToBits Unexecuted instantiation: PPCDisassembler.c:DoubleToBits Unexecuted instantiation: PPCInstPrinter.c:DoubleToBits Unexecuted instantiation: SparcDisassembler.c:DoubleToBits Unexecuted instantiation: SparcInstPrinter.c:DoubleToBits Unexecuted instantiation: SystemZDisassembler.c:DoubleToBits Unexecuted instantiation: SystemZInstPrinter.c:DoubleToBits Unexecuted instantiation: XCoreDisassembler.c:DoubleToBits Unexecuted instantiation: XCoreInstPrinter.c:DoubleToBits Unexecuted instantiation: TMS320C64xDisassembler.c:DoubleToBits Unexecuted instantiation: TMS320C64xInstPrinter.c:DoubleToBits Unexecuted instantiation: RISCVDisassembler.c:DoubleToBits Unexecuted instantiation: TriCoreDisassembler.c:DoubleToBits Unexecuted instantiation: TriCoreInstPrinter.c:DoubleToBits |
341 | | |
342 | | /// FloatToBits - This function takes a float and returns the bit |
343 | | /// equivalent 32-bit integer. Note that copying floats around |
344 | | /// changes the bits of NaNs on some hosts, notably x86, so this |
345 | | /// routine cannot be used if these bits are needed. |
346 | 0 | static inline uint32_t FloatToBits(float Float) { |
347 | 0 | union { |
348 | 0 | uint32_t I; |
349 | 0 | float F; |
350 | 0 | } T; |
351 | 0 | T.F = Float; |
352 | 0 | return T.I; |
353 | 0 | } Unexecuted instantiation: ARMDisassembler.c:FloatToBits Unexecuted instantiation: ARMInstPrinter.c:FloatToBits Unexecuted instantiation: AArch64Disassembler.c:FloatToBits Unexecuted instantiation: AArch64InstPrinter.c:FloatToBits Unexecuted instantiation: MipsDisassembler.c:FloatToBits Unexecuted instantiation: PPCDisassembler.c:FloatToBits Unexecuted instantiation: PPCInstPrinter.c:FloatToBits Unexecuted instantiation: SparcDisassembler.c:FloatToBits Unexecuted instantiation: SparcInstPrinter.c:FloatToBits Unexecuted instantiation: SystemZDisassembler.c:FloatToBits Unexecuted instantiation: SystemZInstPrinter.c:FloatToBits Unexecuted instantiation: XCoreDisassembler.c:FloatToBits Unexecuted instantiation: XCoreInstPrinter.c:FloatToBits Unexecuted instantiation: TMS320C64xDisassembler.c:FloatToBits Unexecuted instantiation: TMS320C64xInstPrinter.c:FloatToBits Unexecuted instantiation: RISCVDisassembler.c:FloatToBits Unexecuted instantiation: TriCoreDisassembler.c:FloatToBits Unexecuted instantiation: TriCoreInstPrinter.c:FloatToBits |
354 | | |
355 | | /// MinAlign - A and B are either alignments or offsets. Return the minimum |
356 | | /// alignment that may be assumed after adding the two together. |
357 | 0 | static inline uint64_t MinAlign(uint64_t A, uint64_t B) { |
358 | 0 | // The largest power of 2 that divides both A and B. |
359 | 0 | // |
360 | 0 | // Replace "-Value" by "1+~Value" in the following commented code to avoid |
361 | 0 | // MSVC warning C4146 |
362 | 0 | // return (A | B) & -(A | B); |
363 | 0 | return (A | B) & (1 + ~(A | B)); |
364 | 0 | } Unexecuted instantiation: ARMDisassembler.c:MinAlign Unexecuted instantiation: ARMInstPrinter.c:MinAlign Unexecuted instantiation: AArch64Disassembler.c:MinAlign Unexecuted instantiation: AArch64InstPrinter.c:MinAlign Unexecuted instantiation: MipsDisassembler.c:MinAlign Unexecuted instantiation: PPCDisassembler.c:MinAlign Unexecuted instantiation: PPCInstPrinter.c:MinAlign Unexecuted instantiation: SparcDisassembler.c:MinAlign Unexecuted instantiation: SparcInstPrinter.c:MinAlign Unexecuted instantiation: SystemZDisassembler.c:MinAlign Unexecuted instantiation: SystemZInstPrinter.c:MinAlign Unexecuted instantiation: XCoreDisassembler.c:MinAlign Unexecuted instantiation: XCoreInstPrinter.c:MinAlign Unexecuted instantiation: TMS320C64xDisassembler.c:MinAlign Unexecuted instantiation: TMS320C64xInstPrinter.c:MinAlign Unexecuted instantiation: RISCVDisassembler.c:MinAlign Unexecuted instantiation: TriCoreDisassembler.c:MinAlign Unexecuted instantiation: TriCoreInstPrinter.c:MinAlign |
365 | | |
366 | | /// NextPowerOf2 - Returns the next power of two (in 64-bits) |
367 | | /// that is strictly greater than A. Returns zero on overflow. |
368 | 0 | static inline uint64_t NextPowerOf2(uint64_t A) { |
369 | 0 | A |= (A >> 1); |
370 | 0 | A |= (A >> 2); |
371 | 0 | A |= (A >> 4); |
372 | 0 | A |= (A >> 8); |
373 | 0 | A |= (A >> 16); |
374 | 0 | A |= (A >> 32); |
375 | 0 | return A + 1; |
376 | 0 | } Unexecuted instantiation: ARMDisassembler.c:NextPowerOf2 Unexecuted instantiation: ARMInstPrinter.c:NextPowerOf2 Unexecuted instantiation: AArch64Disassembler.c:NextPowerOf2 Unexecuted instantiation: AArch64InstPrinter.c:NextPowerOf2 Unexecuted instantiation: MipsDisassembler.c:NextPowerOf2 Unexecuted instantiation: PPCDisassembler.c:NextPowerOf2 Unexecuted instantiation: PPCInstPrinter.c:NextPowerOf2 Unexecuted instantiation: SparcDisassembler.c:NextPowerOf2 Unexecuted instantiation: SparcInstPrinter.c:NextPowerOf2 Unexecuted instantiation: SystemZDisassembler.c:NextPowerOf2 Unexecuted instantiation: SystemZInstPrinter.c:NextPowerOf2 Unexecuted instantiation: XCoreDisassembler.c:NextPowerOf2 Unexecuted instantiation: XCoreInstPrinter.c:NextPowerOf2 Unexecuted instantiation: TMS320C64xDisassembler.c:NextPowerOf2 Unexecuted instantiation: TMS320C64xInstPrinter.c:NextPowerOf2 Unexecuted instantiation: RISCVDisassembler.c:NextPowerOf2 Unexecuted instantiation: TriCoreDisassembler.c:NextPowerOf2 Unexecuted instantiation: TriCoreInstPrinter.c:NextPowerOf2 |
377 | | |
378 | | /// Returns the next integer (mod 2**64) that is greater than or equal to |
379 | | /// \p Value and is a multiple of \p Align. \p Align must be non-zero. |
380 | | /// |
381 | | /// Examples: |
382 | | /// \code |
383 | | /// RoundUpToAlignment(5, 8) = 8 |
384 | | /// RoundUpToAlignment(17, 8) = 24 |
385 | | /// RoundUpToAlignment(~0LL, 8) = 0 |
386 | | /// \endcode |
387 | 0 | static inline uint64_t RoundUpToAlignment(uint64_t Value, uint64_t Align) { |
388 | 0 | return ((Value + Align - 1) / Align) * Align; |
389 | 0 | } Unexecuted instantiation: ARMDisassembler.c:RoundUpToAlignment Unexecuted instantiation: ARMInstPrinter.c:RoundUpToAlignment Unexecuted instantiation: AArch64Disassembler.c:RoundUpToAlignment Unexecuted instantiation: AArch64InstPrinter.c:RoundUpToAlignment Unexecuted instantiation: MipsDisassembler.c:RoundUpToAlignment Unexecuted instantiation: PPCDisassembler.c:RoundUpToAlignment Unexecuted instantiation: PPCInstPrinter.c:RoundUpToAlignment Unexecuted instantiation: SparcDisassembler.c:RoundUpToAlignment Unexecuted instantiation: SparcInstPrinter.c:RoundUpToAlignment Unexecuted instantiation: SystemZDisassembler.c:RoundUpToAlignment Unexecuted instantiation: SystemZInstPrinter.c:RoundUpToAlignment Unexecuted instantiation: XCoreDisassembler.c:RoundUpToAlignment Unexecuted instantiation: XCoreInstPrinter.c:RoundUpToAlignment Unexecuted instantiation: TMS320C64xDisassembler.c:RoundUpToAlignment Unexecuted instantiation: TMS320C64xInstPrinter.c:RoundUpToAlignment Unexecuted instantiation: RISCVDisassembler.c:RoundUpToAlignment Unexecuted instantiation: TriCoreDisassembler.c:RoundUpToAlignment Unexecuted instantiation: TriCoreInstPrinter.c:RoundUpToAlignment |
390 | | |
391 | | /// Returns the offset to the next integer (mod 2**64) that is greater than |
392 | | /// or equal to \p Value and is a multiple of \p Align. \p Align must be |
393 | | /// non-zero. |
394 | 0 | static inline uint64_t OffsetToAlignment(uint64_t Value, uint64_t Align) { |
395 | 0 | return RoundUpToAlignment(Value, Align) - Value; |
396 | 0 | } Unexecuted instantiation: ARMDisassembler.c:OffsetToAlignment Unexecuted instantiation: ARMInstPrinter.c:OffsetToAlignment Unexecuted instantiation: AArch64Disassembler.c:OffsetToAlignment Unexecuted instantiation: AArch64InstPrinter.c:OffsetToAlignment Unexecuted instantiation: MipsDisassembler.c:OffsetToAlignment Unexecuted instantiation: PPCDisassembler.c:OffsetToAlignment Unexecuted instantiation: PPCInstPrinter.c:OffsetToAlignment Unexecuted instantiation: SparcDisassembler.c:OffsetToAlignment Unexecuted instantiation: SparcInstPrinter.c:OffsetToAlignment Unexecuted instantiation: SystemZDisassembler.c:OffsetToAlignment Unexecuted instantiation: SystemZInstPrinter.c:OffsetToAlignment Unexecuted instantiation: XCoreDisassembler.c:OffsetToAlignment Unexecuted instantiation: XCoreInstPrinter.c:OffsetToAlignment Unexecuted instantiation: TMS320C64xDisassembler.c:OffsetToAlignment Unexecuted instantiation: TMS320C64xInstPrinter.c:OffsetToAlignment Unexecuted instantiation: RISCVDisassembler.c:OffsetToAlignment Unexecuted instantiation: TriCoreDisassembler.c:OffsetToAlignment Unexecuted instantiation: TriCoreInstPrinter.c:OffsetToAlignment |
397 | | |
398 | | /// abs64 - absolute value of a 64-bit int. Not all environments support |
399 | | /// "abs" on whatever their name for the 64-bit int type is. The absolute |
400 | | /// value of the largest negative number is undefined, as with "abs". |
401 | 0 | static inline int64_t abs64(int64_t x) { |
402 | 0 | return (x < 0) ? -x : x; |
403 | 0 | } Unexecuted instantiation: ARMDisassembler.c:abs64 Unexecuted instantiation: ARMInstPrinter.c:abs64 Unexecuted instantiation: AArch64Disassembler.c:abs64 Unexecuted instantiation: AArch64InstPrinter.c:abs64 Unexecuted instantiation: MipsDisassembler.c:abs64 Unexecuted instantiation: PPCDisassembler.c:abs64 Unexecuted instantiation: PPCInstPrinter.c:abs64 Unexecuted instantiation: SparcDisassembler.c:abs64 Unexecuted instantiation: SparcInstPrinter.c:abs64 Unexecuted instantiation: SystemZDisassembler.c:abs64 Unexecuted instantiation: SystemZInstPrinter.c:abs64 Unexecuted instantiation: XCoreDisassembler.c:abs64 Unexecuted instantiation: XCoreInstPrinter.c:abs64 Unexecuted instantiation: TMS320C64xDisassembler.c:abs64 Unexecuted instantiation: TMS320C64xInstPrinter.c:abs64 Unexecuted instantiation: RISCVDisassembler.c:abs64 Unexecuted instantiation: TriCoreDisassembler.c:abs64 Unexecuted instantiation: TriCoreInstPrinter.c:abs64 |
404 | | |
405 | | /// \brief Sign extend number in the bottom B bits of X to a 32-bit int. |
406 | | /// Requires 0 < B <= 32. |
407 | 184k | static inline int32_t SignExtend32(uint32_t X, unsigned B) { |
408 | 184k | return (int32_t)(X << (32 - B)) >> (32 - B); |
409 | 184k | } ARMDisassembler.c:SignExtend32 Line | Count | Source | 407 | 94.4k | static inline int32_t SignExtend32(uint32_t X, unsigned B) { | 408 | 94.4k | return (int32_t)(X << (32 - B)) >> (32 - B); | 409 | 94.4k | } |
Unexecuted instantiation: ARMInstPrinter.c:SignExtend32 Unexecuted instantiation: AArch64Disassembler.c:SignExtend32 Unexecuted instantiation: AArch64InstPrinter.c:SignExtend32 MipsDisassembler.c:SignExtend32 Line | Count | Source | 407 | 52.9k | static inline int32_t SignExtend32(uint32_t X, unsigned B) { | 408 | 52.9k | return (int32_t)(X << (32 - B)) >> (32 - B); | 409 | 52.9k | } |
PPCInstPrinter.c:SignExtend32 Line | Count | Source | 407 | 15.1k | static inline int32_t SignExtend32(uint32_t X, unsigned B) { | 408 | 15.1k | return (int32_t)(X << (32 - B)) >> (32 - B); | 409 | 15.1k | } |
SparcDisassembler.c:SignExtend32 Line | Count | Source | 407 | 3.34k | static inline int32_t SignExtend32(uint32_t X, unsigned B) { | 408 | 3.34k | return (int32_t)(X << (32 - B)) >> (32 - B); | 409 | 3.34k | } |
SparcInstPrinter.c:SignExtend32 Line | Count | Source | 407 | 18.7k | static inline int32_t SignExtend32(uint32_t X, unsigned B) { | 408 | 18.7k | return (int32_t)(X << (32 - B)) >> (32 - B); | 409 | 18.7k | } |
Unexecuted instantiation: SystemZDisassembler.c:SignExtend32 Unexecuted instantiation: SystemZInstPrinter.c:SignExtend32 Unexecuted instantiation: XCoreDisassembler.c:SignExtend32 Unexecuted instantiation: XCoreInstPrinter.c:SignExtend32 Unexecuted instantiation: TMS320C64xDisassembler.c:SignExtend32 Unexecuted instantiation: TMS320C64xInstPrinter.c:SignExtend32 Unexecuted instantiation: RISCVDisassembler.c:SignExtend32 Unexecuted instantiation: TriCoreDisassembler.c:SignExtend32 Unexecuted instantiation: TriCoreInstPrinter.c:SignExtend32 |
410 | | |
411 | | /// \brief Sign extend number in the bottom B bits of X to a 64-bit int. |
412 | | /// Requires 0 < B <= 64. |
413 | 86.3k | static inline int64_t SignExtend64(uint64_t X, unsigned B) { |
414 | 86.3k | return (int64_t)(X << (64 - B)) >> (64 - B); |
415 | 86.3k | } Unexecuted instantiation: ARMDisassembler.c:SignExtend64 Unexecuted instantiation: ARMInstPrinter.c:SignExtend64 Unexecuted instantiation: AArch64Disassembler.c:SignExtend64 AArch64InstPrinter.c:SignExtend64 Line | Count | Source | 413 | 7.09k | static inline int64_t SignExtend64(uint64_t X, unsigned B) { | 414 | 7.09k | return (int64_t)(X << (64 - B)) >> (64 - B); | 415 | 7.09k | } |
MipsDisassembler.c:SignExtend64 Line | Count | Source | 413 | 10.9k | static inline int64_t SignExtend64(uint64_t X, unsigned B) { | 414 | 10.9k | return (int64_t)(X << (64 - B)) >> (64 - B); | 415 | 10.9k | } |
PPCDisassembler.c:SignExtend64 Line | Count | Source | 413 | 26.4k | static inline int64_t SignExtend64(uint64_t X, unsigned B) { | 414 | 26.4k | return (int64_t)(X << (64 - B)) >> (64 - B); | 415 | 26.4k | } |
PPCInstPrinter.c:SignExtend64 Line | Count | Source | 413 | 8.80k | static inline int64_t SignExtend64(uint64_t X, unsigned B) { | 414 | 8.80k | return (int64_t)(X << (64 - B)) >> (64 - B); | 415 | 8.80k | } |
Unexecuted instantiation: SparcInstPrinter.c:SignExtend64 SystemZDisassembler.c:SignExtend64 Line | Count | Source | 413 | 23.7k | static inline int64_t SignExtend64(uint64_t X, unsigned B) { | 414 | 23.7k | return (int64_t)(X << (64 - B)) >> (64 - B); | 415 | 23.7k | } |
Unexecuted instantiation: SystemZInstPrinter.c:SignExtend64 Unexecuted instantiation: XCoreDisassembler.c:SignExtend64 Unexecuted instantiation: XCoreInstPrinter.c:SignExtend64 Unexecuted instantiation: TMS320C64xDisassembler.c:SignExtend64 Unexecuted instantiation: TMS320C64xInstPrinter.c:SignExtend64 RISCVDisassembler.c:SignExtend64 Line | Count | Source | 413 | 9.37k | static inline int64_t SignExtend64(uint64_t X, unsigned B) { | 414 | 9.37k | return (int64_t)(X << (64 - B)) >> (64 - B); | 415 | 9.37k | } |
Unexecuted instantiation: TriCoreDisassembler.c:SignExtend64 Unexecuted instantiation: TriCoreInstPrinter.c:SignExtend64 |
416 | | |
417 | | /// \brief Count number of 0's from the most significant bit to the least |
418 | | /// stopping at the first 1. |
419 | | /// |
420 | | /// Only unsigned integral types are allowed. |
421 | | /// |
422 | | /// \param ZB the behavior on an input of 0. Only ZB_Width and ZB_Undefined are |
423 | | /// valid arguments. |
424 | | static inline unsigned int countLeadingZeros(int x) |
425 | 0 | { |
426 | 0 | int i; |
427 | 0 | const unsigned bits = sizeof(x) * 8; |
428 | 0 | unsigned count = bits; |
429 | 0 |
|
430 | 0 | if (x < 0) { |
431 | 0 | return 0; |
432 | 0 | } |
433 | 0 | for (i = bits; --i; ) { |
434 | 0 | if (x == 0) break; |
435 | 0 | count--; |
436 | 0 | x >>= 1; |
437 | 0 | } |
438 | 0 |
|
439 | 0 | return count; |
440 | 0 | } Unexecuted instantiation: ARMDisassembler.c:countLeadingZeros Unexecuted instantiation: ARMInstPrinter.c:countLeadingZeros Unexecuted instantiation: AArch64Disassembler.c:countLeadingZeros Unexecuted instantiation: AArch64InstPrinter.c:countLeadingZeros Unexecuted instantiation: MipsDisassembler.c:countLeadingZeros Unexecuted instantiation: PPCDisassembler.c:countLeadingZeros Unexecuted instantiation: PPCInstPrinter.c:countLeadingZeros Unexecuted instantiation: SparcDisassembler.c:countLeadingZeros Unexecuted instantiation: SparcInstPrinter.c:countLeadingZeros Unexecuted instantiation: SystemZDisassembler.c:countLeadingZeros Unexecuted instantiation: SystemZInstPrinter.c:countLeadingZeros Unexecuted instantiation: XCoreDisassembler.c:countLeadingZeros Unexecuted instantiation: XCoreInstPrinter.c:countLeadingZeros Unexecuted instantiation: TMS320C64xDisassembler.c:countLeadingZeros Unexecuted instantiation: TMS320C64xInstPrinter.c:countLeadingZeros Unexecuted instantiation: RISCVDisassembler.c:countLeadingZeros Unexecuted instantiation: TriCoreDisassembler.c:countLeadingZeros Unexecuted instantiation: TriCoreInstPrinter.c:countLeadingZeros |
441 | | |
442 | | #endif |