comparison m68k_to_x86.c @ 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 71f6b76639db
children 7348057e7a8c
comparison
equal deleted inserted replaced
222:b52f81d7cad0 223:17534fb7c4f5
3301 //case M68K_MOVEP: 3301 //case M68K_MOVEP:
3302 case M68K_MULS: 3302 case M68K_MULS:
3303 case M68K_MULU: 3303 case M68K_MULU:
3304 dst = cycles(dst, 70); //TODO: Calculate the actual value based on the value of the <ea> parameter 3304 dst = cycles(dst, 70); //TODO: Calculate the actual value based on the value of the <ea> parameter
3305 if (src_op.mode == MODE_IMMED) { 3305 if (src_op.mode == MODE_IMMED) {
3306 //immediate value should already be sign extended to 32-bits 3306 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);
3307 dst = mov_ir(dst, inst->op == M68K_MULU ? (src_op.disp & 0xFFFF) : src_op.disp, SCRATCH1, SZ_D);
3308 } else if (src_op.mode == MODE_REG_DIRECT) { 3307 } else if (src_op.mode == MODE_REG_DIRECT) {
3309 if (inst->op == M68K_MULS) { 3308 if (inst->op == M68K_MULS) {
3310 dst = movsx_rr(dst, src_op.base, SCRATCH1, SZ_W, SZ_D); 3309 dst = movsx_rr(dst, src_op.base, SCRATCH1, SZ_W, SZ_D);
3311 } else { 3310 } else {
3312 dst = movzx_rr(dst, src_op.base, SCRATCH1, SZ_W, SZ_D); 3311 dst = movzx_rr(dst, src_op.base, SCRATCH1, SZ_W, SZ_D);