]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/BitField.c
1) Fix bugs in BaseMemoryLibOptXXX instances in MdePkg.
[mirror_edk2.git] / MdePkg / Library / BaseLib / BitField.c
index 0b517aa974f7f505cd7a59c472df3e03a7b32305..372ba12355b82cc5de3ffc6d28b0ab707cfcab05 100644 (file)
   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-  Module Name:  BitField.c\r
-\r
 **/\r
 \r
+//\r
+// Include common header file for this module.\r
+//\r
+\r
+\r
+#include "BaseLibInternals.h"\r
+\r
 /**\r
   Worker function that returns a bit field from Operand\r
 \r
@@ -763,10 +768,16 @@ BitFieldOr64 (
   IN      UINT64                    OrData\r
   )\r
 {\r
+  UINT64  Value1;\r
+  UINT64  Value2;\r
+\r
   ASSERT (EndBit < sizeof (Operand) * 8);\r
   ASSERT (StartBit <= EndBit);\r
-  return Operand |\r
-         (LShiftU64 (OrData, StartBit) & ~LShiftU64 ((UINT64)-2, EndBit));\r
+\r
+  Value1 = LShiftU64 (OrData, StartBit);\r
+  Value2 = LShiftU64 ((UINT64) - 2, EndBit);\r
+\r
+  return Operand | (Value1 & ~Value2);\r
 }\r
 \r
 /**\r
@@ -801,10 +812,16 @@ BitFieldAnd64 (
   IN      UINT64                    AndData\r
   )\r
 {\r
+  UINT64  Value1;\r
+  UINT64  Value2;\r
+  \r
   ASSERT (EndBit < sizeof (Operand) * 8);\r
   ASSERT (StartBit <= EndBit);\r
-  return Operand &\r
-         ~(LShiftU64 (~AndData, StartBit) & ~LShiftU64 ((UINT64)-2, EndBit));\r
+\r
+  Value1 = LShiftU64 (~AndData, StartBit);\r
+  Value2 = LShiftU64 ((UINT64)-2, EndBit);\r
+\r
+  return Operand & ~(Value1 & ~Value2);\r
 }\r
 \r
 /**\r