A64/sys_ic: Return to dispatch on possible invalidation
This commit is contained in:
parent
cf0709c7f1
commit
af2d50288f
1 changed files with 9 additions and 3 deletions
|
@ -9,17 +9,23 @@ namespace Dynarmic::A64 {
|
||||||
|
|
||||||
bool TranslatorVisitor::IC_IALLU() {
|
bool TranslatorVisitor::IC_IALLU() {
|
||||||
ir.InstructionCacheOperationRaised(InstructionCacheOperation::InvalidateAllToPoU, ir.Imm64(0));
|
ir.InstructionCacheOperationRaised(InstructionCacheOperation::InvalidateAllToPoU, ir.Imm64(0));
|
||||||
return true;
|
ir.SetPC(ir.Imm64(ir.current_location->PC() + 4));
|
||||||
|
ir.SetTerm(IR::Term::CheckHalt{IR::Term::ReturnToDispatch{}});
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TranslatorVisitor::IC_IALLUIS() {
|
bool TranslatorVisitor::IC_IALLUIS() {
|
||||||
ir.InstructionCacheOperationRaised(InstructionCacheOperation::InvalidateAllToPoUInnerSharable, ir.Imm64(0));
|
ir.InstructionCacheOperationRaised(InstructionCacheOperation::InvalidateAllToPoUInnerSharable, ir.Imm64(0));
|
||||||
return true;
|
ir.SetPC(ir.Imm64(ir.current_location->PC() + 4));
|
||||||
|
ir.SetTerm(IR::Term::CheckHalt{IR::Term::ReturnToDispatch{}});
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TranslatorVisitor::IC_IVAU(Reg Rt) {
|
bool TranslatorVisitor::IC_IVAU(Reg Rt) {
|
||||||
ir.InstructionCacheOperationRaised(InstructionCacheOperation::InvalidateByVAToPoU, X(64, Rt));
|
ir.InstructionCacheOperationRaised(InstructionCacheOperation::InvalidateByVAToPoU, X(64, Rt));
|
||||||
return true;
|
ir.SetPC(ir.Imm64(ir.current_location->PC() + 4));
|
||||||
|
ir.SetTerm(IR::Term::CheckHalt{IR::Term::ReturnToDispatch{}});
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Dynarmic::A64
|
} // namespace Dynarmic::A64
|
||||||
|
|
Loading…
Reference in a new issue