JitArm64: Jump to dispatcher on downcount <= 0, not < 0
All the other CPU emulation cores do it on <= 0.
This commit is contained in:
parent
031bef0ad9
commit
86d2c2a1c3
|
@ -34,7 +34,7 @@ void JitArm64BlockCache::WriteLinkBlock(Arm64Gen::ARM64XEmitter& emit,
|
||||||
// The "fast" BL must be the third instruction. So just use the former two to inline the
|
// The "fast" BL must be the third instruction. So just use the former two to inline the
|
||||||
// downcount check here. It's better to do this near jump before the long jump to the other
|
// downcount check here. It's better to do this near jump before the long jump to the other
|
||||||
// block.
|
// block.
|
||||||
FixupBranch fast_link = emit.B(CC_PL);
|
FixupBranch fast_link = emit.B(CC_GT);
|
||||||
emit.BL(dest->checkedEntry);
|
emit.BL(dest->checkedEntry);
|
||||||
emit.SetJumpTarget(fast_link);
|
emit.SetJumpTarget(fast_link);
|
||||||
emit.BL(dest->normalEntry);
|
emit.BL(dest->normalEntry);
|
||||||
|
@ -45,13 +45,13 @@ void JitArm64BlockCache::WriteLinkBlock(Arm64Gen::ARM64XEmitter& emit,
|
||||||
s64 distance = ((s64)dest->normalEntry - (s64)emit.GetCodePtr()) >> 2;
|
s64 distance = ((s64)dest->normalEntry - (s64)emit.GetCodePtr()) >> 2;
|
||||||
if (distance >= -0x40000 && distance <= 0x3FFFF)
|
if (distance >= -0x40000 && distance <= 0x3FFFF)
|
||||||
{
|
{
|
||||||
emit.B(CC_PL, dest->normalEntry);
|
emit.B(CC_GT, dest->normalEntry);
|
||||||
emit.B(dest->checkedEntry);
|
emit.B(dest->checkedEntry);
|
||||||
emit.BRK(101);
|
emit.BRK(101);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FixupBranch fast_link = emit.B(CC_PL);
|
FixupBranch fast_link = emit.B(CC_GT);
|
||||||
emit.B(dest->checkedEntry);
|
emit.B(dest->checkedEntry);
|
||||||
emit.SetJumpTarget(fast_link);
|
emit.SetJumpTarget(fast_link);
|
||||||
emit.B(dest->normalEntry);
|
emit.B(dest->normalEntry);
|
||||||
|
|
|
@ -80,8 +80,7 @@ void JitArm64::GenerateAsm()
|
||||||
|
|
||||||
// Downcount Check
|
// Downcount Check
|
||||||
// The result of slice decrementation should be in flags if somebody jumped here
|
// The result of slice decrementation should be in flags if somebody jumped here
|
||||||
// IMPORTANT - We jump on negative, not carry!!!
|
FixupBranch bail = B(CC_LE);
|
||||||
FixupBranch bail = B(CC_MI);
|
|
||||||
|
|
||||||
dispatcher_no_check = GetCodePtr();
|
dispatcher_no_check = GetCodePtr();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue