I fixed following bugs in EDKII.
[mirror_edk2.git] / EdkModulePkg / Universal / Ebc / Dxe / EbcExecute.c
index 9d375a54615873027c0d54f675f12702fa684c75..70db1574bf3b64c8491909be654f36f427afb3af 100644 (file)
@@ -685,9 +685,7 @@ Returns:
   EFI_STATUS                        Status;\r
   EFI_EBC_SIMPLE_DEBUGGER_PROTOCOL  *EbcSimpleDebugger;\r
 \r
-  //\r
-  // end DEBUG_CODE\r
-  //\r
+  mVmPtr            = VmPtr;\r
   EbcSimpleDebugger = NULL;\r
   Status            = EFI_SUCCESS;\r
   StackCorrupted    = 0;\r
@@ -704,7 +702,7 @@ Returns:
   //\r
   // Try to get the debug support for EBC\r
   //\r
-  DEBUG_CODE (\r
+  DEBUG_CODE_BEGIN ();\r
     Status = gBS->LocateProtocol (\r
                     &mEbcSimpleDebuggerProtocolGuid,\r
                     NULL,\r
@@ -713,7 +711,7 @@ Returns:
     if (EFI_ERROR (Status)) {\r
       EbcSimpleDebugger = NULL;\r
     }\r
-  );\r
+  DEBUG_CODE_END ();\r
 \r
   //\r
   // Save the start IP for debug. For example, if we take an exception we\r
@@ -731,11 +729,11 @@ Returns:
     //\r
     // If we've found a simple debugger protocol, call it\r
     //\r
-    DEBUG_CODE (\r
+    DEBUG_CODE_BEGIN ();\r
       if (EbcSimpleDebugger != NULL) {\r
         EbcSimpleDebugger->Debugger (EbcSimpleDebugger, VmPtr);\r
       }\r
-    );\r
+    DEBUG_CODE_END ();\r
 \r
     //\r
     // Verify the opcode is in range. Otherwise generate an exception.\r
@@ -782,6 +780,7 @@ Returns:
   }\r
 \r
 Done:\r
+  mVmPtr          = NULL;\r
   return Status;\r
 }\r
 \r
@@ -2945,10 +2944,8 @@ Instruction syntax:
 \r
 --*/\r
 {\r
-  INT64 ResultHigh;\r
-\r
   if (*VmPtr->Ip & DATAMANIP_M_64) {\r
-    return MulS64x64 (Op1, Op2, &ResultHigh);\r
+    return MultS64x64 ((INT64)Op1, (INT64)Op2);\r
   } else {\r
     return (UINT64) ((INT64) ((INT32) Op1 * (INT32) Op2));\r
   }\r
@@ -2979,9 +2976,8 @@ Instruction syntax:
 \r
 --*/\r
 {\r
-  INT64 ResultHigh;\r
   if (*VmPtr->Ip & DATAMANIP_M_64) {\r
-    return MulU64x64 (Op1, Op2, (UINT64 *)&ResultHigh);\r
+    return MultU64x64 (Op1, Op2);\r
   } else {\r
     return (UINT64) ((UINT32) Op1 * (UINT32) Op2);\r
   }\r
@@ -3014,7 +3010,6 @@ Instruction syntax:
 --*/\r
 {\r
   INT64   Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3029,7 +3024,7 @@ Instruction syntax:
     return 0;\r
   } else {\r
     if (*VmPtr->Ip & DATAMANIP_M_64) {\r
-      return (UINT64) (DivS64x64 (Op1, Op2, &Remainder, &Error));\r
+      return (UINT64) (DivS64x64Remainder (Op1, Op2, &Remainder));\r
     } else {\r
       return (UINT64) ((INT64) ((INT32) Op1 / (INT32) Op2));\r
     }\r
@@ -3062,7 +3057,6 @@ Instruction syntax:
 --*/\r
 {\r
   UINT64  Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3079,7 +3073,7 @@ Instruction syntax:
     // Get the destination register\r
     //\r
     if (*VmPtr->Ip & DATAMANIP_M_64) {\r
-      return (UINT64) (DivU64x64 (Op1, Op2, &Remainder, &Error));\r
+      return (UINT64) (DivU64x64Remainder ((INT64)Op1, (INT64)Op2, &Remainder));\r
     } else {\r
       return (UINT64) ((UINT32) Op1 / (UINT32) Op2);\r
     }\r
@@ -3112,7 +3106,6 @@ Instruction syntax:
 --*/\r
 {\r
   INT64   Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3125,7 +3118,7 @@ Instruction syntax:
       );\r
     return 0;\r
   } else {\r
-    DivS64x64 ((INT64) Op1, (INT64) Op2, &Remainder, &Error);\r
+    DivS64x64Remainder ((INT64)Op1, (INT64)Op2, &Remainder);\r
     return Remainder;\r
   }\r
 }\r
@@ -3156,7 +3149,6 @@ Instruction syntax:
 --*/\r
 {\r
   UINT64  Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3169,7 +3161,7 @@ Instruction syntax:
       );\r
     return 0;\r
   } else {\r
-    DivU64x64 (Op1, Op2, &Remainder, &Error);\r
+    DivU64x64Remainder (Op1, Op2, &Remainder);\r
     return Remainder;\r
   }\r
 }\r
