ARM64: Fix and turn on basic block linking

This commit is contained in:
Henrik Rydgard 2015-03-18 19:02:32 +01:00
parent 5dff3f8c89
commit 57e759a605
3 changed files with 7 additions and 6 deletions

View File

@ -255,10 +255,9 @@ const u8 *Arm64Jit::DoJit(u32 em_address, JitBlock *b)
} else if (jo.enableBlocklink) {
b->checkedEntry = GetCodePtr();
MOVI2R(SCRATCH1, js.blockStart);
// A conditional branch can't reach all the way to the dispatcher :/
//FixupBranch skip = B(CC_GE);
//B((const void *)outerLoopPCInSCRATCH1, SCRATCH2);
//SetJumpTarget(skip);
FixupBranch skip = B(CC_GE);
B((const void *)outerLoopPCInSCRATCH1);
SetJumpTarget(skip);
} else {
// No block linking, no need to add headers to blocks.
}

View File

@ -37,7 +37,7 @@ namespace MIPSComp
struct Arm64JitOptions
{
Arm64JitOptions() {
enableBlocklink = false;
enableBlocklink = true;
useBackJump = false;
useForwardJump = false;
cachePointers = true;

View File

@ -445,7 +445,9 @@ void JitBlockCache::LinkBlockExits(int i) {
b.linkStatus[e] = true;
#elif defined(ARM64)
ARM64XEmitter emit(b.exitPtrs[e]);
// TODO ARM64 - must be done before enabling block linking
emit.B(blocks_[destinationBlock].checkedEntry);
emit.FlushIcache();
b.linkStatus[e] = true;
#endif
}
}