c: osStartThread

This commit is contained in:
Mittenshugg
2020-08-04 15:05:14 -05:00
parent 2cdbb7843c
commit 9d40b86cc8
11 changed files with 65 additions and 116 deletions
+1
View File
@@ -188,6 +188,7 @@ $(BUILD_DIR)/lib/src/osSendMesg.o : OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osSetEventMesg.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osSetTime.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osSetTimer.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osStartThread.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osStopThread.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osTimer.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osViBlack.o: OPT_FLAGS := -O1
+1 -1
View File
@@ -9256,7 +9256,7 @@ glabel __osThreadTail
.word 0x00000000
.word 0xFFFFFFFF
glabel D_800E4888
glabel __RunQueue
.word 0x800E4880
glabel __osActiveQueue
+2 -2
View File
@@ -1,7 +1,7 @@
glabel __osDispatchThread
/* 0D4024 800D3424 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0D4024 800D3424 3C04800E */ lui $a0, %hi(__RunQueue) # $a0, 0x800e
/* 0D4028 800D3428 0C034D05 */ jal __osPopThread
/* 0D402C 800D342C 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0D402C 800D342C 24844888 */ addiu $a0, %lo(__RunQueue) # addiu $a0, $a0, 0x4888
/* 0D4030 800D3430 3C01800E */ lui $at, %hi(__osRunningThread) # $at, 0x800e
/* 0D4034 800D3434 AC224890 */ sw $v0, %lo(__osRunningThread)($at)
/* 0D4038 800D3438 24080004 */ li $t0, 4
+8 -8
View File
@@ -281,8 +281,8 @@ glabel __osException
/* 0D3CE4 800D30E4 AD2A0000 */ sw $t2, ($t1)
/* 0D3CE8 800D30E8 0C034C79 */ jal send_mesg
/* 0D3CEC 800D30EC 24040070 */ li $a0, 112
/* 0D3CF0 800D30F0 3C0A800E */ lui $t2, %hi(D_800E4888) # $t2, 0x800e
/* 0D3CF4 800D30F4 8D4A4888 */ lw $t2, %lo(D_800E4888)($t2)
/* 0D3CF0 800D30F0 3C0A800E */ lui $t2, %hi(__RunQueue) # $t2, 0x800e
/* 0D3CF4 800D30F4 8D4A4888 */ lw $t2, %lo(__RunQueue)($t2)
/* 0D3CF8 800D30F8 2401EFFF */ li $at, -4097
/* 0D3CFC 800D30FC 02018024 */ and $s0, $s0, $at
/* 0D3D00 800D3100 8D5B0118 */ lw $k1, 0x118($t2)
@@ -313,23 +313,23 @@ glabel __osException
/* 0D3D60 800D3160 10000001 */ b .L800D3168
/* 0D3D64 800D3164 00000000 */ nop
.L800D3168:
/* 0D3D68 800D3168 3C0A800E */ lui $t2, %hi(D_800E4888) # $t2, 0x800e
/* 0D3D6C 800D316C 8D4A4888 */ lw $t2, %lo(D_800E4888)($t2)
/* 0D3D68 800D3168 3C0A800E */ lui $t2, %hi(__RunQueue) # $t2, 0x800e
/* 0D3D6C 800D316C 8D4A4888 */ lw $t2, %lo(__RunQueue)($t2)
/* 0D3D70 800D3170 8F490004 */ lw $t1, 4($k0)
/* 0D3D74 800D3174 8D4B0004 */ lw $t3, 4($t2)
/* 0D3D78 800D3178 012B082A */ slt $at, $t1, $t3
/* 0D3D7C 800D317C 10200007 */ beqz $at, .L800D319C
/* 0D3D80 800D3180 00000000 */ nop
/* 0D3D84 800D3184 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0D3D84 800D3184 3C04800E */ lui $a0, %hi(__RunQueue) # $a0, 0x800e
/* 0D3D88 800D3188 03402825 */ move $a1, $k0
/* 0D3D8C 800D318C 0C034CF3 */ jal __osEnqueueThread
/* 0D3D90 800D3190 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0D3D90 800D3190 24844888 */ addiu $a0, %lo(__RunQueue) # addiu $a0, $a0, 0x4888
/* 0D3D94 800D3194 08034D09 */ j __osDispatchThread
/* 0D3D98 800D3198 00000000 */ nop
.L800D319C:
/* 0D3D9C 800D319C 3C09800E */ lui $t1, %hi(D_800E4888) # $t1, 0x800e
/* 0D3DA0 800D31A0 25294888 */ addiu $t1, %lo(D_800E4888) # addiu $t1, $t1, 0x4888
/* 0D3D9C 800D319C 3C09800E */ lui $t1, %hi(__RunQueue) # $t1, 0x800e
/* 0D3DA0 800D31A0 25294888 */ addiu $t1, %lo(__RunQueue) # addiu $t1, $t1, 0x4888
/* 0D3DA4 800D31A4 8D2A0000 */ lw $t2, ($t1)
/* 0D3DA8 800D31A8 AF4A0000 */ sw $t2, ($k0)
/* 0D3DAC 800D31AC 08034D09 */ j __osDispatchThread
+2 -2
View File
@@ -40,10 +40,10 @@ glabel send_mesg
/* 0D3E74 800D3274 0C034D05 */ jal __osPopThread
/* 0D3E78 800D3278 01202025 */ move $a0, $t1
/* 0D3E7C 800D327C 00405025 */ move $t2, $v0
/* 0D3E80 800D3280 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0D3E80 800D3280 3C04800E */ lui $a0, %hi(__RunQueue) # $a0, 0x800e
/* 0D3E84 800D3284 01402825 */ move $a1, $t2
/* 0D3E88 800D3288 0C034CF3 */ jal __osEnqueueThread
/* 0D3E8C 800D328C 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0D3E8C 800D328C 24844888 */ addiu $a0, %lo(__RunQueue) # addiu $a0, $a0, 0x4888
.L800D3290:
/* 0D3E90 800D3290 02400008 */ jr $s2
/* 0D3E94 800D3294 00000000 */ nop
@@ -1,92 +0,0 @@
glabel osStartThread
/* 0C95A0 800C89A0 27BDFFD8 */ addiu $sp, $sp, -0x28
/* 0C95A4 800C89A4 AFBF001C */ sw $ra, 0x1c($sp)
/* 0C95A8 800C89A8 AFA40028 */ sw $a0, 0x28($sp)
/* 0C95AC 800C89AC AFB10018 */ sw $s1, 0x18($sp)
/* 0C95B0 800C89B0 0C034958 */ jal __osDisableInt
/* 0C95B4 800C89B4 AFB00014 */ sw $s0, 0x14($sp)
/* 0C95B8 800C89B8 8FAE0028 */ lw $t6, 0x28($sp)
/* 0C95BC 800C89BC 24010001 */ li $at, 1
/* 0C95C0 800C89C0 00408025 */ move $s0, $v0
/* 0C95C4 800C89C4 95D10010 */ lhu $s1, 0x10($t6)
/* 0C95C8 800C89C8 1221000C */ beq $s1, $at, .L800C89FC
/* 0C95CC 800C89CC 24010008 */ li $at, 8
/* 0C95D0 800C89D0 1621002A */ bne $s1, $at, .L800C8A7C
/* 0C95D4 800C89D4 00000000 */ nop
/* 0C95D8 800C89D8 8FB80028 */ lw $t8, 0x28($sp)
/* 0C95DC 800C89DC 240F0002 */ li $t7, 2
/* 0C95E0 800C89E0 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0C95E4 800C89E4 A70F0010 */ sh $t7, 0x10($t8)
/* 0C95E8 800C89E8 8FA50028 */ lw $a1, 0x28($sp)
/* 0C95EC 800C89EC 0C034CF3 */ jal __osEnqueueThread
/* 0C95F0 800C89F0 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0C95F4 800C89F4 10000021 */ b .L800C8A7C
/* 0C95F8 800C89F8 00000000 */ nop
.L800C89FC:
/* 0C95FC 800C89FC 8FB90028 */ lw $t9, 0x28($sp)
/* 0C9600 800C8A00 8F280008 */ lw $t0, 8($t9)
/* 0C9604 800C8A04 11000005 */ beqz $t0, .L800C8A1C
/* 0C9608 800C8A08 00000000 */ nop
/* 0C960C 800C8A0C 3C09800E */ lui $t1, %hi(D_800E4888) # $t1, 0x800e
/* 0C9610 800C8A10 25294888 */ addiu $t1, %lo(D_800E4888) # addiu $t1, $t1, 0x4888
/* 0C9614 800C8A14 1509000A */ bne $t0, $t1, .L800C8A40
/* 0C9618 800C8A18 00000000 */ nop
.L800C8A1C:
/* 0C961C 800C8A1C 8FAB0028 */ lw $t3, 0x28($sp)
/* 0C9620 800C8A20 240A0002 */ li $t2, 2
/* 0C9624 800C8A24 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0C9628 800C8A28 A56A0010 */ sh $t2, 0x10($t3)
/* 0C962C 800C8A2C 8FA50028 */ lw $a1, 0x28($sp)
/* 0C9630 800C8A30 0C034CF3 */ jal __osEnqueueThread
/* 0C9634 800C8A34 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0C9638 800C8A38 10000010 */ b .L800C8A7C
/* 0C963C 800C8A3C 00000000 */ nop
.L800C8A40:
/* 0C9640 800C8A40 8FAD0028 */ lw $t5, 0x28($sp)
/* 0C9644 800C8A44 240C0008 */ li $t4, 8
/* 0C9648 800C8A48 A5AC0010 */ sh $t4, 0x10($t5)
/* 0C964C 800C8A4C 8FAE0028 */ lw $t6, 0x28($sp)
/* 0C9650 800C8A50 8DC40008 */ lw $a0, 8($t6)
/* 0C9654 800C8A54 0C034CF3 */ jal __osEnqueueThread
/* 0C9658 800C8A58 01C02825 */ move $a1, $t6
/* 0C965C 800C8A5C 8FAF0028 */ lw $t7, 0x28($sp)
/* 0C9660 800C8A60 0C034D05 */ jal __osPopThread
/* 0C9664 800C8A64 8DE40008 */ lw $a0, 8($t7)
/* 0C9668 800C8A68 00408825 */ move $s1, $v0
/* 0C966C 800C8A6C 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0C9670 800C8A70 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0C9674 800C8A74 0C034CF3 */ jal __osEnqueueThread
/* 0C9678 800C8A78 02202825 */ move $a1, $s1
.L800C8A7C:
/* 0C967C 800C8A7C 3C18800E */ lui $t8, %hi(__osRunningThread) # $t8, 0x800e
/* 0C9680 800C8A80 8F184890 */ lw $t8, %lo(__osRunningThread)($t8)
/* 0C9684 800C8A84 17000005 */ bnez $t8, .L800C8A9C
/* 0C9688 800C8A88 00000000 */ nop
/* 0C968C 800C8A8C 0C034D09 */ jal __osDispatchThread
/* 0C9690 800C8A90 00000000 */ nop
/* 0C9694 800C8A94 1000000F */ b .L800C8AD4
/* 0C9698 800C8A98 00000000 */ nop
.L800C8A9C:
/* 0C969C 800C8A9C 3C19800E */ lui $t9, %hi(__osRunningThread) # $t9, 0x800e
/* 0C96A0 800C8AA0 3C09800E */ lui $t1, %hi(D_800E4888) # $t1, 0x800e
/* 0C96A4 800C8AA4 8D294888 */ lw $t1, %lo(D_800E4888)($t1)
/* 0C96A8 800C8AA8 8F394890 */ lw $t9, %lo(__osRunningThread)($t9)
/* 0C96AC 800C8AAC 8D2A0004 */ lw $t2, 4($t1)
/* 0C96B0 800C8AB0 8F280004 */ lw $t0, 4($t9)
/* 0C96B4 800C8AB4 010A082A */ slt $at, $t0, $t2
/* 0C96B8 800C8AB8 10200006 */ beqz $at, .L800C8AD4
/* 0C96BC 800C8ABC 00000000 */ nop
/* 0C96C0 800C8AC0 240B0002 */ li $t3, 2
/* 0C96C4 800C8AC4 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0C96C8 800C8AC8 A72B0010 */ sh $t3, 0x10($t9)
/* 0C96CC 800C8ACC 0C034CB3 */ jal __osEnqueueAndYield
/* 0C96D0 800C8AD0 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
.L800C8AD4:
/* 0C96D4 800C8AD4 0C034960 */ jal __osRestoreInt
/* 0C96D8 800C8AD8 02002025 */ move $a0, $s0
/* 0C96DC 800C8ADC 8FBF001C */ lw $ra, 0x1c($sp)
/* 0C96E0 800C8AE0 8FB00014 */ lw $s0, 0x14($sp)
/* 0C96E4 800C8AE4 8FB10018 */ lw $s1, 0x18($sp)
/* 0C96E8 800C8AE8 03E00008 */ jr $ra
/* 0C96EC 800C8AEC 27BD0028 */ addiu $sp, $sp, 0x28
@@ -37,8 +37,8 @@ glabel osSetThreadPri
/* 0CD4C8 800CC8C8 01802825 */ move $a1, $t4
.L800CC8CC:
/* 0CD4CC 800CC8CC 3C0D800E */ lui $t5, %hi(__osRunningThread) # $t5, 0x800e
/* 0CD4D0 800CC8D0 3C0F800E */ lui $t7, %hi(D_800E4888) # $t7, 0x800e
/* 0CD4D4 800CC8D4 8DEF4888 */ lw $t7, %lo(D_800E4888)($t7)
/* 0CD4D0 800CC8D0 3C0F800E */ lui $t7, %hi(__RunQueue) # $t7, 0x800e
/* 0CD4D4 800CC8D4 8DEF4888 */ lw $t7, %lo(__RunQueue)($t7)
/* 0CD4D8 800CC8D8 8DAD4890 */ lw $t5, %lo(__osRunningThread)($t5)
/* 0CD4DC 800CC8DC 8DF90004 */ lw $t9, 4($t7)
/* 0CD4E0 800CC8E0 8DAE0004 */ lw $t6, 4($t5)
@@ -46,10 +46,10 @@ glabel osSetThreadPri
/* 0CD4E8 800CC8E8 10200006 */ beqz $at, .L800CC904
/* 0CD4EC 800CC8EC 00000000 */ nop
/* 0CD4F0 800CC8F0 24080002 */ li $t0, 2
/* 0CD4F4 800CC8F4 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0CD4F4 800CC8F4 3C04800E */ lui $a0, %hi(__RunQueue) # $a0, 0x800e
/* 0CD4F8 800CC8F8 A5A80010 */ sh $t0, 0x10($t5)
/* 0CD4FC 800CC8FC 0C034CB3 */ jal __osEnqueueAndYield
/* 0CD500 800CC900 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0CD500 800CC900 24844888 */ addiu $a0, %lo(__RunQueue) # addiu $a0, $a0, 0x4888
.L800CC904:
/* 0CD504 800CC904 0C034960 */ jal __osRestoreInt
/* 0CD508 800CC908 02002025 */ move $a0, $s0
@@ -6,9 +6,9 @@ glabel func_800D65B0
/* 0D71C0 800D65C0 3C0F800E */ lui $t7, %hi(__osRunningThread) # $t7, 0x800e
/* 0D71C4 800D65C4 8DEF4890 */ lw $t7, %lo(__osRunningThread)($t7)
/* 0D71C8 800D65C8 240E0002 */ li $t6, 2
/* 0D71CC 800D65CC 3C04800E */ lui $a0, %hi(D_800E4888) # $a0, 0x800e
/* 0D71CC 800D65CC 3C04800E */ lui $a0, %hi(__RunQueue) # $a0, 0x800e
/* 0D71D0 800D65D0 00408025 */ move $s0, $v0
/* 0D71D4 800D65D4 24844888 */ addiu $a0, %lo(D_800E4888) # addiu $a0, $a0, 0x4888
/* 0D71D4 800D65D4 24844888 */ addiu $a0, %lo(__RunQueue) # addiu $a0, $a0, 0x4888
/* 0D71D8 800D65D8 0C034CB3 */ jal __osEnqueueAndYield
/* 0D71DC 800D65DC A5EE0010 */ sh $t6, 0x10($t7)
/* 0D71E0 800D65E0 0C034960 */ jal __osRestoreInt
+41 -3
View File
@@ -1,7 +1,45 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x800C89A0 */
#include "types.h"
#include "macros.h"
#include "libultra_internal.h"
GLOBAL_ASM("lib/asm/non_matchings/osStartThread_0C95A0/osStartThread.s")
extern OSThread* __osRunningThread;
extern OSThread* __RunQueue; //__osRunQueue
void osStartThread(OSThread *t)
{
register u32 saveMask = __osDisableInt();
switch (t->state)
{
case OS_STATE_WAITING:
t->state = OS_STATE_RUNNABLE;
__osEnqueueThread(&__RunQueue, t);
break;
case OS_STATE_STOPPED:
if (t->queue == NULL || t->queue == &__RunQueue)
{
t->state = OS_STATE_RUNNABLE;
__osEnqueueThread(&__RunQueue, t);
}
else
{
t->state = OS_STATE_WAITING;
__osEnqueueThread(t->queue, t);
__osEnqueueThread(&__RunQueue, __osPopThread(t->queue));
}
break;
}
if (__osRunningThread == NULL)
{
__osDispatchThread();
}
else
{
if (__osRunningThread->priority < __RunQueue->priority)
{
__osRunningThread->state = OS_STATE_RUNNABLE;
__osEnqueueAndYield(&__RunQueue);
}
}
__osRestoreInt(saveMask);
}
+3 -1
View File
@@ -10,4 +10,6 @@ fi
#echo "Replace $1 with $2?"
#read
grep -rl "$1" asm/**/*.s src/**/*.{c,h} lib/**/*.{c,s} include/*.h data/dkr.data.s undefined_syms.txt | xargs sed -i "s/\b$1\b/$2/g"
ofiles=$(grep -rl "$1" build/**/*.o)
rm -v $ofiles
grep -rl "$1" asm/**/*.s src/**/*.{c,h} lib/**/*.{c,s} include/*.h data/dkr.data.s undefined_syms.txt | xargs sed -i "s/\b$1\b/$2/g"
+1 -1
View File
@@ -786,7 +786,7 @@ D_800E4870 = 0x800E4870;
D_800E4874 = 0x800E4874;
D_800E4878 = 0x800E4878;
__osThreadTail = 0x800E4880;
D_800E4888 = 0x800E4888;
__RunQueue = 0x800E4888;
__osActiveQueue = 0x800E488C;
__osRunningThread = 0x800E4890;
D_800E4894 = 0x800E4894;