summaryrefslogtreecommitdiff
path: root/m68k_core_x86.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2014-03-04 22:24:08 -0800
committerMichael Pavone <pavone@retrodev.com>2014-03-04 22:24:08 -0800
commitf0bf6f786b0ce54f005c2749cb2c4d11e66b790d (patch)
tree209f4edfdff7b83b71ea9ffd8dec134307f452a0 /m68k_core_x86.c
parent3989f4f448a02d0b573f1124bccfa75205124325 (diff)
Use translate_m68k_unary for SWAP in 68K core
Diffstat (limited to 'm68k_core_x86.c')
-rw-r--r--m68k_core_x86.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/m68k_core_x86.c b/m68k_core_x86.c
index 5715171..288d97e 100644
--- a/m68k_core_x86.c
+++ b/m68k_core_x86.c
@@ -1453,6 +1453,7 @@ void op_r(code_info *code, m68kinst *inst, uint8_t dst, uint8_t size)
case M68K_ROR: ror_clr(code, dst, size); break;
case M68K_ROXL: rcl_clr(code, dst, size); break;
case M68K_ROXR: rcr_clr(code, dst, size); break;
+ case M68K_SWAP: rol_ir(code, 16, dst, SZ_D); cmp_ir(code, 0, dst, SZ_D); break;
case M68K_TST: cmp_ir(code, 0, dst, size); break;
}
}
@@ -1467,6 +1468,7 @@ void op_rdisp(code_info *code, m68kinst *inst, uint8_t dst, int32_t disp, uint8_
case M68K_ROR: ror_clrdisp(code, dst, disp, size); break;
case M68K_ROXL: rcl_clrdisp(code, dst, disp, size); break;
case M68K_ROXR: rcr_clrdisp(code, dst, disp, size); break;
+ case M68K_SWAP: rol_irdisp(code, 16, dst, disp, SZ_D); cmp_irdisp(code, 0, dst, disp, SZ_D); break;
case M68K_TST: cmp_irdisp(code, 0, dst, disp, size); break;
}
}
@@ -2323,24 +2325,13 @@ void translate_m68k(m68k_options * opts, m68kinst * inst)
jcc(code, CC_C, loop_top);
break;
}
- case M68K_SWAP:
- cycles(&opts->gen, BUS);
- if (src_op.mode == MODE_REG_DIRECT) {
- rol_ir(code, 16, src_op.base, SZ_D);
- cmp_ir(code, 0, src_op.base, SZ_D);
- } else{
- rol_irdisp(code, 16, src_op.base, src_op.disp, SZ_D);
- cmp_irdisp(code, 0, src_op.base, src_op.disp, SZ_D);
- }
-
- update_flags(opts, N|Z|V0|C0);
- break;
//case M68K_TAS:
case M68K_TRAP:
translate_m68k_trap(opts, inst);
break;
//case M68K_TRAPV:
case M68K_TST:
+ case M68K_SWAP:
translate_m68k_unary(opts, inst, N|Z|V0|C0, &src_op);
break;
default: