feat(t5): Claude wave t5o — 36 banked (sonnet 29/31, opus 6/8, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5)

This commit is contained in:
Drew T
2026-08-27 15:59:13 -06:00
parent 1856524bec
commit 6a601a0fce
23 changed files with 859 additions and 37 deletions
+35 -2
View File
@@ -15,7 +15,19 @@ void func_800CCB28(s32 param_1) {
}
INCLUDE_ASM("asm/md_MAIN_044/nonmatchings/md_MAIN_044", func_800CCB78);
extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2);
extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8);
extern void func_801599A4(void *a0);
extern void func_80159B3C(void *a0);
void func_800CCB78(void *a0) {
func_8014B5C4((s32 *)a0, 3, 0);
func_801466F0(7, (s32)a0, 0, 0, 0, 0, 0, 0);
*(s16 *)((s32)a0 + 0x1C8) = 0xFF;
func_801599A4(a0);
func_80159B3C(a0);
}
extern void (*D_800CE1F4[])(s32);
extern void func_800CCE68(void);
@@ -65,7 +77,28 @@ void func_800CCCA0(s32 param_1) {
}
INCLUDE_ASM("asm/md_MAIN_044/nonmatchings/md_MAIN_044", func_800CCD2C);
extern s32 func_800CCF30(void *a0);
void func_800CCD2C(s32 param_1) {
register s32 p1 __asm__("$17");
register s32 s0 __asm__("$16");
s16 v0;
p1 = param_1;
s0 = *(s32 *)(p1 + 0x20);
if (func_800CCF30((void *)param_1) == 0) {
v0 = *(u16 *)(s0 + 0x18) + 0x100;
*(s16 *)(s0 + 0x18) = v0;
if (v0 >= 0x1001) {
v0 = 0x1000;
*(s16 *)(s0 + 0x18) = v0;
func_80146CA0((void *)p1);
}
func_800CCF58(s0, *(s16 *)(s0 + 0x18));
func_800CCE88(p1);
}
}
INCLUDE_ASM("asm/md_MAIN_044/nonmatchings/md_MAIN_044", func_800CCDB0);
+13 -1
View File
@@ -3484,7 +3484,19 @@ s32 func_80180734(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_8018078C);
extern s16 func_8017DA9C(void);
s32 func_8018078C(s32 a0) {
s16 v1;
v1 = func_8017DA9C();
if (v1 != 0) {
*(s16 *)(*(s32 *)(a0 + 0xD4) + 0x108) = v1 - 1;
return 0;
}
return 1;
}
extern s32 *D_80126B78;
+65 -1
View File
@@ -3272,7 +3272,71 @@ void func_8017F404(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8017E6F0", func_8017F470);
extern s32 func_801789AC(s32 arg0);
extern void func_80178CBC(s32 arg0, s32 arg1);
extern s32 func_800291B4(s32 arg);
extern void func_800291A0(s32, s32);
extern u8 D_8019F234[];
extern u8 D_8019F264[];
extern u8 D_8019F284[];
void func_8017F470(s32 a0)
{
/* RC-12 (cookbook §136d-1): the `$0`-add opaque copy. Without it cse.c's
* make_regs_eqv promotes the longer-lived copy `mode` to canonical and
* canon_reg rewrites the compare, giving `slti $v0,$a1,0xD` where the
* target reads the source register: `slti $v0,$v0,0xD`. */
register s32 zr __asm__("$0");
s16 sVar1;
s32 result;
s32 cnt;
s32 mode;
sVar1 = (s16)func_801789AC(a0);
if (sVar1 == 1) {
goto case1;
}
if (sVar1 < 2) {
goto end;
}
if (sVar1 == 2) {
goto case2;
}
if (sVar1 == 3) {
goto case3;
}
goto end;
case1:
func_80178CBC(a0, (s32)D_8019F234);
result = *(u16 *)(a0 + 2) + 1;
goto store;
case2:
if (*(s16 *)(a0 + 0x108) == 0) {
mode = func_800291B4(0xDF) & 0xFF;
cnt = mode + 1;
*(s16 *)(a0 + 0x108) = cnt;
mode = cnt + zr;
if (cnt >= 0xD) {
mode = 0;
}
func_800291A0(0xDF, mode & 0xFF);
}
func_80178CBC(a0, (s32)D_8019F264);
result = 4;
goto store;
case3:
func_80178CBC(a0, (s32)D_8019F284);
result = 5;
store:
*(u16 *)(a0 + 2) = result;
end:
return;
}
extern s32 func_801789AC(s32 arg0);
extern void func_80178CBC(s32 arg0, s32 arg1);
+15 -1
View File
@@ -11386,7 +11386,21 @@ s32 func_80188114(void)
}
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_80188168);
extern int D_800C7C60;
extern int *D_800C7C64;
extern int D_800A2E20;
extern int D_800AEFA8;
extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10);
s32 func_80188168(void)
{
int *p = &D_800C7C60;
*p = 0x18;
D_800C7C64 = &D_800A2E20;
((void (*)(int, int, int *, int, int *))func_8001ABBC)(0, 0, &D_800AEFA8, 0, p);
}
// @class: remat
+39 -2
View File
@@ -3720,7 +3720,34 @@ void func_8017F220(void) {
}
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8017D898", func_8017F2B4);
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
extern void func_8017F3E4(void *a0);
void func_8017F2B4(void) {
extern u8 D_80126948[];
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
D_80126954 = 0x190;
D_8012695C = 0x3E8;
D_80126968 = 0xA6;
D_8012696A = 0;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x50;
D_8012697A = 0;
func_8012A018((s32)func_8017F3E4, 4);
func_8012A094((s32)D_80126948);
func_8017F3E4(D_80126948);
}
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
@@ -6134,7 +6161,17 @@ void func_80182794(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8017D898", func_801828A0);
extern int func_80178970(void);
extern void func_80178D18(void);
extern void func_801822D0(void *arg0);
void func_801828A0(void *a0) {
if (((s32 (*)(s32))func_80178970)((s32)a0) != 0) {
((void (*)(s32))func_80178D18)((s32)a0);
func_801822D0(a0);
}
}
extern void func_8018248C(s32 a0, s32 a1);
+30 -2
View File
@@ -3336,7 +3336,16 @@ void func_8017E844(u8 *a0) {
}
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8017D5C0", func_8017E8E8);
extern s32 func_80171990(u8 *a0);
void func_8017E8E8(s32 *a0) {
*(s16 *)((u8 *)a0 + 0x74) = 0x1000;
*(s16 *)((u8 *)a0 + 0x72) = 0x1000;
*(s16 *)((u8 *)a0 + 0x70) = 0x1000;
*(s32 *)((u8 *)a0 + 0x200) = 0x10;
func_80171990((u8 *)a0);
}
extern void func_80171928(void *a0);
void func_8017E91C(void *a0) {
@@ -3392,7 +3401,26 @@ register void *s0 __asm__("$16");
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8017D5C0", func_8017E9CC);
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8017D5C0", func_8017EA10);
extern s32 D_8018FB78;
extern u8 D_801830B0;
extern u8 D_80182D58;
extern s32 func_8017EC64();
extern s32 func_8013767C(s32 a0);
extern void func_80154274(s32 *a0, s32 a1);
extern void func_80147324(s32 a0);
extern s32 func_80171990(u8 *a0);
void func_8017EA10(void *a0) {
if (D_8018FB78 == 0) {
if (func_8017EC64(a0) < 0x190) {
*(s32 *)((s32)a0 + 0x198) = func_8013767C(&D_801830B0);
func_80154274((s32 *)a0, &D_80182D58);
func_80147324(0x7E7);
func_80171990((u8 *)a0);
}
}
}
extern s32 func_8017EC64();
+27 -1
View File
@@ -5533,7 +5533,33 @@ s32 param_1;
}
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_8017F794);
extern s32 func_8018033C(s32 a0, s32 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8017FC6C(s32 a0);
extern s32 func_8012BEE8(s32 a0);
void func_8017F794(s32 a0) {
register s32 s0 __asm__("$16");
s32 v0;
s32 v1;
s0 = a0;
__asm__ __volatile__("");
if (*(s32 *)(s0 + 0x1C) > 0x15) {
v0 = func_8018033C(s0, 8);
v1 = *(s32 *)(s0 + 0x20);
*(u16 *)(v1 + 0x12) = *(u16 *)(v1 + 0x12) + v0;
}
v0 = *(s32 *)(s0 + 0x1C);
if ((v0 == 0x15 && (func_8002D4C8(0x522, 0), *(s32 *)(s0 + 0x1C) == v0)) ||
*(s32 *)(s0 + 0x1C) == 0xB || *(s32 *)(s0 + 0x1C) == 1) {
func_8017FC6C(s0);
}
if (func_8012BEE8(s0) != 0) {
*(u16 *)(s0 + 2) = 2;
}
}
extern void func_8012B2CC(s32 a0);
extern void func_8012B23C(s32 a0);
+21 -1
View File
@@ -3189,7 +3189,27 @@ void func_80182374(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80181F94", func_801823BC);
#include "common.h"
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8002AC00(s32 a0);
void func_801823BC(s32 a0)
{
s32 arg0;
arg0 = 0x43F;
if (*(u16 *)(a0 + 0x5E) == 0x1D) {
arg0 = 0x440;
}
func_8002D4C8(arg0, 0);
*(s32 *)(a0 + 0x1C) = 0x5A;
*(u16 *)(a0 + 0xDE) = 0;
*(s32 *)(a0 + 0xB4) = *(s32 *)(a0 + 0xB4) & ~0x2000;
func_8002AC00(2);
}
extern void func_8002A04C(s32 a0);
extern void func_8012C098(void);
+23 -2
View File
@@ -3598,7 +3598,17 @@ void func_8017DD14(s32 *a0) {
}
INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8017C730", func_8017DD44);
extern void func_8017EE30(void);
extern void func_800D1724(s32 a0);
extern void func_80171928(void *a0);
extern u8 D_80183A5C;
s32 func_8017DD44(s32 a0) {
func_8017EE30();
func_800D1724((s32)&D_80183A5C);
func_80171928((void *)a0);
}
extern void func_8017DE84(s32 arg0);
void func_8017DD84(void) {
@@ -4116,7 +4126,18 @@ void func_8017EE30(void) {
}
INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8017C730", func_8017EE98);
void func_8017EE98(s32 arg0) {
extern s32 func_8017F01C(s32 a0);
extern void func_8012C098(void *a0);
extern void (*D_80183D40[])(s32);
if (func_8017F01C(arg0) != 0) {
func_8012C098((void *)arg0);
return;
}
D_80183D40[*(u16 *)(arg0 + 2)](arg0);
}
extern s32 func_8012C194(void);
extern void func_8001CEC0(s32 a0, void *a1);
+30 -2
View File
@@ -4262,7 +4262,15 @@ void func_8017DE90(s32 *a0) {
}
INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8017AE2C", func_8017DEB0);
void func_8017DEB0(void *a0) {
if (*(s16 *)(*(s32 *)((char *)a0 + 0x64) + 0xE0) != 0) {
*(u16 *)((char *)a0 + 0xE0) = 0x2A;
*(u16 *)((char *)a0 + 0xE2) = 0x18;
*(u16 *)((char *)a0 + 0x2) = *(u16 *)((char *)a0 + 0x2) + 1;
*(u16 *)((char *)a0 + 0xE4) = 0x26;
}
}
extern void func_8017D6B4(void);
@@ -4307,7 +4315,27 @@ void func_8017DFCC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8017AE2C", func_8017E008);
extern u8 D_800D387C[];
extern u8 D_800D3888[];
extern void func_80128EA8(s32 a0, s32 a1, s32 a2);
void func_8017E008(s32 param_1)
{
*(u32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (u32)&D_800D387C;
*(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000;
*(u8 *)(*(s32 *)(param_1 + 0x20) + 0x27) = 0x9c;
func_80128EA8(*(s32 *)(param_1 + 0x20), param_1 + 0x24, (s32)&D_800D3888);
*(s32 *)(param_1 + 0x10) = 0;
*(s32 *)(param_1 + 0x14) = 0xffa40000;
*(s32 *)(param_1 + 0x18) = 0;
*(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
}
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
extern void func_801292C8(u8 *a0);
+24 -2
View File
@@ -4040,7 +4040,18 @@ void func_8017F0A0(void *a0)
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F140);
void func_8017F140(void *a0) {
extern void func_8017ED9C(s32);
extern void func_8017ECD0(s32);
if (((s32 (*)(void *))func_8017ED9C)(a0) != 0) {
func_8017ECD0((s32)a0);
} else {
s32 v1 = *(s32 *)((s8 *)a0 + 0x20);
*(u16 *)(v1 + 0x10) = *(u16 *)(v1 + 0x10) + 0x80;
}
}
void func_8017F198(s32 a0) {
extern s32 *D_80126B78;
@@ -4210,7 +4221,18 @@ void func_8017F5FC() {
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F664);
extern s32 func_8017F7E8(void);
extern void func_8012C098(void *param_1);
extern void (*D_80184F18[])(void *);
void func_8017F664(void *a0) {
if (func_8017F7E8() != 0) {
func_8012C098(a0);
} else {
D_80184F18[*(u16 *)((s32)a0 + 2)](a0);
}
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F6C8);
+27 -2
View File
@@ -3338,7 +3338,20 @@ void func_8017BF20(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8017AE2C", func_8017BF58);
extern s32 func_80184794(void);
extern void func_80171A1C(u8 *a0);
extern s32 func_80174650(s32);
void func_8017BF58(void *a0) {
s32 v0;
v0 = func_80184794();
if (v0 != 0) {
func_80171A1C((u8 *)a0);
func_80174650((s32)a0);
}
}
DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */
@@ -3362,7 +3375,19 @@ void func_8017C004(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8017AE2C", func_8017C03C);
extern s32 func_8018473C(void);
extern void func_80171A1C(u8 *a0);
extern s32 func_80174650(s32 a0);
void func_8017C03C(void *a0) {
s32 s0 = (s32)a0;
if (func_8018473C() == 0) {
return;
}
func_80171A1C((u8 *)s0);
func_80174650(s0);
}
DEFINE_func_8017C07C() /* dedup: shared engine-core @0x8017C07C (src/shared) */
+39 -1
View File
@@ -5044,7 +5044,45 @@ s32 func_80188CA0(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80188CB4);
void func_80188CB4(s32 a0) {
extern void func_801439C0(u8 *a0);
extern void func_8012B200(u8 *a0);
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_801292C8(u8 *a0);
extern void func_8002D4C8(s32 a0, s32 a1);
extern u16 D_80126B5E;
extern u16 D_80126B66;
register s32 self __asm__("$16") = a0; /* $s0 */
u8 *ptr;
s32 val1;
s32 val2;
s32 t2;
func_801439C0(*(u8 **)(self + 0xCC));
func_8012B200((u8 *)self);
*(s32 *)(self + 0x14) = 0x80000;
*(u16 *)(self + 6) = D_80126B5E;
*(u16 *)(self + 0xE) = D_80126B66;
ptr = *(u8 **)(self + 0x20);
val1 = *(u16 *)(ptr + 0x18);
*(s16 *)(self + 0xDC) = (val1 << 16) >> 19;
ptr = *(u8 **)(self + 0x20);
val2 = *(u16 *)(ptr + 0x1A);
*(s16 *)(self + 0xDE) = (val2 << 16) >> 19;
func_8012AD44((s32 *)self, 7);
t2 = *(s32 *)(self + 0xD0);
if (t2 != 0) {
func_801292C8((u8 *)t2);
}
func_8002D4C8(0x87D, 0);
}
extern void func_8012AD44(s32 *a0, s16 a1);
void func_80188D64(void *arg0) {
+41 -2
View File
@@ -4632,9 +4632,48 @@ void func_801880AC(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80185C14", func_80188164);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern void func_80180B44(s32);
extern void func_80183E04(void *a0);
void func_80188164(s32 a0)
{
s32 v0;
v0 = *(s32 *)(a0 + 0x1C) - 1;
*(s32 *)(a0 + 0x1C) = v0;
if (v0 == 0) {
*(s16 *)(a0 + 2) = 2;
}
v0 = func_8012C658(0xFE, 2, a0);
if (v0 != 0) {
((void (*)(s32, s32))func_80180B44)(v0, 6);
}
func_80183E04((void *)a0);
}
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern void func_80180B44(s32);
extern void func_80183E04(void *a0);
void func_801881CC(s32 a0)
{
u16 v0;
s32 v1;
v0 = *(u16 *)(a0 + 0xA) - 0x18;
*(u16 *)(a0 + 0xA) = v0;
if ((s16)v0 <= 0) {
*(s16 *)(a0 + 2) = 3;
}
v1 = func_8012C658(0xFE, 2, a0);
if (v1 != 0) {
((void (*)(s32, s32))func_80180B44)(v1, 6);
}
func_80183E04((void *)a0);
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_80185C14", func_801881CC);
extern void func_8012C218(void *a0);
extern void func_80183E04(void *a0);
+59 -3
View File
@@ -3679,7 +3679,24 @@ void func_8017FAB8(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8017DB5C", func_8017FB84);
extern void func_8012931C(struct vec *a0);
extern void func_801292C8(u8 *a0);
void func_8017FB84(void *a0) {
s32 v0;
v0 = *(s32 *)((s32)a0 + 0x1C);
if (v0 == 0) {
func_8012931C((struct vec *)a0);
v0 = func_80128ED8(*(s32 *)((s32)a0 + 0x20), (s32 *)((s32)a0 + 0x24));
if (v0 != 0) {
func_801292C8((u8 *)a0);
}
} else {
*(s32 *)((s32)a0 + 0x1C) = v0 - 1;
}
}
extern void (*D_80186298[])(void);
@@ -3910,7 +3927,20 @@ void func_8018011C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8017DB5C", func_801801C0);
extern u16 D_80126B66;
extern u8 D_8018634C;
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern void func_801746DC(void);
void func_801801C0(s32 param_1)
{
if ((*(s16 *)&D_80126B66) >= 0x800) {
*(s16 *)(param_1 + 2) = 3;
func_80178B18(param_1, (s32)&D_8018634C);
func_801746DC();
}
}
extern s32 func_801789AC(s32 arg0);
extern void func_80178D18(void);
@@ -4034,7 +4064,33 @@ void func_8018043C(void *a0)
}
INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8017DB5C", func_801804EC);
#include "common.h"
extern void func_800183E0(s32 a0);
extern void (*D_80186478[])(void *);
extern s32 func_8004787C(s32 a0);
extern void func_8017FF20(void *a0);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_801804EC(void *a0)
{
u16 h;
func_800183E0(*(s32 *)((u8 *)D_80186478 + ((*(u16 *)((u8 *)a0 + 0xFC) << 1) & 0x1C)));
h = *(u16 *)((u8 *)a0 + 0xFE) + 0x40;
*(u16 *)((u8 *)a0 + 0xFE) = h;
if ((s16)h >= 0x201 || (s16)h < 0x600) {
*(u16 *)((u8 *)a0 + 0xFC) = 8;
}
*(u16 *)((u8 *)a0 + 6) = *(u16 *)((u8 *)a0 + 6) - 2;
*(s16 *)((u8 *)a0 + 0xA) = -0x32B - ((func_8004787C(*(s16 *)((u8 *)a0 + 0xFE)) << 6) >> 12);
if (*(s16 *)((u8 *)a0 + 0xFE) == 0x800) {
*(u16 *)((u8 *)a0 + 2) = 2;
func_8017FF20((void *)0);
func_8002D4C8(0x63F, 0);
}
}
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
+82 -4
View File
@@ -4320,7 +4320,33 @@ void func_8018166C(void) {
}
INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_80181708);
extern void func_8012A018(s32 a0, s32 a1);
extern void func_8012A094(s32 a0);
extern void func_801817A4(void *a0);
extern u8 D_80126948[];
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
void func_80181708(void) {
D_80126954 = 0x190;
D_8012695C = 0x4B0;
D_80126968 = 0xE3;
D_8012696A = 0x800;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x80;
D_8012697A = 0;
func_8012A018(func_801817A4, 3);
func_8012A094(D_80126948);
func_801817A4(D_80126948);
}
extern void (*D_8018D348[])(void);
@@ -4330,7 +4356,29 @@ void func_801817A4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_801817E0);
extern s32 D_80126B58;
extern u16 func_80148800(s32 *a0);
extern void func_80181BCC(s32 param_1, s16 *param_2);
typedef struct { s16 w[4]; } V4_801817E0;
void func_801817E0(s32 param_1) {
extern s16 D_8018D358[];
extern s16 D_80126940;
V4_801817E0 sp10;
s16 *s1;
if (func_80148800(&D_80126B58) & 3) {
*(u8 *)(param_1 + 5) = (*(u8 *)(param_1 + 5) + 1) & 1;
*(s32 *)(param_1 + 0x14) = D_8018D358[*(u8 *)(param_1 + 5)];
}
sp10 = *(V4_801817E0 *)&D_80126940;
s1 = &sp10.w[0];
sp10.w[0] = 0;
sp10.w[2] = -0x920;
func_80181BCC(param_1, s1);
}
typedef struct { s16 w[4]; } V4_88;
@@ -4399,7 +4447,29 @@ void func_8018188C(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_80181A68);
extern s32 D_80126B58;
extern u16 func_80148800(s32 *a0);
extern void func_80181BCC(s32 param_1, s16 *param_2);
typedef struct { s16 w[4]; } V4_80181A68;
void func_80181A68(s32 param_1) {
extern s16 D_8018D360[];
extern s16 D_80126940;
V4_80181A68 sp10;
s16 *s1;
if (func_80148800(&D_80126B58) & 3) {
*(u8 *)(param_1 + 5) = (*(u8 *)(param_1 + 5) + 1) & 1;
*(s32 *)(param_1 + 0x14) = D_8018D360[*(u8 *)(param_1 + 5)];
}
sp10 = *(V4_80181A68 *)&D_80126940;
s1 = &sp10.w[0];
sp10.w[0] = 0;
sp10.w[2] = 0x3A0;
func_80181BCC(param_1, s1);
}
typedef struct { s16 w[4]; } V4_80181B14;
extern s32 D_80126B58;
@@ -4581,7 +4651,15 @@ void func_801820A8(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_8018210C);
void func_8018210C(int param_1)
{
if (*(short *)(param_1 + 0xFC) != 0) {
*(short *)(param_1 + 0xFC) = *(short *)(param_1 + 0xFC) - 1;
*(short *)(param_1 + 6) = *(u16 *)(param_1 + 6) + *(u16 *)(param_1 + 0x12);
*(short *)(param_1 + 0xA) = *(u16 *)(param_1 + 0xA) - 4;
}
}
void func_80182150(s32 a0) {
extern s32 func_8012C354(s32, s32);
+17 -1
View File
@@ -5928,7 +5928,23 @@ void func_801803F4(void *a0)
}
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_801804C0);
void func_801804C0(s32 param)
{
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern u8 D_80189458;
extern u8 D_801AFBA0[];
*(s16 *)(param + 2) = 2;
func_8012E8E0(param, (s32)&D_80189458);
if (*(s16 *)(param + 0x70) != 0) {
func_8012A828(param, D_801AFBA0);
}
*(s32 *)(param + 0x1C) = 0x20;
func_8002D4C8(0x5BF, 0);
}
s32 func_8018052C(void *param)
{
+27 -1
View File
@@ -3642,7 +3642,33 @@ void func_8017F0FC(void) {
}
INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8017D898", func_8017F194);
void func_8017F194(void) {
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
extern u8 D_80126948[];
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
extern void func_8017F2C8(void *a0);
D_80126954 = 0x190;
D_8012695C = 0x3E8;
D_80126968 = 0x35;
D_8012696A = 0x400;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x73;
D_8012697A = 0;
func_8012A018((s32)func_8017F2C8, 1);
func_8012A094((s32)D_80126948);
func_8017F2C8(D_80126948);
}
extern void func_8012A018(s32 a, s32 b);
+45 -1
View File
@@ -4789,7 +4789,51 @@ extern void func_80181864(void);
}
INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C", func_80181864);
/* func_80181864 — ov_SC03_116_jr_8017AE2C, 21 ins.
*
* COOKBOOK ESCAPE 4 (matching-cookbook L23505, indexed at cookbook-index.md:15):
* "(void)-PARAMETERISED DEFINITION + register __asm__("$4") CAPTURE".
*
* DO NOT 'fix' this signature back to (void *a0, void *a1). The destination TU
* src/ov_SC03_116/ov_SC03_116_jr_8017AE2C.c:4785 carries a FILE-SCOPE
* extern void func_80181864(void);
* immediately above the splice point, serving the already-banked func_80181844
* (:4788), which calls it with no arguments so the $a0/$a1 pass-through emits no
* `move` (§263). A two-argument definition dies at
* cc1: 4795: conflicting types for `func_80181864'
* 4785: previous declaration of `func_80181864'
* which is precisely why the previous MATCHing draft was refused by the
* whole-binary gate (bucket=integration, closeness 0).
*
* Verified this session with the pinned triple (cpp -> cc1 -O2 -> maspsx 2.56 -> as)
* on the REAL spliced TU: cc1 rc=0, and all 21 emitted words are byte-identical to
* asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8017AE2C/func_80181864.s.
* The pins are safe under §74: this is a leaf (no jal), so no caller-saved pin
* spans a call, and neither $4 nor $5 is written after entry.
*/
extern u16 D_800B99DA;
void func_80181864(void)
{
register void *a0 __asm__("$4");
register void *a1 __asm__("$5");
s32 v1;
v1 = *(s16 *)((s32)a0 + 0xFC);
if (D_800B99DA & 1) {
v1 -= 4;
}
if (v1 < 0) {
v1 = 0;
} else if (v1 >= 0x100) {
v1 = 0xFF;
}
*(s32 *)((s32)a1 + 0) = v1;
*(s32 *)((s32)a1 + 4) = 0;
*(u16 *)((s32)a0 + 0xFC) = *(u16 *)((s32)a0 + 0xFC) + 4;
}
extern s32 func_801818DC();
void func_801818B8(void *a0) {
+80 -1
View File
@@ -3436,7 +3436,86 @@ extern void func_80184CB8(s32*, s32);
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80181804", func_801821D4);
extern s32 func_801847BC(void *a0, void *a1);
extern s32 func_80184DD0(s32 a0);
extern s32 func_80029504(void);
extern s32 func_80184BAC(s32 a0, s32 a1);
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8012E88C(s32 a0);
extern void func_8012A828(s32 *a0, s32 a1);
extern void func_80184C90(s32 a0);
extern void func_80184CB8(s32 *a0, s32 a1);
extern s32 func_801788B8(s32 a0, s32 a1);
extern s32 func_80182544(void *a0);
extern s32 func_801825BC(void *a0);
extern s16 D_80191C18;
extern s16 D_80191C10;
extern s16 D_80191C08;
extern s16 D_801B9B50;
void func_801821D4(void *a0)
{
s32 state;
s32 hp;
s32 v0;
s32 v1;
register s32 arg0 __asm__("$4");
void *ptr;
if (func_801847BC(a0, (void *)&D_80191C18) != 0) {
/* func_80184DD0 takes no argument at this call site; the TU's file-scope
* prototype declares one, so call through a no-parameter pointer type
* (the TU's own idiom, cf. ((void (*)(s32, s32))func_80184CB8)(...)). */
state = ((s32 (*)(void))func_80184DD0)();
hp = func_80029504();
arg0 = 0xA;
if (state == 2 && hp < 0x276) {
goto call15;
}
v0 = func_80184BAC(arg0, 0x10);
if (v0 != 0) {
v1 = 0;
goto dispatch;
}
arg0 = 0x10;
call15:
v0 = func_80184BAC(arg0, 0x15);
if (v0 != 0) {
v1 = 1;
} else {
v1 = 2;
}
dispatch:
switch (v1) {
case 0:
*(s16 *)((char *)a0 + 2) = 3;
func_8012E8E0((s32)a0, (s32)&D_80191C10);
func_8012E88C((s32)a0);
func_8012A828((s32 *)a0, (s32)&D_801B9B50);
func_80184C90((s32)a0);
break;
case 1:
v0 = 5;
goto store;
case 2:
v0 = 1;
store:
*(s16 *)((char *)a0 + 2) = v0;
func_80184CB8((s32 *)a0, (s32)&D_80191C08);
break;
}
ptr = *(void **)((char *)a0 + 0x68);
*(s16 *)((char *)ptr + 0xC) = 0x7FFF;
*(s32 *)((char *)a0 + 0xD4) = func_801788B8((s32)a0, (s32)&func_80182544);
func_8012E8E0(*(s32 *)((char *)a0 + 0xD4), (s32)&D_80191C08);
*(s32 *)((char *)a0 + 0xD8) = func_801788B8((s32)a0, (s32)&func_801825BC);
}
}
DEFINE_func_8018233C() /* dedup: shared engine-core @0x8018233C (src/shared) */
+38 -2
View File
@@ -3152,7 +3152,7 @@ void *arg0;
extern s32 func_801844BC(void *a0, void *a1);
extern void func_80183100();
extern s32 func_80183100();
extern short D_80191C54;
extern short D_80191C44;
extern s32 func_801848AC(s32 arg0, s32 arg1);
@@ -3190,7 +3190,43 @@ void func_8018305C(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80182A74", func_80183100);
#include "common.h"
extern s32 func_8012BD14(s32 a0);
extern s32 func_80178BF8();
extern void func_80172710(void);
extern s32 func_801845DC(void);
s32 func_80183100(void *a0)
{
s32 ok;
switch (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 2)) {
case 6:
case 0xC:
ok = ((s32 (*)(void *))func_801845DC)(a0);
break;
case 2:
case 9:
if (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x34) != 2) {
return 0;
}
ok = func_8012BD14(*(s32 *)((s32)a0 + 0x64)) < 0x4001;
break;
default:
return 0;
}
if (ok == 0) {
return 0;
}
{
s32 p2 = *(s32 *)((s32)a0 + 0x64);
*(u16 *)(p2 + 2) = *(u16 *)(p2 + 2) + 1;
}
func_80178BF8();
return (s32)func_80172710;
}
#include "common.h"
+20 -1
View File
@@ -7317,7 +7317,26 @@ void func_801862C0(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80186334);
extern u32 D_801DFF68;
extern void func_801863C8(s32);
void func_80186334(s32 param_1)
{
if (D_801DFF68 != 0) {
*(u8 *)(*(s32 *)(param_1 + 0xCC) + 0x27) = 0xA5;
*(u8 *)(*(s32 *)(param_1 + 0xD0) + 0x27) = 0xA6;
*(u16 *)(param_1 + 2) = 3;
return;
}
if (func_8018656C((s32 *)param_1) == 1) {
func_801863C8(param_1);
func_8018641C(param_1);
} else {
*(u8 *)(*(s32 *)(param_1 + 0xCC) + 0x27) = 0xA5;
func_8018641C(param_1);
}
}
void func_801863C0(void) {
}
+62 -1
View File
@@ -3668,7 +3668,68 @@ void func_80180D90(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_80180DCC);
#include "common.h"
extern s32 func_80012A60(s32 a0, s32 a1);
extern s32 func_80171990(u8 *a0);
extern void *D_801B9F10;
void func_80180DCC(void *a0)
{
register void *s3 __asm__("$19") = a0;
void *s2;
register void *p __asm__("$3");
register s32 v1 __asm__("$3");
register s32 v0 __asm__("$2");
s32 bits;
register s32 s0 __asm__("$16");
s32 s1;
s2 = *(void **)((s32)s3 + 0x20);
func_80180FF4(s3);
p = D_801B9F10;
if (p == 0) {
goto END;
}
v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;
p = *(void **)((s32)p + 0x20);
bits = *(u16 *)((s32)p + 0x12) & 0x400;
s0 = v0 & 0xFFF;
if (bits == 0) {
goto ELSE;
}
s1 = func_80012A60(s0, 0x400);
v0 = func_80012A60(s0, 0xC00);
v1 = (s16)s1;
v0 = (s16)v0;
v0 = (v0 < v1);
if (v0 != 0) {
goto TRUE1;
}
v0 = 0x400;
goto STORE;
TRUE1:
v0 = 0xC00;
goto STORE;
ELSE:
s1 = func_80012A60(s0, 0);
v0 = func_80012A60(s0, 0x800);
v1 = (s16)s1;
v0 = (s16)v0;
v0 = (v0 < v1);
if (v0 != 0) {
goto TRUE2;
}
*(u16 *)((s32)s2 + 0x12) = 0;
goto END;
TRUE2:
v0 = 0x800;
STORE:
*(u16 *)((s32)s2 + 0x12) = v0;
END:
func_80171990((u8 *)s3);
}
extern s32 func_801810D0();