mirror of https://github.com/acidanthera/audk.git
Optimized HighBitSetXX() functions
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1689 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
b1288fcac3
commit
73c47db8c7
|
@ -36,6 +36,9 @@ HighBitSet32 (
|
|||
{
|
||||
INTN BitIndex;
|
||||
|
||||
for (BitIndex = -1; Operand != 0; BitIndex++, Operand >>= 1);
|
||||
if (Operand == 0) {
|
||||
return - 1;
|
||||
}
|
||||
for (BitIndex = 31; (INT32)Operand > 0; BitIndex--, Operand <<= 1);
|
||||
return BitIndex;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue