Match __scTaskComplete and some other minor cleanps

This commit is contained in:
Ryan Myers
2021-10-14 14:44:38 -04:00
parent f72dffd3a9
commit 3b3aabe0bd
3 changed files with 37 additions and 217 deletions
@@ -1,75 +0,0 @@
glabel __scTaskComplete
/* 07AA40 80079E40 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 07AA44 80079E44 AFBF0014 */ sw $ra, 0x14($sp)
/* 07AA48 80079E48 AFA40018 */ sw $a0, 0x18($sp)
/* 07AA4C 80079E4C 8CAE0004 */ lw $t6, 4($a1)
/* 07AA50 80079E50 00A03825 */ move $a3, $a1
/* 07AA54 80079E54 31CF0003 */ andi $t7, $t6, 3
/* 07AA58 80079E58 15E00035 */ bnez $t7, .L80079F30
/* 07AA5C 80079E5C 00001025 */ move $v0, $zero
/* 07AA60 80079E60 8CA40050 */ lw $a0, 0x50($a1)
/* 07AA64 80079E64 00000000 */ nop
/* 07AA68 80079E68 1080002F */ beqz $a0, .L80079F28
/* 07AA6C 80079E6C 00000000 */ nop
/* 07AA70 80079E70 8CB80008 */ lw $t8, 8($a1)
/* 07AA74 80079E74 8FA80018 */ lw $t0, 0x18($sp)
/* 07AA78 80079E78 33190020 */ andi $t9, $t8, 0x20
/* 07AA7C 80079E7C 1320001B */ beqz $t9, .L80079EEC
/* 07AA80 80079E80 00000000 */ nop
/* 07AA84 80079E84 8D090280 */ lw $t1, 0x280($t0)
/* 07AA88 80079E88 24020001 */ li $v0, 1
/* 07AA8C 80079E8C 2D210002 */ sltiu $at, $t1, 2
/* 07AA90 80079E90 10200003 */ beqz $at, .L80079EA0
/* 07AA94 80079E94 00000000 */ nop
/* 07AA98 80079E98 10000025 */ b .L80079F30
/* 07AA9C 80079E9C AD05027C */ sw $a1, 0x27c($t0)
.L80079EA0:
/* 07AAA0 80079EA0 8CEA0068 */ lw $t2, 0x68($a3)
/* 07AAA4 80079EA4 00000000 */ nop
/* 07AAA8 80079EA8 15400005 */ bnez $t2, .L80079EC0
/* 07AAAC 80079EAC 00000000 */ nop
/* 07AAB0 80079EB0 8CEB0054 */ lw $t3, 0x54($a3)
/* 07AAB4 80079EB4 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e
/* 07AAB8 80079EB8 11600006 */ beqz $t3, .L80079ED4
/* 07AABC 80079EBC 24A5E730 */ addiu $a1, %lo(D_800DE730) # addiu $a1, $a1, -0x18d0
.L80079EC0:
/* 07AAC0 80079EC0 8CE50054 */ lw $a1, 0x54($a3)
/* 07AAC4 80079EC4 0C03238C */ jal osSendMesg
/* 07AAC8 80079EC8 24060001 */ li $a2, 1
/* 07AACC 80079ECC 10000004 */ b .L80079EE0
/* 07AAD0 80079ED0 8FAC0018 */ lw $t4, 0x18($sp)
.L80079ED4:
/* 07AAD4 80079ED4 0C03238C */ jal osSendMesg
/* 07AAD8 80079ED8 24060001 */ li $a2, 1
/* 07AADC 80079EDC 8FAC0018 */ lw $t4, 0x18($sp)
.L80079EE0:
/* 07AAE0 80079EE0 24020001 */ li $v0, 1
/* 07AAE4 80079EE4 10000012 */ b .L80079F30
/* 07AAE8 80079EE8 AD800280 */ sw $zero, 0x280($t4)
.L80079EEC:
/* 07AAEC 80079EEC 8CED0068 */ lw $t5, 0x68($a3)
/* 07AAF0 80079EF0 00000000 */ nop
/* 07AAF4 80079EF4 15A00005 */ bnez $t5, .L80079F0C
/* 07AAF8 80079EF8 00000000 */ nop
/* 07AAFC 80079EFC 8CEE0054 */ lw $t6, 0x54($a3)
/* 07AB00 80079F00 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e
/* 07AB04 80079F04 11C00006 */ beqz $t6, .L80079F20
/* 07AB08 80079F08 24A5E730 */ addiu $a1, %lo(D_800DE730) # addiu $a1, $a1, -0x18d0
.L80079F0C:
/* 07AB0C 80079F0C 8CE50054 */ lw $a1, 0x54($a3)
/* 07AB10 80079F10 0C03238C */ jal osSendMesg
/* 07AB14 80079F14 24060001 */ li $a2, 1
/* 07AB18 80079F18 10000005 */ b .L80079F30
/* 07AB1C 80079F1C 24020001 */ li $v0, 1
.L80079F20:
/* 07AB20 80079F20 0C03238C */ jal osSendMesg
/* 07AB24 80079F24 24060001 */ li $a2, 1
.L80079F28:
/* 07AB28 80079F28 10000001 */ b .L80079F30
/* 07AB2C 80079F2C 24020001 */ li $v0, 1
.L80079F30:
/* 07AB30 80079F30 8FBF0014 */ lw $ra, 0x14($sp)
/* 07AB34 80079F34 27BD0018 */ addiu $sp, $sp, 0x18
/* 07AB38 80079F38 03E00008 */ jr $ra
/* 07AB3C 80079F3C 00000000 */ nop
@@ -1,95 +0,0 @@
glabel osSendMesg
/* 0C9A30 800C8E30 27BDFFC8 */ addiu $sp, $sp, -0x38
/* 0C9A34 800C8E34 AFBF0024 */ sw $ra, 0x24($sp)
/* 0C9A38 800C8E38 AFA40038 */ sw $a0, 0x38($sp)
/* 0C9A3C 800C8E3C AFA5003C */ sw $a1, 0x3c($sp)
/* 0C9A40 800C8E40 AFA60040 */ sw $a2, 0x40($sp)
/* 0C9A44 800C8E44 AFB20020 */ sw $s2, 0x20($sp)
/* 0C9A48 800C8E48 AFB1001C */ sw $s1, 0x1c($sp)
/* 0C9A4C 800C8E4C 0C034958 */ jal __osDisableInt
/* 0C9A50 800C8E50 AFB00018 */ sw $s0, 0x18($sp)
/* 0C9A54 800C8E54 8FAE0038 */ lw $t6, 0x38($sp)
/* 0C9A58 800C8E58 00408025 */ move $s0, $v0
/* 0C9A5C 800C8E5C 8DCF0008 */ lw $t7, 8($t6)
/* 0C9A60 800C8E60 8DD80010 */ lw $t8, 0x10($t6)
/* 0C9A64 800C8E64 01F8082A */ slt $at, $t7, $t8
/* 0C9A68 800C8E68 14200018 */ bnez $at, .L800C8ECC
/* 0C9A6C 800C8E6C 00000000 */ nop
.L800C8E70:
/* 0C9A70 800C8E70 8FB90040 */ lw $t9, 0x40($sp)
/* 0C9A74 800C8E74 24010001 */ li $at, 1
/* 0C9A78 800C8E78 1721000A */ bne $t9, $at, .L800C8EA4
/* 0C9A7C 800C8E7C 00000000 */ nop
/* 0C9A80 800C8E80 3C09800E */ lui $t1, %hi(__osRunningThread) # $t1, 0x800e
/* 0C9A84 800C8E84 8D294890 */ lw $t1, %lo(__osRunningThread)($t1)
/* 0C9A88 800C8E88 24080008 */ li $t0, 8
/* 0C9A8C 800C8E8C A5280010 */ sh $t0, 0x10($t1)
/* 0C9A90 800C8E90 8FA40038 */ lw $a0, 0x38($sp)
/* 0C9A94 800C8E94 0C034CB3 */ jal __osEnqueueAndYield
/* 0C9A98 800C8E98 24840004 */ addiu $a0, $a0, 4
/* 0C9A9C 800C8E9C 10000005 */ b .L800C8EB4
/* 0C9AA0 800C8EA0 00000000 */ nop
.L800C8EA4:
/* 0C9AA4 800C8EA4 0C034960 */ jal __osRestoreInt
/* 0C9AA8 800C8EA8 02002025 */ move $a0, $s0
/* 0C9AAC 800C8EAC 1000002D */ b .L800C8F64
/* 0C9AB0 800C8EB0 2402FFFF */ li $v0, -1
.L800C8EB4:
/* 0C9AB4 800C8EB4 8FAA0038 */ lw $t2, 0x38($sp)
/* 0C9AB8 800C8EB8 8D4B0008 */ lw $t3, 8($t2)
/* 0C9ABC 800C8EBC 8D4C0010 */ lw $t4, 0x10($t2)
/* 0C9AC0 800C8EC0 016C082A */ slt $at, $t3, $t4
/* 0C9AC4 800C8EC4 1020FFEA */ beqz $at, .L800C8E70
/* 0C9AC8 800C8EC8 00000000 */ nop
.L800C8ECC:
/* 0C9ACC 800C8ECC 8FAD0038 */ lw $t5, 0x38($sp)
/* 0C9AD0 800C8ED0 8FA8003C */ lw $t0, 0x3c($sp)
/* 0C9AD4 800C8ED4 8DAE000C */ lw $t6, 0xc($t5)
/* 0C9AD8 800C8ED8 8DAF0008 */ lw $t7, 8($t5)
/* 0C9ADC 800C8EDC 8DB90010 */ lw $t9, 0x10($t5)
/* 0C9AE0 800C8EE0 8DA90014 */ lw $t1, 0x14($t5)
/* 0C9AE4 800C8EE4 01CFC021 */ addu $t8, $t6, $t7
/* 0C9AE8 800C8EE8 0319001A */ div $zero, $t8, $t9
/* 0C9AEC 800C8EEC 00008810 */ mfhi $s1
/* 0C9AF0 800C8EF0 00115080 */ sll $t2, $s1, 2
/* 0C9AF4 800C8EF4 012A5821 */ addu $t3, $t1, $t2
/* 0C9AF8 800C8EF8 AD680000 */ sw $t0, ($t3)
/* 0C9AFC 800C8EFC 8FAC0038 */ lw $t4, 0x38($sp)
/* 0C9B00 800C8F00 17200002 */ bnez $t9, .L800C8F0C
/* 0C9B04 800C8F04 00000000 */ nop
/* 0C9B08 800C8F08 0007000D */ break 7
.L800C8F0C:
/* 0C9B0C 800C8F0C 2401FFFF */ li $at, -1
/* 0C9B10 800C8F10 17210004 */ bne $t9, $at, .L800C8F24
/* 0C9B14 800C8F14 3C018000 */ lui $at, 0x8000
/* 0C9B18 800C8F18 17010002 */ bne $t8, $at, .L800C8F24
/* 0C9B1C 800C8F1C 00000000 */ nop
/* 0C9B20 800C8F20 0006000D */ break 6
.L800C8F24:
/* 0C9B24 800C8F24 8D8E0008 */ lw $t6, 8($t4)
/* 0C9B28 800C8F28 25CF0001 */ addiu $t7, $t6, 1
/* 0C9B2C 800C8F2C AD8F0008 */ sw $t7, 8($t4)
/* 0C9B30 800C8F30 8FB80038 */ lw $t8, 0x38($sp)
/* 0C9B34 800C8F34 8F190000 */ lw $t9, ($t8)
/* 0C9B38 800C8F38 8F2D0000 */ lw $t5, ($t9)
/* 0C9B3C 800C8F3C 11A00006 */ beqz $t5, .L800C8F58
/* 0C9B40 800C8F40 00000000 */ nop
/* 0C9B44 800C8F44 0C034D05 */ jal __osPopThread
/* 0C9B48 800C8F48 03002025 */ move $a0, $t8
/* 0C9B4C 800C8F4C 00409025 */ move $s2, $v0
/* 0C9B50 800C8F50 0C032268 */ jal osStartThread
/* 0C9B54 800C8F54 02402025 */ move $a0, $s2
.L800C8F58:
/* 0C9B58 800C8F58 0C034960 */ jal __osRestoreInt
/* 0C9B5C 800C8F5C 02002025 */ move $a0, $s0
/* 0C9B60 800C8F60 00001025 */ move $v0, $zero
.L800C8F64:
/* 0C9B64 800C8F64 8FBF0024 */ lw $ra, 0x24($sp)
/* 0C9B68 800C8F68 8FB00018 */ lw $s0, 0x18($sp)
/* 0C9B6C 800C8F6C 8FB1001C */ lw $s1, 0x1c($sp)
/* 0C9B70 800C8F70 8FB20020 */ lw $s2, 0x20($sp)
/* 0C9B74 800C8F74 03E00008 */ jr $ra
/* 0C9B78 800C8F78 27BD0038 */ addiu $sp, $sp, 0x38
/* 0C9B7C 800C8F7C 00000000 */ nop
+37 -47
View File
@@ -27,8 +27,8 @@ f32 D_800DE748 = 0;
f32 D_800DE74C = 0;
s32 D_800DE750 = 0; // Currently unknown, might be a different type.
u32 D_800DE754 = 0;
u32 D_800DE758 = 0;
s32 D_800DE754 = 0;
s32 D_800DE758 = 0;
s32 D_800DE75C = 0; // Currently unknown, might be a different type.
u64 D_800DE760 = 0;
@@ -226,12 +226,12 @@ void dummy_80079810() {
void __scHandleRetrace(OSSched *sc) {
OSScTask *rspTask = NULL;
OSScClient *client;
s32 i;
s32 availRPC;
s32 state;
OSScTask *sp = 0;
OSScTask *dp = 0;
u8 set_curRSPTask_NULL = FALSE;
u8 set_curRDPTask_NULL = FALSE;
s32 i;
if (sc->curRSPTask) {
D_800DE754++;
@@ -241,7 +241,7 @@ void __scHandleRetrace(OSSched *sc) {
D_800DE758++;
}
if (((s32)D_800DE754 > (s32)10) && (sc->curRSPTask)) {
if ((D_800DE754 > 10) && (sc->curRSPTask)) {
D_800DE754 = 0;
set_curRSPTask_NULL = TRUE;
@@ -252,7 +252,7 @@ void __scHandleRetrace(OSSched *sc) {
D_80126110 = 1;
}
if (((s32)D_800DE758 > (s32)10) && (sc->curRDPTask)) {
if ((D_800DE758 > 10) && (sc->curRDPTask)) {
if (sc->curRDPTask->unk68 == 0) {
osSendMesg(sc->curRDPTask->msgQ, &D_800DE738, OS_MESG_BLOCK);
}
@@ -281,8 +281,8 @@ void __scHandleRetrace(OSSched *sc) {
while (osRecvMesg(&sc->cmdQ, (OSMesg *)&rspTask, OS_MESG_NOBLOCK) != -1)
__scAppendList(sc, rspTask);
availRPC = ((sc->curRSPTask == NULL) << 1) | (sc->curRDPTask == NULL);
if (__scSchedule(sc, &sp, &dp, availRPC) != availRPC)
state = ((sc->curRSPTask == NULL) << 1) | (sc->curRDPTask == NULL);
if (__scSchedule(sc, &sp, &dp, state) != state)
__scExec(sc, sp, dp);
D_800DE760++;
@@ -406,79 +406,69 @@ OSScTask *__scTaskReady(OSScTask *t) {
return 0;
}
#if 0
/*
* __scTaskComplete checks to see if the task is complete (all RCP
* operations have been performed) and sends the done message to the
* client if it is.
*/
s32 __scTaskComplete(OSSched *sc, OSScTask *t) {
int rv;
static int firsttime = 1;
if ((t->state & OS_SC_RCP_MASK) == 0) { /* none of the needs bits set */
#ifndef _FINALROM
t->totalTime += osGetTime() - t->startTime;
#endif
#ifdef SC_LOGGING
osLogEvent(l, 504, 1, t);
#endif
rv = osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK);
if (t->list.t.type == M_GFXTASK) {
if ((t->flags & OS_SC_SWAPBUFFER) && (t->flags & OS_SC_LAST_TASK)){
if (firsttime) {
osViBlack(FALSE);
firsttime = 0;
}
osViSwapBuffer(t->framebuffer);
#ifdef SC_LOGGING
osLogEvent(l, 525, 1, t->framebuffer);
#endif
if ((t->state & OS_SC_RCP_MASK) == 0) {
if (t->msgQ) {
if (t->flags & OS_SC_LAST_TASK) {
if (sc->frameCount <= 1) {
sc->unkTask = t;
return 1;
}
if (t->unk68 || t->msg) {
osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK);
} else {
osSendMesg(t->msgQ, &D_800DE730, OS_MESG_BLOCK);
}
sc->frameCount = 0;
return 1;
}
}
if (t->unk68 || t->msg) {
osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK);
return 1;
}
osSendMesg(t->msgQ, &D_800DE730, OS_MESG_BLOCK);
}
return 1;
}
return 0;
}
#else
GLOBAL_ASM("lib/asm/non_matchings/sched/__scTaskComplete.s")
#endif
void __scAppendList(OSSched *sc, OSScTask *t) {
u32 tmp = t->list.t.type;
if (tmp == 2) {
long type = t->list.t.type;
if (type == M_AUDTASK) {
if(sc->audioListTail)
sc->audioListTail->next = t;
else
sc->audioListHead = t;
sc->audioListTail = t;
} else {
} else {
if(sc->gfxListTail)
sc->gfxListTail->next = t;
else
sc->gfxListHead = t;
sc->gfxListTail = t;
}
}
t->next = NULL;
t->state = t->flags & 0x03;
t->state = t->flags & OS_SC_RCP_MASK;
}
void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) {
if (sp) {
if (sp->list.t.type == M_AUDTASK) {
osWritebackDCacheAll(); /* flush the cache */
D_80126120 = osGetCount();
}
sp->state &= ~0x30;
sp->state &= ~(OS_SC_YIELD | OS_SC_YIELDED);
osSpTaskLoad(&sp->list);
osSpTaskStartGo(&sp->list);
D_800DE754 = 0;
@@ -506,7 +496,7 @@ void __scYield(OSSched *sc) {
/*
* Schedules the tasks to be run on the RCP
*/
s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP) {
static s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP) {
s32 avail = availRCP;
OSScTask *gfx = sc->gfxListHead;
OSScTask *audio = sc->audioListHead;