From 73c47db8c767a056df433a61ca2beb5a1e8e42c1 Mon Sep 17 00:00:00 2001 From: bxing Date: Sun, 8 Oct 2006 08:45:59 +0000 Subject: Optimized HighBitSetXX() functions git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1689 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/HighBitSet32.c | 5 ++++- MdePkg/Library/BaseLib/HighBitSet64.c | 21 +++++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) (limited to 'MdePkg') diff --git a/MdePkg/Library/BaseLib/HighBitSet32.c b/MdePkg/Library/BaseLib/HighBitSet32.c index 65f067a..5ab4d7f 100644 --- a/MdePkg/Library/BaseLib/HighBitSet32.c +++ b/MdePkg/Library/BaseLib/HighBitSet32.c @@ -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; } diff --git a/MdePkg/Library/BaseLib/HighBitSet64.c b/MdePkg/Library/BaseLib/HighBitSet64.c index 5088977..6b3c585 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; + } } -- cgit v1.1