From b735b4be6c1fedaf1830c802e1ca4a0df305dad5 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Sun, 11 May 2008 22:15:13 +0000 Subject: New universal dynamic recompiler system. The central module is drcuml.c, which defines a universal machine language syntax that can be generated by a frontend recompiler and then retargeted via a generic backend interface to any of a number of different architectures. A disassembler for the UML is also included to allow examination of the generated UML code. Currently supported backend architectures include 32-bit x86, 64-bit x86, and a platform-neutral interpreted C backend that can be used as a fallback for platforms without native support. The C backend also performs additional validation to ensure assumptions are met. Along with the new architecture is a new MIPS III/IV recompiler frontend. This frontend has been rewritten from the old x64-specific recompiler to generate UML opcodes instead. This means that the single recompiler can be used to target multiple backend architectures and should in theory produce identical results across all of them. The old 32-bit and 64-bit MIPS recompilers are now officially retired. The new system provides similar performance (within 5% generally) to the old system and has similar compatibility. The only currently known issues are some problems with the two Gauntlet 3D games. --- src/emu/cpu/mips/mips3fe.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/emu/cpu/mips/mips3fe.c') diff --git a/src/emu/cpu/mips/mips3fe.c b/src/emu/cpu/mips/mips3fe.c index 5bef908d7ac..eadf1b1e5e4 100644 --- a/src/emu/cpu/mips/mips3fe.c +++ b/src/emu/cpu/mips/mips3fe.c @@ -5,7 +5,7 @@ Front-end for MIPS3 recompiler Copyright Aaron Giles - Released for general use under the MAME license + Released for general non-commercial use under the MAME license Visit http://mamedev.org for licensing and usage restrictions. ***************************************************************************/ @@ -465,6 +465,13 @@ static int describe_instruction_cop0(mips3_state *mips, UINT32 op, opcode_desc * { case 0x00: /* MFCz */ case 0x01: /* DMFCz */ + if (RDREG == COP0_Count) + desc->cycles += MIPS3_COUNT_READ_CYCLES; + if (RDREG == COP0_Cause) + desc->cycles += MIPS3_CAUSE_READ_CYCLES; + desc->gpr.modified |= REGFLAG_R(RTREG); + return TRUE; + case 0x02: /* CFCz */ desc->gpr.modified |= REGFLAG_R(RTREG); return TRUE; -- cgit v1.2.3-70-g09d2