diff options
Diffstat (limited to 'MdePkg/Library/BaseLib/HighBitSet64.c')
-rw-r--r-- | MdePkg/Library/BaseLib/HighBitSet64.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/MdePkg/Library/BaseLib/HighBitSet64.c b/MdePkg/Library/BaseLib/HighBitSet64.c index 50889777b5..6b3c585f37 100644 --- a/MdePkg/Library/BaseLib/HighBitSet64.c +++ b/MdePkg/Library/BaseLib/HighBitSet64.c @@ -34,10 +34,19 @@ HighBitSet64 ( IN UINT64 Operand
)
{
- INTN BitIndex;
-
- for (BitIndex = -1;
- Operand != 0;
- BitIndex++, Operand = RShiftU64 (Operand, 1));
- return BitIndex;
+ if (Operand == (UINT32)Operand) {
+ //
+ // Operand is just a 32-bit integer
+ //
+ return HighBitSet32 ((UINT32)Operand);
+ }
+
+ //
+ // Operand is really a 64-bit integer
+ //
+ if (sizeof (UINTN) == sizeof (UINT32)) {
+ return HighBitSet32 (((UINT32*)&Operand)[1]) + 32;
+ } else {
+ return HighBitSet32 ((UINT32)RShiftU64 (Operand, 32)) + 32;
+ }
}
|