]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/Ebc/Dxe/EbcExecute.c
I fixed following bugs in EDKII.
[mirror_edk2.git] / EdkModulePkg / Universal / Ebc / Dxe / EbcExecute.c
index a672a794e04a010c9f4a03fb93e00e2b27a020a6..70db1574bf3b64c8491909be654f36f427afb3af 100644 (file)
@@ -685,6 +685,7 @@ Returns:
   EFI_STATUS                        Status;\r
   EFI_EBC_SIMPLE_DEBUGGER_PROTOCOL  *EbcSimpleDebugger;\r
 \r
+  mVmPtr            = VmPtr;\r
   EbcSimpleDebugger = NULL;\r
   Status            = EFI_SUCCESS;\r
   StackCorrupted    = 0;\r
@@ -779,6 +780,7 @@ Returns:
   }\r
 \r
 Done:\r
+  mVmPtr          = NULL;\r
   return Status;\r
 }\r
 \r
@@ -2942,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
@@ -2976,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
@@ -3011,7 +3010,6 @@ Instruction syntax:
 --*/\r
 {\r
   INT64   Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3026,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
@@ -3059,7 +3057,6 @@ Instruction syntax:
 --*/\r
 {\r
   UINT64  Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3076,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
@@ -3109,7 +3106,6 @@ Instruction syntax:
 --*/\r
 {\r
   INT64   Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3122,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
@@ -3153,7 +3149,6 @@ Instruction syntax:
 --*/\r
 {\r
   UINT64  Remainder;\r
-  UINT32  Error;\r
 \r
   //\r
   // Check for divide-by-0\r
@@ -3166,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
@@ -3282,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
@@ -3314,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
@@ -3346,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
@@ -3950,7 +3945,6 @@ Returns:
 --*/\r
 {\r
   UINT64  Index;\r
-  UINT64  Remainder;\r
   INT64   Offset;\r
   INT64   C;\r
   INT64   N;\r
@@ -3962,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
@@ -3982,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