]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Refactor the code logic to reduce code size for debug tip.
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 1 Sep 2009 15:05:34 +0000 (15:05 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 1 Sep 2009 15:05:34 +0000 (15:05 +0000)
The original switch case statements does not generate space efficient size when optimization is disabled.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9221 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/DebugLib.c

index 339a002cd5449d1854e0373f986880eb2d83f74b..20f52f86bfbec31d7afb6c20da403dfdd0d2a10a 100644 (file)
@@ -53,7 +53,6 @@ DebugPrint (
   BASE_LIST       BaseListMarker;\r
   CHAR8           *FormatString;\r
   BOOLEAN         Long;\r
-  BOOLEAN         Done;\r
 \r
   //\r
   // If Format is NULL, then ASSERT().\r
@@ -73,7 +72,7 @@ DebugPrint (
   // the following layout:\r
   //\r
   //         Buffer->|------------------------|\r
-  //                 |         Pading         | 4 bytes\r
+  //                 |         Padding        | 4 bytes\r
   //      DebugInfo->|------------------------|\r
   //                 |      EFI_DEBUG_INFO    | sizeof(EFI_DEBUG_INFO)\r
   // BaseListMarker->|------------------------|\r
@@ -99,7 +98,7 @@ DebugPrint (
   // Here we skip the first 4 bytes of Buffer, because we must ensure BaseListMarker is\r
   // 64-bit aligned, otherwise retrieving 64-bit parameter from BaseListMarker will cause\r
   // exception on IPF. Buffer starts at 64-bit aligned address, so skipping 4 types (sizeof(EFI_DEBUG_INFO))\r
-  // just makes addess of BaseListMarker, which follows DebugInfo, 64-bit aligned.\r
+  // just makes address of BaseListMarker, which follows DebugInfo, 64-bit aligned.\r
   //\r
   DebugInfo             = (EFI_DEBUG_INFO *)(Buffer) + 1;\r
   DebugInfo->ErrorLevel = (UINT32)ErrorLevel;\r
@@ -128,91 +127,66 @@ DebugPrint (
     //\r
     // Parse Flags and Width\r
     //\r
-    for (Done = FALSE; !Done; ) {\r
-      Format++;\r
-      switch (*Format) {\r
-      case '.': \r
-      case '-': \r
-      case '+': \r
-      case ' ': \r
-      case ',': \r
-      case '0':\r
-      case '1':\r
-      case '2':\r
-      case '3':\r
-      case '4':\r
-      case '5':\r
-      case '6':\r
-      case '7':\r
-      case '8':\r
-      case '9':\r
+    for (Format++; TRUE; Format++) {\r
+      if (*Format == '.' || *Format == '-' || *Format == '+' || *Format == ' ') {\r
         //\r
         // These characters in format field are omitted.\r
         //\r
-        break;\r
-      case 'L':\r
-      case 'l': \r
+        continue;\r
+      }\r
+      if (*Format >= '0' && *Format <= '9') {\r
+        //\r
+        // These characters in format field are omitted.\r
+        //\r
+        continue;\r
+      }\r
+      if (*Format == 'L' || *Format == 'l') {\r
         //\r
         // 'L" or "l" in format field means the number being printed is a UINT64\r
         //\r
         Long = TRUE;\r
-        break;\r
-      case '*':\r
+        continue;\r
+      }\r
+      if (*Format == '*') {\r
         //\r
         // '*' in format field means the precision of the field is specified by\r
         // a UINTN argument in the argument list.\r
         //\r
         BASE_ARG (BaseListMarker, UINTN) = VA_ARG (VaListMarker, UINTN);\r
-        break;\r
-      case '\0':\r
+        continue;\r
+      }\r
+      if (*Format == '\0') {\r
         //\r
         // Make no output if Format string terminates unexpectedly when\r
         // looking up for flag, width, precision and type. \r
         //\r
         Format--;\r
-        //\r
-        // break skipped on purpose.\r
-        //\r
-      default:\r
-        //\r
-        // When valid argument type detected or format string terminates unexpectedly,\r
-        // the inner loop is done.\r
-        //\r
-        Done = TRUE;\r
-        break;\r
       }\r
-    } \r
-        \r
+      //\r
+      // When valid argument type detected or format string terminates unexpectedly,\r
+      // the inner loop is done.\r
+      //\r
+      break;\r
+    }\r
+    \r
     //\r
     // Pack variable arguments into the storage area following EFI_DEBUG_INFO.\r
     //\r
-    switch (*Format) {\r
-    case 'p':\r
-      if (sizeof (VOID *) > 4) {\r
-        Long = TRUE;\r
-      }\r
-    case 'X':\r
-    case 'x':\r
-    case 'd':\r
+    if ((*Format == 'p') && (sizeof (VOID *) > 4)) {\r
+      Long = TRUE;\r
+    }\r
+    if (*Format == 'p' || *Format == 'X' || *Format == 'x' || *Format == 'd') {\r
       if (Long) {\r
         BASE_ARG (BaseListMarker, INT64) = VA_ARG (VaListMarker, INT64);\r
       } else {\r
         BASE_ARG (BaseListMarker, int) = VA_ARG (VaListMarker, int);\r
       }\r
-      break;\r
-    case 's':\r
-    case 'S':\r
-    case 'a':\r
-    case 'g':\r
-    case 't':\r
+    } else if (*Format == 's' || *Format == 'S' || *Format == 'a' || *Format == 'g' || *Format == 't') {\r
       BASE_ARG (BaseListMarker, VOID *) = VA_ARG (VaListMarker, VOID *);\r
-      break;\r
-    case 'c':\r
+    } else if (*Format == 'c') {\r
       BASE_ARG (BaseListMarker, UINTN) = VA_ARG (VaListMarker, UINTN);\r
-      break;\r
-    case 'r':\r
+    } else if (*Format == 'r') {\r
       BASE_ARG (BaseListMarker, RETURN_STATUS) = VA_ARG (VaListMarker, RETURN_STATUS);\r
-      break;\r
     }\r
 \r
     //\r