From e89297fe6c39b0112db1f84c04b8553731b3ac9b Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 2 May 2015 19:22:03 +0300 Subject: [PATCH] More compatible/cycle-exact FBcc and FDBcc fix. --- fpp.cpp | 5 ++++- gencpu.cpp | 10 ++++++++++ include/newcpu.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/fpp.cpp b/fpp.cpp index cc6cfc75..ff254d55 100644 --- a/fpp.cpp +++ b/fpp.cpp @@ -1886,8 +1886,10 @@ void fpuop_dbcc (uae_u32 opcode, uae_u16 extra) m68k_dreg (regs, reg) = ((m68k_dreg (regs, reg) & 0xffff0000) | (((m68k_dreg (regs, reg) & 0xffff) - 1) & 0xffff)); - if ((m68k_dreg (regs, reg) & 0xffff) != 0xffff) + if ((m68k_dreg (regs, reg) & 0xffff) != 0xffff) { m68k_setpc (pc + disp); + regs.fp_branch = true; + } } } @@ -1971,6 +1973,7 @@ void fpuop_bcc (uae_u32 opcode, uaecptr oldpc, uae_u32 extra) if ((opcode & 0x40) == 0) extra = (uae_s32) (uae_s16) extra; m68k_setpc (oldpc + extra); + regs.fp_branch = true; } } diff --git a/gencpu.cpp b/gencpu.cpp index 5a1feb8a..65ead649 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -5132,6 +5132,11 @@ bccl_not68020: printf ("\tfpuop_dbcc (opcode, extra);\n"); if (using_prefetch || using_prefetch_020) { printf ("\tif (regs.fp_exception) goto %s;\n", endlabelstr); + printf ("\tif (regs.fp_branch) {\n"); + printf ("\t\tregs.fp_branch = false;\n"); + printf ("\t\tfill_prefetch();\n"); + printf ("\t\tgoto %s;\n", endlabelstr); + printf ("\t}\n"); need_endlabel = 1; } break; @@ -5168,6 +5173,11 @@ bccl_not68020: printf ("\tfpuop_bcc (opcode, pc,extra);\n"); if (using_prefetch || using_prefetch_020) { printf ("\tif (regs.fp_exception) goto %s;\n", endlabelstr); + printf ("\tif (regs.fp_branch) {\n"); + printf ("\t\tregs.fp_branch = false;\n"); + printf ("\t\tfill_prefetch();\n"); + printf ("\t\tgoto %s;\n", endlabelstr); + printf ("\t}\n"); need_endlabel = 1; } break; diff --git a/include/newcpu.h b/include/newcpu.h index 5f9232fb..3ee191a5 100644 --- a/include/newcpu.h +++ b/include/newcpu.h @@ -180,6 +180,7 @@ struct regstruct uae_u16 exp_opcode, exp_extra, exp_type; uae_u16 exp_size; bool fp_exception; + bool fp_branch; #endif #ifndef CPUEMU_68000_ONLY uae_u32 cacr, caar; -- 2.47.3