X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseLib%2FBitField.c;h=3db8a23c950ebbc4f23b84b73277ecfc9f9b048a;hp=0b517aa974f7f505cd7a59c472df3e03a7b32305;hb=582510249f2fb1334e507b99421b9485f6b89159;hpb=ba3a1cb5bb97ffdea980f188fbd14b08200aeac6 diff --git a/MdePkg/Library/BaseLib/BitField.c b/MdePkg/Library/BaseLib/BitField.c index 0b517aa974..3db8a23c95 100644 --- a/MdePkg/Library/BaseLib/BitField.c +++ b/MdePkg/Library/BaseLib/BitField.c @@ -14,6 +14,8 @@ **/ +#include "BaseLibInternals.h" + /** Worker function that returns a bit field from Operand @@ -763,10 +765,16 @@ BitFieldOr64 ( IN UINT64 OrData ) { + UINT64 Value1; + UINT64 Value2; + ASSERT (EndBit < sizeof (Operand) * 8); ASSERT (StartBit <= EndBit); - return Operand | - (LShiftU64 (OrData, StartBit) & ~LShiftU64 ((UINT64)-2, EndBit)); + + Value1 = LShiftU64 (OrData, StartBit); + Value2 = LShiftU64 ((UINT64) - 2, EndBit); + + return Operand | (Value1 & ~Value2); } /** @@ -801,10 +809,16 @@ BitFieldAnd64 ( IN UINT64 AndData ) { + UINT64 Value1; + UINT64 Value2; + ASSERT (EndBit < sizeof (Operand) * 8); ASSERT (StartBit <= EndBit); - return Operand & - ~(LShiftU64 (~AndData, StartBit) & ~LShiftU64 ((UINT64)-2, EndBit)); + + Value1 = LShiftU64 (~AndData, StartBit); + Value2 = LShiftU64 ((UINT64)-2, EndBit); + + return Operand & ~(Value1 & ~Value2); } /**