Mercurial > repos > blastem
changeset 157:301470eb870b
Fix rotate instructions that use a register source. Fix ROXL/ROXR to actually use the appropriate x86 instruction.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 04 Jan 2013 23:52:20 -0800 |
parents | 3900cfde9dbb |
children | a2ab895d9708 |
files | m68k_to_x86.c |
diffstat | 1 files changed, 20 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/m68k_to_x86.c Fri Jan 04 23:25:23 2013 -0800 +++ b/m68k_to_x86.c Fri Jan 04 23:52:20 2013 -0800 @@ -2793,7 +2793,7 @@ } dst = and_ir(dst, 63, SCRATCH1, SZ_D); zero_off = dst+1; - dst = jcc(dst, CC_NZ, dst+2); + dst = jcc(dst, CC_Z, dst+2); dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D); dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D); dst = cmp_ir(dst, 32, SCRATCH1, SZ_B); @@ -2855,9 +2855,9 @@ //Memory rotate dst = bt_irdisp8(dst, 0, CONTEXT, 0, SZ_B); if (inst->op == M68K_ROXL) { - dst = rol_ir(dst, 1, dst_op.base, inst->extra.size); + dst = rcl_ir(dst, 1, dst_op.base, inst->extra.size); } else { - dst = ror_ir(dst, 1, dst_op.base, inst->extra.size); + dst = rcr_ir(dst, 1, dst_op.base, inst->extra.size); } dst = setcc_r(dst, CC_C, FLAG_C); dst = cmp_ir(dst, 0, dst_op.base, inst->extra.size); @@ -2870,15 +2870,15 @@ dst = bt_irdisp8(dst, 0, CONTEXT, 0, SZ_B); if (dst_op.mode == MODE_REG_DIRECT) { if (inst->op == M68K_ROXL) { - dst = rol_ir(dst, src_op.disp, dst_op.base, inst->extra.size); + dst = rcl_ir(dst, src_op.disp, dst_op.base, inst->extra.size); } else { - dst = ror_ir(dst, src_op.disp, dst_op.base, inst->extra.size); + dst = rcr_ir(dst, src_op.disp, dst_op.base, inst->extra.size); } } else { if (inst->op == M68K_ROXL) { - dst = rol_irdisp8(dst, src_op.disp, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcl_irdisp8(dst, src_op.disp, dst_op.base, dst_op.disp, inst->extra.size); } else { - dst = ror_irdisp8(dst, src_op.disp, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcr_irdisp8(dst, src_op.disp, dst_op.base, dst_op.disp, inst->extra.size); } } dst = setcc_r(dst, CC_C, FLAG_C); @@ -2892,7 +2892,7 @@ } dst = and_ir(dst, 63, SCRATCH1, SZ_D); zero_off = dst+1; - dst = jcc(dst, CC_NZ, dst+2); + dst = jcc(dst, CC_Z, dst+2); dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D); dst = add_rr(dst, SCRATCH1, CYCLES, SZ_D); dst = cmp_ir(dst, 32, SCRATCH1, SZ_B); @@ -2901,19 +2901,19 @@ dst = bt_irdisp8(dst, 0, CONTEXT, 0, SZ_B); if (dst_op.mode == MODE_REG_DIRECT) { if (inst->op == M68K_ROXL) { - dst = rol_ir(dst, 31, dst_op.base, inst->extra.size); - dst = rol_ir(dst, 1, dst_op.base, inst->extra.size); + dst = rcl_ir(dst, 31, dst_op.base, inst->extra.size); + dst = rcl_ir(dst, 1, dst_op.base, inst->extra.size); } else { - dst = ror_ir(dst, 31, dst_op.base, inst->extra.size); - dst = ror_ir(dst, 1, dst_op.base, inst->extra.size); + dst = rcr_ir(dst, 31, dst_op.base, inst->extra.size); + dst = rcr_ir(dst, 1, dst_op.base, inst->extra.size); } } else { if (inst->op == M68K_ROXL) { - dst = rol_irdisp8(dst, 31, dst_op.base, dst_op.disp, inst->extra.size); - dst = rol_irdisp8(dst, 1, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcl_irdisp8(dst, 31, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcl_irdisp8(dst, 1, dst_op.base, dst_op.disp, inst->extra.size); } else { - dst = ror_irdisp8(dst, 31, dst_op.base, dst_op.disp, inst->extra.size); - dst = ror_irdisp8(dst, 1, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcr_irdisp8(dst, 31, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcr_irdisp8(dst, 1, dst_op.base, dst_op.disp, inst->extra.size); } } dst = sub_ir(dst, 32, SCRATCH1, SZ_B); @@ -2921,15 +2921,15 @@ dst = bt_irdisp8(dst, 0, CONTEXT, 0, SZ_B); if (dst_op.mode == MODE_REG_DIRECT) { if (inst->op == M68K_ROXL) { - dst = rol_clr(dst, dst_op.base, inst->extra.size); + dst = rcl_clr(dst, dst_op.base, inst->extra.size); } else { - dst = ror_clr(dst, dst_op.base, inst->extra.size); + dst = rcr_clr(dst, dst_op.base, inst->extra.size); } } else { if (inst->op == M68K_ROXL) { - dst = rol_clrdisp8(dst, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcl_clrdisp8(dst, dst_op.base, dst_op.disp, inst->extra.size); } else { - dst = ror_clrdisp8(dst, dst_op.base, dst_op.disp, inst->extra.size); + dst = rcr_clrdisp8(dst, dst_op.base, dst_op.disp, inst->extra.size); } } dst = setcc_r(dst, CC_C, FLAG_C);