changeset 578:ec1365fb2954

Use translate_m68k_unary for SWAP in 68K core
author Michael Pavone <pavone@retrodev.com>
date Tue, 04 Mar 2014 22:24:08 -0800
parents 0f367276a80c
children 0031cd308a31
files m68k_core_x86.c
diffstat 1 files changed, 3 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/m68k_core_x86.c	Tue Mar 04 22:12:43 2014 -0800
+++ b/m68k_core_x86.c	Tue Mar 04 22:24:08 2014 -0800
@@ -1453,6 +1453,7 @@
 	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 @@
 	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 @@
 		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: