changeset 59:32650c77008a

ecx was getting clobbered before the relevant temp value was used in some cases during memory reads
author Mike Pavone <pavone@retrodev.com>
date Tue, 18 Dec 2012 22:56:04 -0800
parents a6a19c45d358
children 6ffea8607730
files m68k_to_x86.c runtime.S
diffstat 2 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/m68k_to_x86.c	Tue Dec 18 22:20:25 2012 -0800
+++ b/m68k_to_x86.c	Tue Dec 18 22:56:04 2012 -0800
@@ -159,7 +159,6 @@
 			out = cycles(out, BUS);
 		}
 		out = mov_ir(out, inst->src.params.immed, SCRATCH1, SZ_D);
-		out = check_cycles(out);
 		switch (inst->extra.size)
 		{
 		case OPSIZE_BYTE:
@@ -461,7 +460,6 @@
 		dst = cmp_ir(dst, 0, flags_reg, inst->extra.size);
 		dst = setcc_r(dst, CC_Z, FLAG_Z);
 		dst = setcc_r(dst, CC_S, FLAG_N);
-		dst = check_cycles(dst);
 		switch (inst->extra.size)
 		{
 		case OPSIZE_BYTE:
--- a/runtime.S	Tue Dec 18 22:20:25 2012 -0800
+++ b/runtime.S	Tue Dec 18 22:56:04 2012 -0800
@@ -153,7 +153,12 @@
 inccycles:
 	add $4, %rax
 	cmp %rbp, %rax
-	jge handle_cycle_limit
+	jge do_limit
+	ret
+do_limit:
+	push %rcx
+	call handle_cycle_limit
+	pop %rcx
 	ret
 	
 	.global m68k_read_long_scratch1