From 74a3af9dd2587cc71458a6340fbff2719d508494 Mon Sep 17 00:00:00 2001 From: Happy Date: Fri, 24 Mar 2017 12:26:21 -0600 Subject: [PATCH] mips3 drc : Make sure branch delay slot instruction is not virtual instruction before trying to generate code to add it to the block checksum. --- src/devices/cpu/mips/mips3drc.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/devices/cpu/mips/mips3drc.cpp b/src/devices/cpu/mips/mips3drc.cpp index 182c375f9e3..96bab73faef 100644 --- a/src/devices/cpu/mips/mips3drc.cpp +++ b/src/devices/cpu/mips/mips3drc.cpp @@ -1101,7 +1101,9 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state * 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() != nullptr && seqhead->physpc != seqhead->delay.first()->physpc) + if (seqhead->delay.first() != nullptr + && !(seqhead->delay.first()->flags & OPFLAG_VIRTUAL_NOOP) + && seqhead->physpc != seqhead->delay.first()->physpc) { base = m_direct->read_ptr(seqhead->delay.first()->physpc); assert(base != nullptr); @@ -1142,7 +1144,9 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state * UML_ADD(block, I0, I0, I1); // add i0,i0,i1 sum += curdesc->opptr.l[0]; - if (curdesc->delay.first() != nullptr && (curdesc == seqlast || (curdesc->next() != nullptr && curdesc->next()->physpc != curdesc->delay.first()->physpc))) + if (curdesc->delay.first() != nullptr + && !(curdesc->delay.first()->flags & OPFLAG_VIRTUAL_NOOP) + && (curdesc == seqlast || (curdesc->next() != nullptr && curdesc->next()->physpc != curdesc->delay.first()->physpc))) { base = m_direct->read_ptr(curdesc->delay.first()->physpc); assert(base != nullptr);