mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-05-18 01:33:58 +12:00
Remove thread sleepTick/waitingNs
This commit is contained in:
parent
99a1a0133d
commit
491b415759
4 changed files with 37 additions and 58 deletions
|
@ -113,10 +113,6 @@ struct Thread {
|
||||||
// The waiting address for threads that are waiting on an AddressArbiter
|
// The waiting address for threads that are waiting on an AddressArbiter
|
||||||
u32 waitingAddress;
|
u32 waitingAddress;
|
||||||
|
|
||||||
// The nanoseconds until a thread wakes up from being asleep or from timing out while waiting on an arbiter
|
|
||||||
u64 waitingNanoseconds;
|
|
||||||
// The tick this thread went to sleep on
|
|
||||||
u64 sleepTick;
|
|
||||||
// For WaitSynchronization(N): A vector of objects this thread is waiting for
|
// For WaitSynchronization(N): A vector of objects this thread is waiting for
|
||||||
std::vector<Handle> waitList;
|
std::vector<Handle> waitList;
|
||||||
// For WaitSynchronizationN: Shows whether the object should wait for all objects in the wait list or just one
|
// For WaitSynchronizationN: Shows whether the object should wait for all objects in the wait list or just one
|
||||||
|
|
|
@ -126,9 +126,7 @@ void Kernel::waitSynchronization1() {
|
||||||
auto& t = threads[currentThreadIndex];
|
auto& t = threads[currentThreadIndex];
|
||||||
t.waitList.resize(1);
|
t.waitList.resize(1);
|
||||||
t.status = ThreadStatus::WaitSync1;
|
t.status = ThreadStatus::WaitSync1;
|
||||||
t.sleepTick = cpu.getTicks();
|
|
||||||
t.wakeupTick = getWakeupTick(ns);
|
t.wakeupTick = getWakeupTick(ns);
|
||||||
t.waitingNanoseconds = ns;
|
|
||||||
t.waitList[0] = handle;
|
t.waitList[0] = handle;
|
||||||
|
|
||||||
// Add the current thread to the object's wait list
|
// Add the current thread to the object's wait list
|
||||||
|
@ -221,8 +219,6 @@ void Kernel::waitSynchronizationN() {
|
||||||
t.waitList.resize(handleCount);
|
t.waitList.resize(handleCount);
|
||||||
t.status = ThreadStatus::WaitSyncAny;
|
t.status = ThreadStatus::WaitSyncAny;
|
||||||
t.outPointer = outPointer;
|
t.outPointer = outPointer;
|
||||||
t.waitingNanoseconds = ns;
|
|
||||||
t.sleepTick = cpu.getTicks();
|
|
||||||
t.wakeupTick = getWakeupTick(ns);
|
t.wakeupTick = getWakeupTick(ns);
|
||||||
|
|
||||||
for (s32 i = 0; i < handleCount; i++) {
|
for (s32 i = 0; i < handleCount; i++) {
|
||||||
|
|
|
@ -8,13 +8,6 @@
|
||||||
The code for our idle thread looks like this
|
The code for our idle thread looks like this
|
||||||
|
|
||||||
idle_thread_main:
|
idle_thread_main:
|
||||||
mov r0, #4096 @ Loop counter
|
|
||||||
|
|
||||||
.loop:
|
|
||||||
nop; nop; nop; nop @ NOP 4 times to waste some cycles
|
|
||||||
subs r0, #1 @ Decrement counter by 1, go back to looping if loop counter != 0
|
|
||||||
bne .loop
|
|
||||||
|
|
||||||
// Sleep for 0 seconds with the SleepThread SVC, which just yields execution
|
// Sleep for 0 seconds with the SleepThread SVC, which just yields execution
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
|
@ -24,14 +17,10 @@ idle_thread_main:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static constexpr u8 idleThreadCode[] = {
|
static constexpr u8 idleThreadCode[] = {
|
||||||
0x01, 0x0A, 0xA0, 0xE3, // mov r0, #4096
|
|
||||||
0x00, 0xF0, 0x20, 0xE3, 0x00, 0xF0, 0x20, 0xE3, 0x00, 0xF0, 0x20, 0xE3, 0x00, 0xF0, 0x20, 0xE3, // nop (4 times)
|
|
||||||
0x01, 0x00, 0x50, 0xE2, // subs r0, #1
|
|
||||||
0xF9, 0xFF, 0xFF, 0x1A, // bne loop
|
|
||||||
0x00, 0x00, 0xA0, 0xE3, // mov r0, #0
|
0x00, 0x00, 0xA0, 0xE3, // mov r0, #0
|
||||||
0x00, 0x10, 0xA0, 0xE3, // mov r1, #0
|
0x00, 0x10, 0xA0, 0xE3, // mov r1, #0
|
||||||
0x0A, 0x00, 0x00, 0xEF, // svc SleepThread
|
0x0A, 0x00, 0x00, 0xEF, // svc SleepThread
|
||||||
0xF4, 0xFF, 0xFF, 0xEA // b idle_thread_main
|
0xFB, 0xFF, 0xFF, 0xEA // b idle_thread_main
|
||||||
};
|
};
|
||||||
|
|
||||||
// Set up an idle thread to run when no thread is able to run
|
// Set up an idle thread to run when no thread is able to run
|
||||||
|
|
|
@ -393,8 +393,6 @@ void Kernel::sleepThread(s64 ns) {
|
||||||
Thread& t = threads[currentThreadIndex];
|
Thread& t = threads[currentThreadIndex];
|
||||||
|
|
||||||
t.status = ThreadStatus::WaitSleep;
|
t.status = ThreadStatus::WaitSleep;
|
||||||
t.waitingNanoseconds = ns;
|
|
||||||
t.sleepTick = cpu.getTicks();
|
|
||||||
t.wakeupTick = getWakeupTick(ns);
|
t.wakeupTick = getWakeupTick(ns);
|
||||||
|
|
||||||
requireReschedule();
|
requireReschedule();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue