Mercurial > repos > blastem
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);