File tree Expand file tree Collapse file tree 3 files changed +9
-2
lines changed Expand file tree Collapse file tree 3 files changed +9
-2
lines changed Original file line number Diff line number Diff line change @@ -169,7 +169,6 @@ void DynaRecCPU::emitDispatcher() {
169
169
gen.Str (contextPointer,
170
170
MemOperand (sp, -16 , PreIndex)); // Save contextPointer register in stack (also align stack pointer)
171
171
172
- gen.Mov (runningPointer, (uintptr_t )PCSX::g_system->runningPtr ()); // Move runningPtr to runningPointer register
173
172
gen.Mov (contextPointer, (uintptr_t )this ); // Load context pointer
174
173
175
174
// Back up all our allocateable volatile regs
@@ -188,8 +187,12 @@ void DynaRecCPU::emitDispatcher() {
188
187
189
188
loadThisPointer (arg1.X ()); // Poll events
190
189
call (recBranchTestWrapper);
190
+ gen.Mov (runningPointer, (uintptr_t )PCSX::g_system->runningPtr ()); // Move runningPtr to runningPointer register
191
191
gen.Ldrb (w0, MemOperand (runningPointer)); // Check if PCSX::g_system->running is true
192
192
gen.Cbz (w0, &done); // If it's not, return
193
+ gen.Mov (runningPointer, (uintptr_t )PCSX::g_system->quittingPtr ()); // Load pointer to "quitting" variable
194
+ gen.Ldrb (w0, MemOperand (runningPointer)); // Check if PCSX::g_system->quitting is true
195
+ gen.Cbnz (w0, &done); // If it is, return
193
196
emitBlockLookup (); // Otherwise, look up next block
194
197
195
198
gen.align ();
Original file line number Diff line number Diff line change @@ -186,7 +186,6 @@ void DynaRecCPU::emitDispatcher() {
186
186
gen.push (reg.cvt64 ());
187
187
}
188
188
gen.mov (qword[contextPointer + HOST_REG_CACHE_OFFSET (0 )], runningPointer); // Backup running pointer
189
- gen.mov (runningPointer, (uintptr_t )PCSX::g_system->runningPtr ()); // Load pointer to "running" variable
190
189
191
190
// Allocate shadow stack space on Windows
192
191
if constexpr (isWindows ()) {
@@ -202,8 +201,12 @@ void DynaRecCPU::emitDispatcher() {
202
201
203
202
// Poll events
204
203
emitMemberFunctionCall (&PCSX::R3000Acpu::branchTest, this );
204
+ gen.mov (runningPointer, (uintptr_t )PCSX::g_system->runningPtr ()); // Load pointer to "running" variable
205
205
gen.test (Xbyak::util::byte[runningPointer], 1 ); // Check if PCSX::g_system->running is true
206
206
gen.jz (done); // If it's not, return
207
+ gen.mov (runningPointer, (uintptr_t )PCSX::g_system->quittingPtr ()); // Load pointer to "quitting" variable
208
+ gen.test (Xbyak::util::byte[runningPointer], 1 ); // Check if PCSX::g_system->running is true
209
+ gen.jnz (done); // If it is, return
207
210
emitBlockLookup (); // Otherwise, look up next block
208
211
209
212
gen.align (16 );
Original file line number Diff line number Diff line change @@ -168,6 +168,7 @@ class System {
168
168
return m_running && !m_quitting;
169
169
}
170
170
const bool *runningPtr () { return &m_running; }
171
+ const bool *quittingPtr () { return &m_quitting; }
171
172
bool quitting () { return m_quitting; }
172
173
int exitCode () { return m_exitCode; }
173
174
bool emergencyExit () { return m_emergencyExit; }
You can’t perform that action at this time.
0 commit comments