]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/HighBitSet64.c
Optimized HighBitSetXX() functions
[mirror_edk2.git] / MdePkg / Library / BaseLib / HighBitSet64.c
index 50889777b5420b1878f8c72bc007b79ec6965290..6b3c585f376a2bc4a37661b983be9a659d6a6935 100644 (file)
@@ -34,10 +34,19 @@ HighBitSet64 (
   IN      UINT64                    Operand\r
   )\r
 {\r
-  INTN                              BitIndex;\r
-\r
-  for (BitIndex = -1;\r
-       Operand != 0;\r
-       BitIndex++, Operand = RShiftU64 (Operand, 1));\r
-  return BitIndex;\r
+  if (Operand == (UINT32)Operand) {\r
+    //\r
+    // Operand is just a 32-bit integer\r
+    //\r
+    return HighBitSet32 ((UINT32)Operand);\r
+  }\r
+\r
+  //\r
+  // Operand is really a 64-bit integer\r
+  //\r
+  if (sizeof (UINTN) == sizeof (UINT32)) {\r
+    return HighBitSet32 (((UINT32*)&Operand)[1]) + 32;\r
+  } else {\r
+    return HighBitSet32 ((UINT32)RShiftU64 (Operand, 32)) + 32;\r
+  }\r
 }\r