Decompile crashIsDouble

This commit is contained in:
Ryan Dwyer
2021-03-15 17:18:31 +10:00
parent e034b62c07
commit d231178373
5 changed files with 21 additions and 2154 deletions
+2 -2113
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -3007,8 +3007,8 @@
#define STACKSIZE_SCHED 0x400
#define STACKSIZE_MAIN 0x9800
#define STACKSIZE_AUDIO 0x1000
#define STACKSIZE_FAULT 0
#define STACKSIZE_RESET 0
#define STACKSIZE_FAULT 0x2000
#define STACKSIZE_RESET 0x100
#define STAGE_MP_RANDOM 0x01
#define STAGE_MAIANSOS 0x09
+2 -2
View File
@@ -346,7 +346,7 @@ extern u8 g_BootBufferDirtyIndexes[3];
extern OSMesg g_ResetMesg;
extern OSMesgQueue g_ResetMesgQueue;
extern OSThread g_ResetThread;
extern u32 g_ResetSp;
extern u8 g_ResetStack[];
extern OSThread viThread;
extern u32 __viEventQueue;
extern u32 viEventBuf;
@@ -389,7 +389,7 @@ extern u32 var80092830;
extern u32 var80092870;
extern u32 var80092874;
extern OSThread g_FaultThread;
extern u32 g_FaultSp;
extern u8 g_FaultStack[];
extern OSMesgQueue g_FaultMesgQueue;
extern OSMesg g_FaultMesg;
extern volatile u32 g_DmaNumSlotsBusy;
+8 -30
View File
@@ -121,7 +121,7 @@ void crashPrintDescription(u32 mask, char *label, struct crashdescription *descr
void faultCreateThread2(void)
{
osCreateMesgQueue(&g_FaultMesgQueue, &g_FaultMesg, 1);
osCreateThread(&g_FaultThread, THREAD_FAULT, faultproc, NULL, &g_FaultSp, THREADPRI_FAULT);
osCreateThread(&g_FaultThread, THREAD_FAULT, faultproc, NULL, &g_FaultStack[1024], THREADPRI_FAULT);
osStartThread(&g_FaultThread);
}
@@ -371,36 +371,14 @@ u32 crashGetStackStart(u32 sp, s32 tid)
return sp & 0xf0000000;
}
GLOBAL_ASM(
glabel crashIsDouble
/* c398: e7ac0000 */ swc1 $f12,0x0($sp)
/* c39c: 8fa40000 */ lw $a0,0x0($sp)
/* c3a0: 3c01007f */ lui $at,0x7f
/* c3a4: 3421ffff */ ori $at,$at,0xffff
/* c3a8: 00811024 */ and $v0,$a0,$at
/* c3ac: 2c4e0001 */ sltiu $t6,$v0,0x1
/* c3b0: 15c00008 */ bnez $t6,.L0000c3d4
/* c3b4: 01c01025 */ or $v0,$t6,$zero
/* c3b8: 00041dc2 */ srl $v1,$a0,0x17
/* c3bc: 306f00ff */ andi $t7,$v1,0xff
/* c3c0: 000f102b */ sltu $v0,$zero,$t7
/* c3c4: 10400003 */ beqz $v0,.L0000c3d4
/* c3c8: 00000000 */ nop
/* c3cc: 39e200ff */ xori $v0,$t7,0xff
/* c3d0: 0002102b */ sltu $v0,$zero,$v0
.L0000c3d4:
/* c3d4: 03e00008 */ jr $ra
/* c3d8: 00000000 */ nop
);
bool crashIsDouble(f32 value)
{
u32 bits = *(u32*)&value;
u32 fraction = bits & 0x7fffff;
u8 exponent = (u8)(bits >> 23);
//bool crashIsDouble(f32 value)
//{
// u32 bits = *(u32 *)&value;
//
// return (bits & 0x7fffff) != 0
// && ((bits >> 23) & 0xff) != 0
// && ((bits >> 23) & 0xff) != 0xff;
//}
return fraction == 0 || (exponent != 0 && exponent != 0xff);
}
void crashPrintFloat(s32 index, f32 value)
{
+7 -7
View File
@@ -137,15 +137,15 @@ glabel resetproc
/* 2e84: 24040001 */ addiu $a0,$zero,0x1
/* 2e88: 0c012448 */ jal osGetTime
/* 2e8c: 00000000 */ nop
/* 2e90: 3c018009 */ lui $at,%hi(g_ResetSp)
/* 2e94: ac22fdf0 */ sw $v0,%lo(g_ResetSp)($at)
/* 2e90: 3c018009 */ lui $at,%hi(g_ResetStack+0x100)
/* 2e94: ac22fdf0 */ sw $v0,%lo(g_ResetStack+0x100)($at)
/* 2e98: 0c012448 */ jal osGetTime
/* 2e9c: ac23fdf4 */ sw $v1,-0x20c($at)
/* 2ea0: 3c198009 */ lui $t9,%hi(var8008fdf4)
/* 2ea4: 8f39fdf4 */ lw $t9,%lo(var8008fdf4)($t9)
/* 2ea8: 3c188009 */ lui $t8,%hi(g_ResetSp)
/* 2ea8: 3c188009 */ lui $t8,%hi(g_ResetStack+0x100)
/* 2eac: 3c010022 */ lui $at,0x22
/* 2eb0: 8f18fdf0 */ lw $t8,%lo(g_ResetSp)($t8)
/* 2eb0: 8f18fdf0 */ lw $t8,%lo(g_ResetStack+0x100)($t8)
/* 2eb4: 3421add7 */ ori $at,$at,0xadd7
/* 2eb8: 03214821 */ addu $t1,$t9,$at
/* 2ebc: 0121082b */ sltu $at,$t1,$at
@@ -163,9 +163,9 @@ glabel resetproc
/* 2ee8: 00000000 */ nop
/* 2eec: 3c0b8009 */ lui $t3,%hi(var8008fdf4)
/* 2ef0: 8d6bfdf4 */ lw $t3,%lo(var8008fdf4)($t3)
/* 2ef4: 3c0a8009 */ lui $t2,%hi(g_ResetSp)
/* 2ef4: 3c0a8009 */ lui $t2,%hi(g_ResetStack+0x100)
/* 2ef8: 3c010022 */ lui $at,0x22
/* 2efc: 8d4afdf0 */ lw $t2,%lo(g_ResetSp)($t2)
/* 2efc: 8d4afdf0 */ lw $t2,%lo(g_ResetStack+0x100)($t2)
/* 2f00: 3421add7 */ ori $at,$at,0xadd7
/* 2f04: 01616821 */ addu $t5,$t3,$at
/* 2f08: 01a1082b */ sltu $at,$t5,$at
@@ -203,6 +203,6 @@ void resetThreadCreate(void)
{
osCreateMesgQueue(&g_ResetMesgQueue, &g_ResetMesg, 10);
osSetEventMesg(OS_EVENT_PRENMI, &g_ResetMesgQueue, (OSMesg) 669);
osCreateThread(&g_ResetThread, THREAD_RESET, resetproc, 0, &g_ResetSp, THREADPRI_RESET);
osCreateThread(&g_ResetThread, THREAD_RESET, resetproc, 0, &g_ResetStack[STACKSIZE_RESET], THREADPRI_RESET);
osStartThread(&g_ResetThread);
}