|
@@ -102,7 +102,9 @@ public:
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void CallSVC(u32 swi) override {
|
|
void CallSVC(u32 swi) override {
|
|
|
- Kernel::Svc::Call(parent.system, swi);
|
|
|
|
|
|
|
+ parent.svc_called = true;
|
|
|
|
|
+ parent.svc_swi = swi;
|
|
|
|
|
+ parent.jit->HaltExecution();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void AddTicks(u64 ticks) override {
|
|
void AddTicks(u64 ticks) override {
|
|
@@ -227,11 +229,17 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable*
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void ARM_Dynarmic_64::Run() {
|
|
void ARM_Dynarmic_64::Run() {
|
|
|
- jit->Run();
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-void ARM_Dynarmic_64::ExceptionalExit() {
|
|
|
|
|
- jit->ExceptionalExit();
|
|
|
|
|
|
|
+ while (true) {
|
|
|
|
|
+ jit->Run();
|
|
|
|
|
+ if (!svc_called) {
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ svc_called = false;
|
|
|
|
|
+ Kernel::Svc::Call(system, svc_swi);
|
|
|
|
|
+ if (shutdown) {
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void ARM_Dynarmic_64::Step() {
|
|
void ARM_Dynarmic_64::Step() {
|
|
@@ -320,6 +328,7 @@ void ARM_Dynarmic_64::LoadContext(const ThreadContext64& ctx) {
|
|
|
|
|
|
|
|
void ARM_Dynarmic_64::PrepareReschedule() {
|
|
void ARM_Dynarmic_64::PrepareReschedule() {
|
|
|
jit->HaltExecution();
|
|
jit->HaltExecution();
|
|
|
|
|
+ shutdown = true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void ARM_Dynarmic_64::ClearInstructionCache() {
|
|
void ARM_Dynarmic_64::ClearInstructionCache() {
|