mirror of
https://github.com/holub/mame
synced 2025-05-27 16:21:34 +03:00

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.
51 lines
1.5 KiB
C
51 lines
1.5 KiB
C
/***************************************************************************
|
|
|
|
mips3fe.h
|
|
|
|
Front-end for MIPS3 recompiler
|
|
|
|
Copyright Aaron Giles
|
|
Released for general non-commercial use under the MAME license
|
|
Visit http://mamedev.org for licensing and usage restrictions.
|
|
|
|
***************************************************************************/
|
|
|
|
#ifndef __MIPS3FE_H__
|
|
#define __MIPS3FE_H__
|
|
|
|
#include "cpu/drcfe.h"
|
|
|
|
|
|
/***************************************************************************
|
|
CONSTANTS
|
|
***************************************************************************/
|
|
|
|
/* register flags */
|
|
#define REGFLAG_R(n) (((n) == 0) ? 0 : ((UINT64)1 << (n)))
|
|
#define REGFLAG_LO (REGFLAG_R(REG_LO))
|
|
#define REGFLAG_HI (REGFLAG_R(REG_HI))
|
|
#define REGFLAG_CPR1(n) ((UINT64)1 << (n))
|
|
#define REGFLAG_FCC (REGFLAG_CPR1(32))
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
CONSTANTS
|
|
***************************************************************************/
|
|
|
|
/* this defines a branch targetpc that is dynamic at runtime */
|
|
#define BRANCH_TARGET_DYNAMIC (~0)
|
|
|
|
|
|
/* opcode branch flags */
|
|
#define OPFLAG_IS_UNCONDITIONAL_BRANCH 0x00000001 /* instruction is unconditional branch */
|
|
|
|
|
|
/***************************************************************************
|
|
FUNCTION PROTOTYPES
|
|
***************************************************************************/
|
|
|
|
int mips3fe_describe(void *param, opcode_desc *desc);
|
|
|
|
#endif
|