A64: Implement Exceptional Exit.

This commit is contained in:
Fernando Sahmkow 2020-04-05 12:11:36 -04:00 committed by MerryMage
parent 41521ed856
commit d7abae1e31
2 changed files with 19 additions and 0 deletions

View file

@ -60,6 +60,12 @@ public:
*/ */
void HaltExecution(); void HaltExecution();
/**
* Exits execution from a callback, the callback must rewind the stack or
* never return to dynarmic from it's current stack.
*/
void ExceptionalExit();
/// Read Stack Pointer /// Read Stack Pointer
std::uint64_t GetSP() const; std::uint64_t GetSP() const;
/// Modify Stack Pointer /// Modify Stack Pointer

View file

@ -83,6 +83,15 @@ public:
PerformRequestedCacheInvalidation(); PerformRequestedCacheInvalidation();
} }
void ExceptionalExit() {
if (!conf.wall_clock_cntpct) {
const s64 ticks = jit_state.cycles_to_run - jit_state.cycles_remaining;
conf.callbacks->AddTicks(ticks);
}
PerformRequestedCacheInvalidation();
is_executing = false;
}
void ClearCache() { void ClearCache() {
invalidate_entire_cache = true; invalidate_entire_cache = true;
RequestCacheInvalidation(); RequestCacheInvalidation();
@ -313,6 +322,10 @@ void Jit::HaltExecution() {
impl->HaltExecution(); impl->HaltExecution();
} }
void Jit::ExceptionalExit() {
impl->ExceptionalExit();
}
u64 Jit::GetSP() const { u64 Jit::GetSP() const {
return impl->GetSP(); return impl->GetSP();
} }