Merge pull request #487 from Sonicadvance1/Fix-Conditional-branch

Fix conditional branching on x86_64.
This commit is contained in:
Ryan Houdek 2014-06-13 13:04:24 -05:00
commit 679f57eb1f
2 changed files with 6 additions and 6 deletions

View File

@ -186,7 +186,7 @@ void Jit64::bcctrx(UGeckoInstruction inst)
branch = CC_Z;
else
branch = CC_NZ;
FixupBranch b = J_CC(branch, false);
FixupBranch b = J_CC(branch, true);
MOV(32, R(EAX), M(&CTR));
AND(32, R(EAX), Imm32(0xFFFFFFFC));
//MOV(32, M(&PC), R(EAX)); => Already done in WriteExitDestInEAX()
@ -214,9 +214,9 @@ void Jit64::bclrx(UGeckoInstruction inst)
{
SUB(32, M(&CTR), Imm8(1));
if (inst.BO & BO_BRANCH_IF_CTR_0)
pCTRDontBranch = J_CC(CC_NZ);
pCTRDontBranch = J_CC(CC_NZ, true);
else
pCTRDontBranch = J_CC(CC_Z);
pCTRDontBranch = J_CC(CC_Z, true);
}
FixupBranch pConditionDontBranch;
@ -224,9 +224,9 @@ void Jit64::bclrx(UGeckoInstruction inst)
{
TEST(8, M(&PowerPC::ppcState.cr_fast[inst.BI >> 2]), Imm8(8 >> (inst.BI & 3)));
if (inst.BO & BO_BRANCH_IF_TRUE) // Conditional branch
pConditionDontBranch = J_CC(CC_Z);
pConditionDontBranch = J_CC(CC_Z, true);
else
pConditionDontBranch = J_CC(CC_NZ);
pConditionDontBranch = J_CC(CC_NZ, true);
}
// This below line can be used to prove that blr "eats flags" in practice.

View File

@ -2194,7 +2194,7 @@ void Jit64::twx(UGeckoInstruction inst)
{
if (inst.TO & (1 << i))
{
FixupBranch f = J_CC(conditions[i]);
FixupBranch f = J_CC(conditions[i], true);
fixups.push_back(f);
}
}