mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-02-06 13:38:56 +00:00
Cleanup deferred rescheduling in case it's tight.
Probably doesn't matter anyway. But this reads cleaner I think.
This commit is contained in:
parent
f145bafc7a
commit
b6a7b04981
@ -28,11 +28,6 @@
|
||||
#include "sceKernelThread.h"
|
||||
#include "../MIPS/MIPSCodeUtils.h"
|
||||
|
||||
static std::vector<HLEModule> moduleDB;
|
||||
static std::vector<Syscall> unresolvedSyscalls;
|
||||
static int hleAfterSyscall;
|
||||
static const char *hleAfterSyscallReschedReason;
|
||||
|
||||
enum
|
||||
{
|
||||
// Do nothing after the syscall.
|
||||
@ -47,6 +42,11 @@ enum
|
||||
HLE_AFTER_RESCHED_CALLBACKS = 0x08,
|
||||
};
|
||||
|
||||
static std::vector<HLEModule> moduleDB;
|
||||
static std::vector<Syscall> unresolvedSyscalls;
|
||||
static int hleAfterSyscall = HLE_AFTER_NOTHING;
|
||||
static const char *hleAfterSyscallReschedReason = NULL;
|
||||
|
||||
void HLEInit()
|
||||
{
|
||||
RegisterAllModules();
|
||||
@ -218,6 +218,23 @@ void hleReSchedule(bool callbacks, const char *reason)
|
||||
hleAfterSyscall |= HLE_AFTER_RESCHED_CALLBACKS;
|
||||
}
|
||||
|
||||
inline void hleFinishSyscall()
|
||||
{
|
||||
if ((hleAfterSyscall & HLE_AFTER_CURRENT_CALLBACKS) != 0)
|
||||
__KernelForceCallbacks();
|
||||
|
||||
// Rescheduling will also do HLE_AFTER_ALL_CALLBACKS.
|
||||
if ((hleAfterSyscall & HLE_AFTER_RESCHED_CALLBACKS) != 0)
|
||||
__KernelReSchedule(true, hleAfterSyscallReschedReason);
|
||||
else if ((hleAfterSyscall & HLE_AFTER_RESCHED) != 0)
|
||||
__KernelReSchedule(hleAfterSyscallReschedReason);
|
||||
else if ((hleAfterSyscall & HLE_AFTER_ALL_CALLBACKS) != 0)
|
||||
__KernelCheckCallbacks();
|
||||
|
||||
hleAfterSyscall = HLE_AFTER_NOTHING;
|
||||
hleAfterSyscallReschedReason = NULL;
|
||||
}
|
||||
|
||||
void CallSyscall(u32 op)
|
||||
{
|
||||
u32 callno = (op >> 6) & 0xFFFFF; //20 bits
|
||||
@ -232,21 +249,10 @@ void CallSyscall(u32 op)
|
||||
HLEFunc func = moduleDB[modulenum].funcTable[funcnum].func;
|
||||
if (func)
|
||||
{
|
||||
hleAfterSyscall = HLE_AFTER_NOTHING;
|
||||
hleAfterSyscallReschedReason = 0;
|
||||
|
||||
func();
|
||||
|
||||
if ((hleAfterSyscall & HLE_AFTER_CURRENT_CALLBACKS) != 0)
|
||||
__KernelForceCallbacks();
|
||||
|
||||
// Rescheduling will also do HLE_AFTER_ALL_CALLBACKS.
|
||||
if ((hleAfterSyscall & HLE_AFTER_RESCHED_CALLBACKS) != 0)
|
||||
__KernelReSchedule(true, hleAfterSyscallReschedReason);
|
||||
else if ((hleAfterSyscall & HLE_AFTER_RESCHED) != 0)
|
||||
__KernelReSchedule(hleAfterSyscallReschedReason);
|
||||
else if ((hleAfterSyscall & HLE_AFTER_ALL_CALLBACKS) != 0)
|
||||
__KernelCheckCallbacks();
|
||||
if (hleAfterSyscall != HLE_AFTER_NOTHING)
|
||||
hleFinishSyscall();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user