diff --git a/cpu/ppc/ppcopcodes.cpp b/cpu/ppc/ppcopcodes.cpp index 725fbb4..2c40fdd 100644 --- a/cpu/ppc/ppcopcodes.cpp +++ b/cpu/ppc/ppcopcodes.cpp @@ -1270,18 +1270,21 @@ void dppc_interpreter::ppc_creqv() { } void dppc_interpreter::ppc_crnand() { ppc_grab_regsdab(); - if (!((ppc_state.cr & (0x80000000UL >> reg_a)) && (ppc_state.cr & (0x80000000UL >> reg_b)))) { - ppc_state.cr |= (0x80000000UL >> reg_d); - } else { + uint8_t ir = (ppc_state.cr >> (31 - reg_a)) & (ppc_state.cr >> (31 - reg_b)); + if (ir & 1) { ppc_state.cr &= ~(0x80000000UL >> reg_d); + } else { + ppc_state.cr |= (0x80000000UL >> reg_d); } } + void dppc_interpreter::ppc_crnor() { ppc_grab_regsdab(); - if (!((ppc_state.cr & (0x80000000UL >> reg_a)) || (ppc_state.cr & (0x80000000UL >> reg_b)))) { - ppc_state.cr |= (0x80000000UL >> reg_d); - } else { + uint8_t ir = (ppc_state.cr >> (31 - reg_a)) | (ppc_state.cr >> (31 - reg_b)); + if (ir & 1) { ppc_state.cr &= ~(0x80000000UL >> reg_d); + } else { + ppc_state.cr |= (0x80000000UL >> reg_d); } }