summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg/Universal
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2016-03-16 13:54:01 +0100
committerLaszlo Ersek <lersek@redhat.com>2016-03-16 14:01:58 +0100
commit25896aa391d04efecbee65bdf41a2de3660da440 (patch)
tree90775d9a1d929924959ee4bfb6575dee83dce989 /MdeModulePkg/Universal
parent2939c778a3a3f5463d97339f4f3dbf5afb572a5e (diff)
downloadedk2-25896aa391d04efecbee65bdf41a2de3660da440.tar.gz
edk2-25896aa391d04efecbee65bdf41a2de3660da440.tar.bz2
edk2-25896aa391d04efecbee65bdf41a2de3660da440.zip
MdeModulePkg: ConSplitterDxe: use U64 mult/div wrappers in AbsPtr scaling
This is an emergency fix for UINT64 multiplications and divisions not being done with the right BaseLib functions -- they break Ia32 builds. Fixes: 30ed3422ab2de03abf7c1433ebb482f6e5e16f45 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Diffstat (limited to 'MdeModulePkg/Universal')
-rw-r--r--MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c b/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
index af90d5e5e4..0d6808197b 100644
--- a/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
+++ b/MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
@@ -4156,13 +4156,34 @@ ConSplitterAbsolutePointerGetState (
// Rescale to Con Splitter virtual Absolute Pointer's resolution.
//
if (!(MinX == 0 && MaxX == 0)) {
- State->CurrentX = VirtualMinX + (CurrentState.CurrentX * (VirtualMaxX - VirtualMinX)) / (MaxX - MinX);
+ State->CurrentX = VirtualMinX + DivU64x64Remainder (
+ MultU64x64 (
+ CurrentState.CurrentX,
+ VirtualMaxX - VirtualMinX
+ ),
+ MaxX - MinX,
+ NULL
+ );
}
if (!(MinY == 0 && MaxY == 0)) {
- State->CurrentY = VirtualMinY + (CurrentState.CurrentY * (VirtualMaxY - VirtualMinY)) / (MaxY - MinY);
+ State->CurrentY = VirtualMinY + DivU64x64Remainder (
+ MultU64x64 (
+ CurrentState.CurrentY,
+ VirtualMaxY - VirtualMinY
+ ),
+ MaxY - MinY,
+ NULL
+ );
}
if (!(MinZ == 0 && MaxZ == 0)) {
- State->CurrentZ = VirtualMinZ + (CurrentState.CurrentZ * (VirtualMaxZ - VirtualMinZ)) / (MaxZ - MinZ);
+ State->CurrentZ = VirtualMinZ + DivU64x64Remainder (
+ MultU64x64 (
+ CurrentState.CurrentZ,
+ VirtualMaxZ - VirtualMinZ
+ ),
+ MaxZ - MinZ,
+ NULL
+ );
}
} else if (Status == EFI_DEVICE_ERROR) {