feat(phase-21): worker gate — +16 fns x0 propagated (fleet 61.19%)

This commit is contained in:
Drew T
2026-06-23 02:02:54 -06:00
parent 43d089ec64
commit df88ca83ba
+335 -16
View File
@@ -450,7 +450,32 @@ DEFINE_func_80142D38() /* dedup: shared engine-core @0x80142D38 (src/shared) */
DEFINE_func_80142DB8() /* dedup: shared engine-core @0x80142DB8 (src/shared) */
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80142DC4);
// @class: regalloc-order
// @stuck: none — MATCH (combined store-assign `*(p)=v0=call()` keeps test/store on $v0, copy to $s0 for the else)
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001CA1C(s32 a0, s32 a1);
extern void func_80142B2C(void *arg0);
extern int D_80187F58;
void func_80142DC4(int param_1)
{
int v0;
*(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)();
if (v0 == 0) {
((void (*)(int))func_8012CAE4)(param_1);
} else {
((void (*)(s32, s32))func_8001CA1C)(v0, (s32)&D_80187F58);
*(short *)(v0 + 0x1a) = 0x1800;
*(short *)(v0 + 0x18) = 0x1800;
*(short *)(param_1 + 0xfc) = 0;
((void (*)(int))func_80142B2C)(param_1);
}
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80142E38);
@@ -2212,7 +2237,26 @@ INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8015094C);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80150A70);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80150B28);
// @class: regalloc-order
// @stuck: none — MATCH (fn-ptr table; split idx-1 into a $v0-pinned temp to stop (idx-1)*4 strength-reducing into a -4 load offset AND land the subtract in $v0)
extern s32 D_800AE6B0;
extern void (*D_80188798[])(void);
void func_80150B28(int param_1) {
u32 idx;
register u32 sub __asm__("$2");
if ((D_800AE6B0 & 0x80FFFFFF) == 0) {
idx = *(u16 *)(param_1 + 0x16C);
if (idx != 0 && idx < 0x26) {
sub = idx - 1;
D_80188798[sub]();
}
}
*(u16 *)(param_1 + 0x16C) = 0;
}
DEFINE_func_80150B9C() /* dedup: shared engine-core @0x80150B9C (src/shared) */
@@ -2997,7 +3041,20 @@ void func_80156848(s32 param_1, s32 param_2) {
DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80156A1C);
// @class: struct
// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188DF0 indexed halfword folds %lo
extern unsigned char D_8011520C[];
extern unsigned short D_80188DF0[];
extern void func_80147324(s32 arg0);
void func_80156A1C(s32 param_1, s32 param_2)
{
if (*(unsigned char *)(param_1 + 0xDA) == 0) {
func_80147324(D_80188DF0[D_8011520C[param_2]]);
*(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1;
}
}
DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */
@@ -3092,7 +3149,24 @@ void func_80157788(int param_1)
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_801577C8);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80157808);
// @class: struct
// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls)
extern void (*D_80188E28[])(void);
extern int D_801D9650;
extern void func_801599A4(void *a0);
extern void func_80159B3C(void *a0);
void func_80157808(void *param_1)
{
D_80188E28[*(unsigned short *)((char *)param_1 + 2)]();
D_801D9650 = D_801D9650 - 1;
if (D_801D9650 == -1) {
func_801599A4(param_1);
func_80159B3C(param_1);
}
}
DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */
@@ -3183,9 +3257,57 @@ INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80158638);
DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8015879C);
// @class: plumbing
// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order)
extern s32 D_801D9658;
extern s32 D_801D9664;
extern s32 D_801D9668;
extern void func_80147084(s32 *a0);
extern void func_80147098(s32 *a0);
extern void func_801470AC(s32 *a0);
extern void func_80147078(s32 *a0, s16 a1);
extern void func_80146C98(s32 *a0, s16 a1);
extern void func_80158880(s32 *param);
void func_8015879C(s32 param_1) {
D_801D9658 = 0;
D_801D9664 = 1;
D_801D9668 = 0;
*(u8 *)(param_1 + 0xa8) = 0;
((void (*)(void))func_80147084)();
((void (*)(s32))func_80147098)(param_1);
((void (*)(s32))func_801470AC)(param_1);
((void (*)(s32, s32))func_80147078)(param_1, 0x1a);
((void (*)(s32, s32))func_80146C98)(param_1, 1);
((void (*)(s32))func_80158880)(param_1);
}
// @class: plumbing
// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order)
extern s32 D_801D9658;
extern s32 D_801D9664;
extern s32 D_801D9668;
extern void func_80147084(s32 *a0);
extern void func_80147098(s32 *a0);
extern void func_801470AC(s32 *a0);
extern void func_80147078(s32 *a0, s16 a1);
extern void func_80158880(s32 *param);
void func_80158814(void *arg0) {
D_801D9658 = 0;
D_801D9664 = 1;
D_801D9668 = 0;
*(s8 *)((s32)arg0 + 0xA8) = 0;
((void (*)(void))func_80147084)();
((void (*)(void *))func_80147098)(arg0);
((void (*)(void *))func_801470AC)(arg0);
((void (*)(void *, s32))func_80147078)(arg0, 0x1A);
((void (*)(void *))func_80158880)(arg0);
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80158814);
// @class: struct
// @stuck: none — MATCH (19/19). fn-ptr-table dispatch: param saved across func_80149020 call, byte 0x4F indexes D_80188EB8[] declared extern void(*[])(s32*) so %lo folds into the lw of the fn-ptr; D_80188EB8[*(u8*)(param+0x4F)](param).
@@ -3554,7 +3676,28 @@ INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8015D1B8);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8015D380);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8015D414);
// @class: plumbing
// @stuck: none — MATCH
extern unsigned char D_801884CC[];
extern void func_801553C0(s32 a0);
extern void func_80154A74(s32 a0, s32 a1);
void func_8015D414(int param_1)
{
*(unsigned char *)(param_1 + 0x1bd) = 8;
*(unsigned char **)(param_1 + 0x38) = D_801884CC;
*(short *)(param_1 + 0x138) = 0;
*(short *)(param_1 + 0x13a) = 0;
*(short *)(param_1 + 0x13c) = 0;
*(short *)(param_1 + 0x13e) = 0;
*(short *)(param_1 + 0xA) = *(short *)(param_1 + 0xA) + 0x48;
*(short *)(*(int *)(param_1 + 0x20) + 0x10) = 0;
((void (*)(void))func_801553C0)();
func_80154A74(param_1, 0x11);
}
DEFINE_func_8015D480() /* dedup: shared engine-core @0x8015D480 (src/shared) */
@@ -4226,7 +4369,29 @@ void func_8016216C(void)
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_801621CC);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_801622C4);
// @class: schedule
// @stuck: none — MATCH
extern void func_80029124(s32, s32);
extern void func_800291C8(s32, s32);
extern void func_80016714(void *a0, s32 a1);
extern int D_801D9670[];
void func_801622C4(void)
{
int *p;
int i;
((int (*)(int, int))func_80029124)(0x141, 1);
((int (*)(int, int))func_800291C8)(8, 0);
i = 0;
p = &D_801D9670;
do {
((int (*)(int, int))func_80016714)(*p, 0x38);
p = p + 1;
i = i + 1;
} while (i < 3);
}
extern void (*D_8018967C[])(void);
@@ -5524,7 +5689,25 @@ INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8016E9EC);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8016EAC0);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8016EB3C);
// @class: loose-typing
// @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff)
extern u8 D_80189ECC[];
extern s32 func_8016EC0C(s32 a0, s32 a1);
void func_8016EB3C(s32 p) {
u8 v;
((void (*)(s32, s32))func_8016EC0C)(p, D_80189ECC[*(u8 *)(p + 2) & 3]);
v = *(u8 *)(p + 2);
*(u8 *)(p + 2) = v + 0xFF;
if (v == 0) {
*(u8 *)(p + 2) = 5;
*(u8 *)(p + 1) = *(u8 *)(p + 1) + 1;
}
}
// @class: struct
// @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80189EDC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1.
@@ -6772,7 +6955,25 @@ DEFINE_func_80174B6C() /* dedup: shared engine-core @0x80174B6C (src/shared) */
DEFINE_func_80174BBC() /* dedup: shared engine-core @0x80174BBC (src/shared) */
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80174BF4);
// @class: struct
// @stuck: none — MATCH (27 ins) via func-ptr array fold extern void(*D_8018A194[])()
extern void (*D_8018A194[])();
void func_80174BF4(void * arg0)
{
M2C_FIELD(arg0, s32 *, 0xC) = 0x12C;
M2C_FIELD(arg0, s32 *, 0x14) = 0x12C;
M2C_FIELD(arg0, s16 *, 0x20) = 0x155;
M2C_FIELD(arg0, s16 *, 0x22) = 0x800;
M2C_FIELD(arg0, s16 *, 0x24) = 0;
M2C_FIELD(arg0, s16 *, 0x2E) = 0;
M2C_FIELD(arg0, s16 *, 0x30) = -0x28;
M2C_FIELD(arg0, s16 *, 0x32) = 0;
M2C_FIELD(arg0, s32 *, 0x54) = 0;
D_8018A194[M2C_FIELD(arg0, u8 *, 4)]();
}
DEFINE_func_80174C60() /* dedup: shared engine-core @0x80174C60 (src/shared) */
@@ -7105,7 +7306,28 @@ DEFINE_func_80178744() /* dedup: shared engine-core @0x80178744 (src/shared) */
DEFINE_func_801787D4() /* dedup: shared engine-core @0x801787D4 (src/shared) */
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80178840);
// @class: regalloc-order
// @stuck: sll $v0,$s1,2 must be recomputed AFTER the call (target nops the delay slot)
extern void func_80019064(void *a0);
extern void func_80131E00(struct S80131E00 *a0, s32 a1);
extern int D_8018A360;
extern int D_8018A36C[];
void func_80178840(int param_1) {
register int p __asm__("$16");
register int s1byte __asm__("$17");
p = param_1;
if ((*(unsigned short *)(p + 0x5c) & 1) != 0) {
s1byte = *(unsigned char *)(p + 0x5e);
if (s1byte == 0xc) {
((void (*)(int))func_80019064)((int)&D_8018A360);
}
((void (*)(int, int))func_80131E00)(p, D_8018A36C[s1byte]);
}
}
#include "common.h"
@@ -7785,7 +8007,27 @@ void func_8017E350(void *arg0) {
M2C_FIELD(arg0, u8 *, 0x214) = (u8) (M2C_FIELD(arg0, u8 *, 0x214) + 1);
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8017E3EC);
// @class: plumbing
// @stuck: none — MATCH (early-exit guard + 2 calls + struct stores + cond byte incr)
extern s32 func_801399F0(s32 a0);
extern void func_80139914(s32 a0);
extern void func_80154274(s32 *a0, s32 a1);
extern s32 D_8018A5E4;
extern s32 D_8012695C;
void func_8017E3EC(s32 param_1)
{
if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) {
((s32 (*)(s32))func_80139914)(*(s32 *)(param_1 + 0x198));
((s32 (*)(s32, s32))func_80154274)(param_1, (s32)&D_8018A5E4);
D_8012695C = *(s32 *)(param_1 + 0x208);
*(s32 *)(param_1 + 0x204) = 0x20;
*(unsigned char *)(param_1 + 0x214) = *(unsigned char *)(param_1 + 0x214) + 1;
}
}
M2C_UNK func_8017F240(); /* extern */
@@ -8019,7 +8261,27 @@ void func_8017EA98(s32 *a0) {
func_8012AD44(a0, 1);
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8017EAC0);
// @class: other
// @stuck: none — MATCH (27 ins, byte-identical via match_one relocation-masked)
extern int rand(void);
extern void func_8017EB2C(int a, int b);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012C218(void *a0);
void func_8017EAC0(int param_1)
{
int i;
i = 0;
do {
i = i + 1;
func_8017EB2C(rand(), *(int *)(param_1 + 0x1C));
} while (i < 4);
if (func_8012BEE8(param_1) == 1) {
((void (*)(int))func_8012C218)(param_1);
}
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8017EB2C);
@@ -8321,7 +8583,30 @@ INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80182420);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_801824D0);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_801827A4);
// @class: plumbing
// @stuck: none — MATCH (30 ins)
extern unsigned char D_801B0908[];
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B23C(s32 a0);
extern void func_80143CD4(s32 a0);
extern void func_8002D4C8(s32 a0, s32 a1);
extern int func_800CB0E8(int param);
void func_801827A4(int param_1)
{
*(short *)(param_1 + 2) = 8;
((int (*)(int, void *))func_8012A828)(param_1, &D_801B0908);
((int (*)(int))func_8012B23C)(param_1);
*(int *)(param_1 + 0x1c) = 0x78;
((int (*)(int))func_80143CD4)(param_1);
((int (*)(int, int))func_8002D4C8)(0x47b, 0);
((int (*)(int, int))func_8002D4C8)(0x478, 0);
func_800CB0E8(param_1);
*(char *)(param_1 + 0xc1) = 6;
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_8018281C);
@@ -8448,7 +8733,26 @@ void func_80183DD8(void) {
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80183DE0);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80183F4C);
// @class: plumbing
// @stuck: none — MATCH (straight-line stub; statement order + delay-slot 0x34 store match)
extern void func_8012B23C(s32 a0);
void func_80183F4C(int param_1) {
*(short *)(param_1 + 0x2) = 2;
*(short *)(param_1 + 0x34) = 0;
((void (*)(void))func_8012B23C)();
*(short *)(param_1 + 0x5c) = 0x800;
*(short *)(param_1 + 0x84) = 0;
if (*(short *)(param_1 + 0xfc) < *(short *)(param_1 + 0xe)) {
*(short *)(param_1 + 0x34) = 0;
} else {
*(short *)(param_1 + 0x34) = 1;
}
*(int *)(param_1 + 0x1c) = 0x100;
*(int *)(param_1 + 0xdc) = 0;
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80183FB8);
@@ -8847,7 +9151,22 @@ INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_801863B4);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80186434);
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_80186574);
// @class: struct
// @stuck: none — MATCH (array-of-fnptr %lo-fold; (unsigned)(field-1)<2 forces sltiu not slti)
extern void func_80185E68();
extern void (*D_801D5624[])();
void func_80186574(int param_1)
{
if (((unsigned int)(*(unsigned short *)(param_1 + 2) - 1) < 2) &&
((*(unsigned short *)(param_1 + 0x5c) & 1) != 0)) {
func_80185E68();
} else {
D_801D5624[*(unsigned short *)(param_1 + 2)]();
}
}
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077", func_801865EC);