summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/mips/mips3drc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/mips/mips3drc.c')
-rw-r--r--src/emu/cpu/mips/mips3drc.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/emu/cpu/mips/mips3drc.c b/src/emu/cpu/mips/mips3drc.c
index 70c31df2220..22af8e16063 100644
--- a/src/emu/cpu/mips/mips3drc.c
+++ b/src/emu/cpu/mips/mips3drc.c
@@ -150,7 +150,7 @@ inline void mips3_device::save_fast_iregs(drcuml_block *block)
void mips3_device::mips3drc_set_options(UINT32 options)
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
m_drcoptions = options;
}
@@ -196,7 +196,7 @@ void mips3_device::add_fastram(offs_t start, offs_t end, UINT8 readonly, void *b
void mips3_device::mips3drc_add_hotspot(offs_t pc, UINT32 opcode, UINT32 cycles)
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
if (m_hotspot_select < ARRAY_LENGTH(m_hotspot))
{
m_hotspot[m_hotspot_select].pc = pc;
@@ -778,7 +778,7 @@ void mips3_device::static_generate_exception(UINT8 exception, int recover, const
/* choose our target PC */
UML_ADD(block, I0, I3, 0xbfc00200); // add i0,i3,0xbfc00200
- UML_TEST(block, I1, SR_BEV); // test i1,SR_BEV
+ UML_TEST(block, CPR032(COP0_Status), SR_BEV); // test CPR032(COP0_Status),SR_BEV
UML_JMPc(block, COND_NZ, skip); // jnz <skip>
UML_ADD(block, I0, I3, 0x80000000); // add i0,i3,0x80000000,z
UML_LABEL(block, skip); // <skip>:
@@ -1095,12 +1095,12 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
if (!(seqhead->flags & OPFLAG_VIRTUAL_NOOP))
{
UINT32 sum = seqhead->opptr.l[0];
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
if (seqhead->delay.first() != NULL && seqhead->physpc != seqhead->delay.first()->physpc)
{
- base = m_direct->read_decrypted_ptr(seqhead->delay.first()->physpc);
+ base = m_direct->read_ptr(seqhead->delay.first()->physpc);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
@@ -1120,20 +1120,20 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
UML_CMP(block, I0, curdesc->opptr.l[0]); // cmp i0,opptr[0]
UML_EXHc(block, COND_NE, *m_nocode, epc(seqhead)); // exne nocode,seqhead->pc
}
#else
UINT32 sum = 0;
- void *base = m_direct->read_decrypted_ptr(seqhead->physpc);
+ void *base = m_direct->read_ptr(seqhead->physpc);
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
sum += seqhead->opptr.l[0];
for (curdesc = seqhead->next(); curdesc != seqlast->next(); curdesc = curdesc->next())
if (!(curdesc->flags & OPFLAG_VIRTUAL_NOOP))
{
- base = m_direct->read_decrypted_ptr(curdesc->physpc);
+ base = m_direct->read_ptr(curdesc->physpc);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
@@ -1141,7 +1141,7 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
if (curdesc->delay.first() != NULL && (curdesc == seqlast || (curdesc->next() != NULL && curdesc->next()->physpc != curdesc->delay.first()->physpc)))
{
- base = m_direct->read_decrypted_ptr(curdesc->delay.first()->physpc);
+ base = m_direct->read_ptr(curdesc->delay.first()->physpc);
assert(base != NULL);
UML_LOAD(block, I1, base, 0, SIZE_DWORD, SCALE_x4); // load i1,base,dword
UML_ADD(block, I0, I0, I1); // add i0,i0,i1
@@ -2791,7 +2791,7 @@ int mips3_device::generate_cop1(drcuml_block *block, compiler_state *compiler, c
else /* NEG.D - MIPS I */
{
UML_FDNEG(block, FPR64(FDREG), FPR64(FSREG)); // fdneg <fdreg>,<fsreg>
- UML_CMP(block, FPR64(FSREG), 0); // cmp <fsreg>,0.0
+ UML_DCMP(block, FPR64(FSREG), 0); // cmp <fsreg>,0.0
UML_DMOVc(block, COND_E, FPR64(FDREG), U64(0x8000000000000000));// dmov <fdreg>,-0.0,e
}
return TRUE;