@@ -3285,7 +3277,7 @@ Instruction syntax:
 --*/\r
 {\r
   if (*VmPtr->Ip & DATAMANIP_M_64) {\r
-    return LeftShiftU64 (Op1, Op2);\r
+    return LShiftU64 (Op1, (UINTN)Op2);\r
   } else {\r
     return (UINT64) ((UINT32) ((UINT32) Op1 << (UINT32) Op2));\r
   }\r
@@ -3317,7 +3309,7 @@ Instruction syntax:
 --*/\r
 {\r
   if (*VmPtr->Ip & DATAMANIP_M_64) {\r
-    return RightShiftU64 (Op1, Op2);\r
+    return RShiftU64 (Op1, (UINTN)Op2);\r
   } else {\r
     return (UINT64) ((UINT32) Op1 >> (UINT32) Op2);\r
   }\r
@@ -3349,7 +3341,7 @@ Instruction syntax:
 --*/\r
 {\r
   if (*VmPtr->Ip & DATAMANIP_M_64) {\r
-    return ARightShift64 (Op1, Op2);\r
+    return ARShiftU64 (Op1, (UINTN)Op2);\r
   } else {\r
     return (UINT64) ((INT64) ((INT32) Op1 >> (UINT32) Op2));\r
   }\r
@@ -3953,7 +3945,6 @@ Returns:
 --*/\r
 {\r
   UINT64  Index;\r
-  UINT64  Remainder;\r
   INT64   Offset;\r
   INT64   C;\r
   INT64   N;\r
@@ -3965,17 +3956,17 @@ Returns:
   //\r
   // Get the mask for N. First get the number of bits from the index.\r
   //\r
-  NBits = RightShiftU64 ((Index & 0x7000000000000000ULL), 60);\r
+  NBits = RShiftU64 ((Index & 0x7000000000000000ULL), 60);\r
 \r
   //\r
   // Scale it for 64-bit indexes (multiply by 8 by shifting left 3)\r
   //\r
-  NBits = LeftShiftU64 (NBits, 3);\r
+  NBits = LShiftU64 ((UINT64)NBits, 3);\r
 \r
   //\r
   // Now using the number of bits, create a mask.\r
   //\r
-  Mask = (LeftShiftU64 ((UINT64)~0, (UINT64) NBits));\r
+  Mask = (LShiftU64 ((UINT64)~0, (UINTN)NBits));\r
 \r
   //\r
   // Now using the mask, extract N from the lower bits of the index.\r
@@ -3985,15 +3976,15 @@ Returns:
   //\r
   // Now compute C\r
   //\r
-  C       = ARightShift64 (((Index &~0xF000000000000000ULL) & Mask), (UINTN) NBits);\r
+  C       = ARShiftU64 (((Index &~0xF000000000000000ULL) & Mask), (UINTN)NBits);\r
 \r
-  Offset  = MulU64x64 (N, sizeof (UINTN), &Remainder) + C;\r
+  Offset  = MultU64x64 (N, sizeof (UINTN)) + C;\r
 \r
   //\r
   // Now set the sign\r
   //\r
   if (Index & 0x8000000000000000ULL) {\r
-    Offset = MulS64x64 (Offset, -1, (INT64 *)&Index);\r
+    Offset = MultS64x64 (Offset, -1);\r
   }\r
 \r
   return Offset;\r