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