A64: Implement Exceptional Exit.
This commit is contained in:
parent
41521ed856
commit
d7abae1e31
2 changed files with 19 additions and 0 deletions
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue