diff options
Diffstat (limited to 'src/emu/cpu/mips/mips3drc.c')
-rw-r--r-- | src/emu/cpu/mips/mips3drc.c | 20 |
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; |