mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-26 23:59:54 -06:00
JitArm64: Partially fallback on bcctrx
No need to assert, fallbacks on branching instructions now works fine.
This commit is contained in:
@ -179,11 +179,14 @@ void JitArm64::bcctrx(UGeckoInstruction inst)
|
|||||||
INSTRUCTION_START
|
INSTRUCTION_START
|
||||||
JITDISABLE(bJITBranchOff);
|
JITDISABLE(bJITBranchOff);
|
||||||
|
|
||||||
|
// Rare condition seen in (just some versions of?) Nintendo's NES Emulator
|
||||||
|
// BO_2 == 001zy -> b if false
|
||||||
|
// BO_2 == 011zy -> b if true
|
||||||
|
FALLBACK_IF(!(inst.BO_2 & BO_DONT_CHECK_CONDITION));
|
||||||
|
|
||||||
// bcctrx doesn't decrement and/or test CTR
|
// bcctrx doesn't decrement and/or test CTR
|
||||||
_assert_msg_(DYNA_REC, inst.BO_2 & BO_DONT_DECREMENT_FLAG, "bcctrx with decrement and test CTR option is invalid!");
|
_assert_msg_(DYNA_REC, inst.BO_2 & BO_DONT_DECREMENT_FLAG, "bcctrx with decrement and test CTR option is invalid!");
|
||||||
|
|
||||||
if (inst.BO_2 & BO_DONT_CHECK_CONDITION)
|
|
||||||
{
|
|
||||||
// BO_2 == 1z1zz -> b always
|
// BO_2 == 1z1zz -> b always
|
||||||
|
|
||||||
//NPC = CTR & 0xfffffffc;
|
//NPC = CTR & 0xfffffffc;
|
||||||
@ -205,14 +208,6 @@ void JitArm64::bcctrx(UGeckoInstruction inst)
|
|||||||
AND(WA, WA, 30, 29); // Wipe the bottom 2 bits.
|
AND(WA, WA, 30, 29); // Wipe the bottom 2 bits.
|
||||||
WriteExitDestInR(WA);
|
WriteExitDestInR(WA);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// Rare condition seen in (just some versions of?) Nintendo's NES Emulator
|
|
||||||
// BO_2 == 001zy -> b if false
|
|
||||||
// BO_2 == 011zy -> b if true
|
|
||||||
_assert_msg_(DYNA_REC, false, "Haven't implemented rare form of bcctrx yet");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void JitArm64::bclrx(UGeckoInstruction inst)
|
void JitArm64::bclrx(UGeckoInstruction inst)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user