diff --git a/src/devices/cpu/powerpc/ppcdrc.cpp b/src/devices/cpu/powerpc/ppcdrc.cpp index 4ebf89a61f8..0b5ab034be7 100644 --- a/src/devices/cpu/powerpc/ppcdrc.cpp +++ b/src/devices/cpu/powerpc/ppcdrc.cpp @@ -1942,8 +1942,11 @@ void ppc_device::generate_branch(drcuml_block *block, compiler_state *compiler, } else { - generate_update_cycles(block, &compiler_temp, mem(srcptr), true); // - UML_HASHJMP(block, m_core->mode, mem(srcptr), *m_nocode); // hashjmp ,,nocode + generate_update_cycles(block, &compiler_temp, mem(srcptr), true); // + + /* clear two LSBs of the target address to prevent branching to an invalid address */ + UML_AND(block, I0, mem(srcptr), 0xFFFFFFFC); // and i0, 0xFFFFFFFC + UML_HASHJMP(block, m_core->mode, I0, *m_nocode); // hashjmp ,i0,nocode } /* update the label */