65a4e80308
- xserver-1.3.0-domain-obiwan.patch: Fix a PCI domain off-by-one. (#235861) - xserver-1.3.0-x86emu-imul-int64.patch: Fix imul in x86emu. (#235861)
29 lines
915 B
Diff
29 lines
915 B
Diff
commit 2fe74ef339c3a4902ae8214f5a0454662895422c
|
|
Author: Matthias Hopf <mhopf@suse.de>
|
|
Date: Thu Mar 15 16:56:01 2007 +0100
|
|
|
|
Fix calculations in x86 emulator for the long long case (Andreas Schwab).
|
|
|
|
diff --git a/hw/xfree86/x86emu/prim_ops.c b/hw/xfree86/x86emu/prim_ops.c
|
|
index 461e09e..b9e7257 100644
|
|
--- a/hw/xfree86/x86emu/prim_ops.c
|
|
+++ b/hw/xfree86/x86emu/prim_ops.c
|
|
@@ -2082,7 +2082,7 @@ Implements the IMUL instruction and side effects.
|
|
void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s)
|
|
{
|
|
#ifdef __HAS_LONG_LONG__
|
|
- s64 res = (s32)d * (s32)s;
|
|
+ s64 res = (s64)(s32)d * (s32)s;
|
|
|
|
*res_lo = (u32)res;
|
|
*res_hi = (u32)(res >> 32);
|
|
@@ -2174,7 +2174,7 @@ Implements the MUL instruction and side effects.
|
|
void mul_long(u32 s)
|
|
{
|
|
#ifdef __HAS_LONG_LONG__
|
|
- u64 res = (u32)M.x86.R_EAX * (u32)s;
|
|
+ u64 res = (u64)M.x86.R_EAX * s;
|
|
|
|
M.x86.R_EAX = (u32)res;
|
|
M.x86.R_EDX = (u32)(res >> 32);
|