Optimization: Make SVC use RSB

This commit is contained in:
MerryMage
2016-08-15 15:02:08 +01:00
parent 6c45619aa1
commit 7d7ac0af71
8 changed files with 30 additions and 7 deletions

View File

@@ -1674,6 +1674,9 @@ void EmitX64::EmitTerminal(IR::Terminal terminal, Arm::LocationDescriptor initia
case 6:
EmitTerminalIf(boost::get<IR::Term::If>(terminal), initial_location);
return;
case 7:
EmitTerminalCheckHalt(boost::get<IR::Term::CheckHalt>(terminal), initial_location);
return;
default:
ASSERT_MSG(0, "Invalid Terminal. Bad programmer.");
return;
@@ -1776,6 +1779,12 @@ void EmitX64::EmitTerminalIf(IR::Term::If terminal, Arm::LocationDescriptor init
EmitTerminal(terminal.then_, initial_location);
}
void EmitX64::EmitTerminalCheckHalt(IR::Term::CheckHalt terminal, Arm::LocationDescriptor initial_location) {
code->CMP(8, MDisp(R15, offsetof(JitState, halt_requested)), Imm8(0));
code->J_CC(CC_NE, code->GetReturnFromRunCodeAddress(), true);
EmitTerminal(terminal.else_, initial_location);
}
void EmitX64::Patch(Arm::LocationDescriptor desc, CodePtr bb) {
u8* const save_code_ptr = code->GetWritableCodePtr();