diff options
author | Matthias Hopf <mhopf@suse.de> | 2007-03-15 16:56:01 +0100 |
---|---|---|
committer | Matthias Hopf <mhopf@suse.de> | 2007-03-15 16:56:01 +0100 |
commit | 2fe74ef339c3a4902ae8214f5a0454662895422c (patch) | |
tree | df2763a2e895defcc14a23f0efe48f3beb30537e | |
parent | ae75019ccf1edac9e8be31b6a96293624f672ccb (diff) |
Fix calculations in x86 emulator for the long long case (Andreas Schwab).
-rw-r--r-- | hw/xfree86/x86emu/prim_ops.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/hw/xfree86/x86emu/prim_ops.c b/hw/xfree86/x86emu/prim_ops.c index 461e09e3e..b9e7257ca 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); |