diff --git a/cpu/ppc/poweropcodes.cpp b/cpu/ppc/poweropcodes.cpp index 3f2c7e4..1e7e441 100644 --- a/cpu/ppc/poweropcodes.cpp +++ b/cpu/ppc/poweropcodes.cpp @@ -479,16 +479,17 @@ void dppc_interpreter::power_slq() { ppc_grab_regssab(ppc_cur_instruction); unsigned rot_sh = ppc_result_b & 0x1F; - if (ppc_result_b >= 0x20) { - ppc_result_a = ppc_result_d << rot_sh; - } else { + if (ppc_result_b & 0x20) { ppc_result_a = 0; + } else { + ppc_result_a = ppc_result_d << rot_sh; } if (rec) ppc_changecrf0(ppc_result_a); ppc_state.spr[SPR::MQ] = ((ppc_result_d << rot_sh) | (ppc_result_d >> (32 - rot_sh))); + ppc_store_iresult_reg(reg_a, ppc_result_a); } template void dppc_interpreter::power_slq();