changeset 223:17534fb7c4f5

Fix muls with a negative immediate source.
author Mike Pavone <pavone@retrodev.com>
date Sat, 20 Apr 2013 17:41:07 -0700
parents b52f81d7cad0
children f7ff02eeec2f
files m68k_to_x86.c
diffstat 1 files changed, 1 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/m68k_to_x86.c	Sat Apr 20 17:32:34 2013 -0700
+++ b/m68k_to_x86.c	Sat Apr 20 17:41:07 2013 -0700
@@ -3303,8 +3303,7 @@
 	case M68K_MULU:
 		dst = cycles(dst, 70); //TODO: Calculate the actual value based on the value of the <ea> parameter
 		if (src_op.mode == MODE_IMMED) {
-			//immediate value should already be sign extended to 32-bits
-			dst = mov_ir(dst, inst->op == M68K_MULU ? (src_op.disp & 0xFFFF) : src_op.disp, SCRATCH1, SZ_D);
+			dst = mov_ir(dst, inst->op == M68K_MULU ? (src_op.disp & 0xFFFF) : ((src_op.disp & 0x8000) ? src_op.disp | 0xFFFF0000 : src_op.disp), SCRATCH1, SZ_D);
 		} else if (src_op.mode == MODE_REG_DIRECT) {
 			if (inst->op == M68K_MULS) {
 				dst = movsx_rr(dst, src_op.base, SCRATCH1, SZ_W, SZ_D);