From a4f043bc35b95a0247e294477982ca11d2d568f4 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 11 Sep 2026 04:52:31 -0600 Subject: [PATCH] =?UTF-8?q?phase-36:=20S104=20e31=20(5)=20+=20e32=20(6)=20?= =?UTF-8?q?banked;=20func=5F801834A4=20NOT=20banked=20(a=20steering=20dead?= =?UTF-8?q?=20store=20=E2=80=94=20Drew's=20call,=20like=20d20);=20e38=20pa?= =?UTF-8?q?cks=20(md=5FMAIN=5F003)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .run/P36/agents/ORDER.tsv | 8 +- .../md_MAIN_003__func_800D1E9C/body_free.c | 111 ++++++++++++++++ .../md_MAIN_003__func_800D1E9C/body_tree.c | 113 ++++++++++++++++ .../md_MAIN_003__func_800D1E9C/history.txt | 15 +++ .../md_MAIN_003__func_800D1E9C/neighbours.txt | 1 + .../md_MAIN_003__func_800D1E9C/related.txt | 124 ++++++++++++++++++ .../md_MAIN_003__func_800D1E9C/residual.txt | 31 +++++ .../md_MAIN_003__func_800D1E9C/sites.txt | 3 + .../agents/md_MAIN_003__func_800D1E9C/tu.txt | 2 + .../md_MAIN_003__func_800D24D0/body_free.c | 48 +++++++ .../md_MAIN_003__func_800D24D0/body_tree.c | 49 +++++++ .../md_MAIN_003__func_800D24D0/history.txt | 14 ++ .../md_MAIN_003__func_800D24D0/neighbours.txt | 1 + .../md_MAIN_003__func_800D24D0/related.txt | 54 ++++++++ .../md_MAIN_003__func_800D24D0/residual.txt | 10 ++ .../md_MAIN_003__func_800D24D0/sites.txt | 2 + .../agents/md_MAIN_003__func_800D24D0/tu.txt | 2 + .../md_MAIN_003__func_800D2A24/body_free.c | 26 ++++ .../md_MAIN_003__func_800D2A24/body_tree.c | 28 ++++ .../md_MAIN_003__func_800D2A24/history.txt | 14 ++ .../md_MAIN_003__func_800D2A24/neighbours.txt | 19 +++ .../md_MAIN_003__func_800D2A24/related.txt | 1 + .../md_MAIN_003__func_800D2A24/residual.txt | 8 ++ .../md_MAIN_003__func_800D2A24/sites.txt | 3 + .../agents/md_MAIN_003__func_800D2A24/tu.txt | 2 + .../md_MAIN_003__func_800D30D0/body_free.c | 27 ++++ .../md_MAIN_003__func_800D30D0/body_tree.c | 27 ++++ .../md_MAIN_003__func_800D30D0/history.txt | 14 ++ .../md_MAIN_003__func_800D30D0/neighbours.txt | 1 + .../md_MAIN_003__func_800D30D0/related.txt | 87 ++++++++++++ .../md_MAIN_003__func_800D30D0/residual.txt | 17 +++ .../md_MAIN_003__func_800D30D0/sites.txt | 6 + .../agents/md_MAIN_003__func_800D30D0/tu.txt | 2 + 33 files changed, 866 insertions(+), 4 deletions(-) create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/body_free.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/body_tree.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/history.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/neighbours.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/related.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/residual.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/sites.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D1E9C/tu.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/body_free.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/body_tree.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/history.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/neighbours.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/related.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/residual.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/sites.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D24D0/tu.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/body_free.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/body_tree.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/history.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/neighbours.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/related.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/residual.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/sites.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D2A24/tu.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/body_free.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/body_tree.c create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/history.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/neighbours.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/related.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/residual.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/sites.txt create mode 100644 .run/P36/agents/md_MAIN_003__func_800D30D0/tu.txt diff --git a/.run/P36/agents/ORDER.tsv b/.run/P36/agents/ORDER.tsv index a2a37f291..511fca041 100644 --- a/.run/P36/agents/ORDER.tsv +++ b/.run/P36/agents/ORDER.tsv @@ -1,5 +1,5 @@ rank fn alias copies best needed kinds regs tu -85 func_80180D54 ov_SC03_097 2 7 1 pin $2 src/ov_SC03_097/ov_SC03_097_jr_8017D898.c -64 func_8017FEA0 ov_SC03_097 1 12 1 pin $2 src/ov_SC03_097/ov_SC03_097_jr_8017D898.c -52 func_8017F7E4 ov_SC03_097 1 13 2 barrier,launder src/ov_SC03_097/ov_SC03_097_jr_8017D898.c -109 func_80182498 ov_SC03_097 1 17 3 launder,pin $29 src/ov_SC03_097/ov_SC03_097_jr_8017D898.c +8 func_800D24D0 md_MAIN_003 1 4 1 barrier src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c +12 func_800D2A24 md_MAIN_003 1 4 3 keepalive,pin $2 src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c +5 func_800D1E9C md_MAIN_003 1 5 3 barrier,keepalive,pin $2 src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c +4 func_800D30D0 md_MAIN_003 1 12 5 cast,launder src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/body_free.c b/.run/P36/agents/md_MAIN_003__func_800D1E9C/body_free.c new file mode 100644 index 000000000..fe0692813 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/body_free.c @@ -0,0 +1,111 @@ +void func_800D1E9C(void *arg0) { + s32 sp18[30]; + s16 sp90[4]; + s16 sp98[8]; + s32 *p; + s32 i; + s32 v0r; + + p = (s32 *) arg0; + D_800EC9F0 = 1; + ((void (*)()) func_800D2394)(D_800EC9A4, + p[1] ? (p[4] * 3) / 2 : p[4], + p[5], + p[1] ? (p[4] * 3) / 2 : p[4], + p[5] + p[7], + p); + if (((s32 (*)()) func_800D2454)(D_800EC9FC, func_800D24D0, p) != 0) { + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + func_800D2AA0(0); + goto ret; + } + if (func_800D2704(D_800EC9A4, p) != 0) { + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + func_800D2AA0(0); + goto ret; + } + D_800EC9F4 = 0; + D_800EC9F8 = 0; + func_80059658(0); + VSync(0); + sp90[0] = 0; + sp90[1] = 0; + sp90[2] = p[1] ? (p[6] * 3) / 2 : p[6]; + sp90[3] = p[7] * 2; + if (p[1] != 0) { + func_80059888(sp90, 0, 0, 0); + sp98[0] = 0x1E0; + sp98[1] = 0; + sp98[2] = 0xA0; + sp98[3] = 0x1E0; + func_80059888(sp98, 0xFF, 0xFF, 0xFF); + } else { + func_80059888(sp90, 0, 0, 0); + sp98[0] = 0x140; + sp98[1] = 0; + sp98[2] = 0x140; + sp98[3] = 0x1E0; + func_80059888(sp98, 0xFF, 0xFF, 0xFF); + } + for (;;) { + func_800D2C0C(D_800EC9A4[D_800EC9AC], p[1] ? 3 : 2); + ((void (*)()) func_800D2C88)((&D_800EC9A4[3])[D_800EC9B8], + ((*(s16 *) ((u8 *) D_800EC9A4 + 0x30) << 4) * + ((*(s16 *) ((u8 *) D_800EC9A4 + 0x32) - 1) / 16 + 1)) >> 1); + if (func_800D2704(D_800EC9A4, p) != 0) { + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + goto after; + } + func_800D298C(D_800EC9A4, 0); + VSync(0); + i = (D_800EC9CC == 0); + SetDefDispEnv(sp18, + D_800EC9BC[i * 4] - + (p[1] ? (p[4] * 3) / 2 : p[4]), + D_800EC9BE[i * 4] - p[5], + p[1] ? (p[6] * 3) / 2 : p[6], + p[7]); + if (p[1] != 0) { + *((u8 *) sp18 + 0x11) = p[1]; + *(s16 *) ((u8 *) sp18 + 4) = (*(s16 *) ((u8 *) sp18 + 4) * 2) / 3; + } + func_80059FC0((u8 *) sp18); + func_80059658(1); + if (D_800EC9F4 == 1) { + goto done; + } + func_800189A8(); + if (D_800EC9F8 == 0) { + if (D_800EC9E0 == 0) { + if (func_80014CAC(0, 0x800) != 0) { + D_800EC9E0 = 1; + D_800EC9E4 = 0x10; + func_8002D8A8(); + } + } else { + D_800EC9E4 -= 1; + if (D_800EC9E4 == 0) { + goto done; + } + } + } + func_8002D034(); + } +done: + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + func_80043830(9, 0, 0); +after: + func_800D2AA0(0); + func_80059658(1); +ret: + func_80010A98(); + v0r = 1; +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/body_tree.c b/.run/P36/agents/md_MAIN_003__func_800D1E9C/body_tree.c new file mode 100644 index 000000000..56a8cda8c --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/body_tree.c @@ -0,0 +1,113 @@ +void func_800D1E9C(void *arg0) { + s32 sp18[30]; + s16 sp90[4]; + s16 sp98[8]; + s32 *p; + s32 i; + register s32 v0r __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9) + + p = (s32 *) arg0; + D_800EC9F0 = 1; + ((void (*)()) func_800D2394)(D_800EC9A4, + p[1] ? (p[4] * 3) / 2 : p[4], + p[5], + p[1] ? (p[4] * 3) / 2 : p[4], + p[5] + p[7], + p); + if (((s32 (*)()) func_800D2454)(D_800EC9FC, func_800D24D0, p) != 0) { + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + func_800D2AA0(0); + __asm__ __volatile__(""); // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + goto ret; + } + if (func_800D2704(D_800EC9A4, p) != 0) { + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + func_800D2AA0(0); + goto ret; + } + D_800EC9F4 = 0; + D_800EC9F8 = 0; + func_80059658(0); + VSync(0); + sp90[0] = 0; + sp90[1] = 0; + sp90[2] = p[1] ? (p[6] * 3) / 2 : p[6]; + sp90[3] = p[7] * 2; + if (p[1] != 0) { + func_80059888(sp90, 0, 0, 0); + sp98[0] = 0x1E0; + sp98[1] = 0; + sp98[2] = 0xA0; + sp98[3] = 0x1E0; + func_80059888(sp98, 0xFF, 0xFF, 0xFF); + } else { + func_80059888(sp90, 0, 0, 0); + sp98[0] = 0x140; + sp98[1] = 0; + sp98[2] = 0x140; + sp98[3] = 0x1E0; + func_80059888(sp98, 0xFF, 0xFF, 0xFF); + } + for (;;) { + func_800D2C0C(D_800EC9A4[D_800EC9AC], p[1] ? 3 : 2); + ((void (*)()) func_800D2C88)((&D_800EC9A4[3])[D_800EC9B8], + ((*(s16 *) ((u8 *) D_800EC9A4 + 0x30) << 4) * + ((*(s16 *) ((u8 *) D_800EC9A4 + 0x32) - 1) / 16 + 1)) >> 1); + if (func_800D2704(D_800EC9A4, p) != 0) { + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + goto after; + } + func_800D298C(D_800EC9A4, 0); + VSync(0); + i = (D_800EC9CC == 0); + SetDefDispEnv(sp18, + D_800EC9BC[i * 4] - + (p[1] ? (p[4] * 3) / 2 : p[4]), + D_800EC9BE[i * 4] - p[5], + p[1] ? (p[6] * 3) / 2 : p[6], + p[7]); + if (p[1] != 0) { + *((u8 *) sp18 + 0x11) = p[1]; + *(s16 *) ((u8 *) sp18 + 4) = (*(s16 *) ((u8 *) sp18 + 4) * 2) / 3; + } + func_80059FC0((u8 *) sp18); + func_80059658(1); + if (D_800EC9F4 == 1) { + goto done; + } + func_800189A8(); + if (D_800EC9F8 == 0) { + if (D_800EC9E0 == 0) { + if (func_80014CAC(0, 0x800) != 0) { + D_800EC9E0 = 1; + D_800EC9E4 = 0x10; + func_8002D8A8(); + } + } else { + D_800EC9E4 -= 1; + if (D_800EC9E4 == 0) { + goto done; + } + } + } + func_8002D034(); + } +done: + func_800D2D44(0); + func_800468FC(); + func_8002D8D4(); + func_80043830(9, 0, 0); +after: + func_800D2AA0(0); + func_80059658(1); +ret: + func_80010A98(); + v0r = 1; + __asm__ __volatile__("" : : "r"(v0r)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus9) +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/history.txt b/.run/P36/agents/md_MAIN_003__func_800D1E9C/history.txt new file mode 100644 index 000000000..bf28fcae7 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/history.txt @@ -0,0 +1,15 @@ +s3: verdict BUDGET start 20 best 5 compiles 400 path R9 swap-stmts @172 +s3b: verdict BUDGET start 20 best 5 compiles 400 path R9 swap-stmts @172 +best-scoring single candidates of the last trace (move -> score [residual class]): + R9 swap-stmts @172 -> 5 [COUNT] (from 20) + R9 swap-stmts @179 -> 5 [COUNT] (from 20) + R12 width v0r s32->u16 @159 -> 5 [COUNT] (from 5) + R7 block @173 -> 5 [COUNT] (from 5) + R9 swap-stmts @261 -> 5 [COUNT] (from 5) + R4 decl-move v0r 5->0 -> 5 [COUNT] (from 5) + R12 width v0r s32->s16 @159 -> 5 [COUNT] (from 5) + R7 do-while @173 -> 5 [COUNT] (from 5) + R10 param-copy arg0 @160 -> 5 [COUNT] (from 5) + R4 decl-move v0r 5->1 -> 5 [COUNT] (from 5) + R12 width v0r s32->u8 @159 -> 5 [COUNT] (from 5) + R8 hoist tmp0 @190 -> 5 [COUNT] (from 5) diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/neighbours.txt b/.run/P36/agents/md_MAIN_003__func_800D1E9C/neighbours.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/neighbours.txt @@ -0,0 +1 @@ + diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/related.txt b/.run/P36/agents/md_MAIN_003__func_800D1E9C/related.txt new file mode 100644 index 000000000..208cf33a8 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/related.txt @@ -0,0 +1,124 @@ +=== lever-free bodies in md_MAIN_003 sharing a callee or global with func_800D1E9C (7 found; top 6 by shared symbols) — read them for the SHAPE === +--- func_800D27A0 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:456) shares 3: D_800EC9F4 D_800EC9F8 func_80059888 --- +s32 func_800D27A0(void* arg0, struct UnkS1* arg1) { + s32 sp10[2]; + u16 sp18[4]; + s32 ret; + s32 i; + + for (i = 0x8000; i != 0; i--) { + if (StGetNext(&sp10[0], &sp10[1]) == 0) { + goto found; + } + } + return 0; +found: + if (*(u32*)(sp10[1] + 8) >= arg1->fC) { + D_800EC9F4 = 1; + } + if (*(u32*)(sp10[1] + 8) >= arg1->fC - 15) { + D_800EC9F8 = 1; + } else { + D_800EC9F8 = 0; + } + if (D_800D9484 != *(u16*)(sp10[1] + 0x10) || D_800D9488 != *(u16*)(sp10[1] + 0x12)) { + u16 cur1; + u16 cur2; + sp18[0] = 0; + sp18[1] = 0; + sp18[2] = arg1->f4 != 0 ? (arg1->f18 * 3) / 2 : *(u16*)&arg1->f18; + sp18[3] = arg1->f1C * 2; + if (arg1->f4 != 0) { + func_80059888(sp18, 0, 0, 0); + } else { + func_80059888(sp18, 0x40, 0x40, 0x40); + } + cur1 = *(u16*)(sp10[1] + 0x10); + cur2 = *(u16*)(sp10[1] + 0x12); + D_800D9484 = cur1; + D_800D9488 = cur2; + } + { + u16 t = arg1->f4 != 0 ? (D_800D9484 * 3) / 2 : *(u16*)&D_800D9484; + u16 g; + ret = sp10[0]; + g = *(u16*)&D_800D9488; + *(u16*)(arg0 + 0x24) = t; + *(u16*)(arg0 + 0x1C) = t; + *(u16*)(arg0 + 0x26) = g; + *(u16*)(arg0 + 0x1E) = g; + *(u16*)(arg0 + 0x32) = g; + } + return ret; +} + +--- func_800D2454 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:340) shares 2: func_800D2AA0 func_800D2D44 --- +void func_800D2454(s32 a0, s32 a1, s32 *a2) { + func_800D2AA0(0); + func_800D2D44(a1); + StSetRing(D_800D946C, 0x20); + StSetStream(a2[1], a2[2], -1, 0, 0); + func_800D2A24(a0); +} + +--- func_800D1E18 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:93) shares 1: D_800EC9FC --- +s32 func_800D1E18(void) { + return CdSearchFile(D_800EC9FC, (void *) D_800D942C[func_8001BFA0()].unk00) != 0; +} + +--- func_800D1E58 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:105) shares 1: D_800EC9E0 --- +void func_800D1E58(void) { + D_800EC9E0 = 0; + func_800D1E9C(&D_800D942C[func_8001BFA0()]); + func_8001BFB0(); +} + +--- func_800CF300 (src/md_MAIN_003/md_MAIN_003.c:193) shares 1: func_80059888 --- +void func_800CF300(void) { + s16 sp10[4]; + + func_800CF3E8(); + D_800EC68C -= 4; + if (D_800EC68C < 0) { + sp10[2] = 0x280; + sp10[0] = 0; + sp10[1] = 0; + sp10[3] = 0x1E0; + func_80059888(&sp10[0], 0, 0, 0); + func_800118AC(); + } +} + +--- func_800D0440 (src/md_MAIN_003/md_MAIN_003_o0e.c:205) shares 1: func_80059888 --- +void func_800D0440(void) { + register u8 *p = D_800AF630; + u16 rect[4]; + + if ((u16) func_800167F0(4) != 0) { + switch (D_800EC894) { + case 0: + *(u16 *) (p + 0xA3B6) = 1; + *(u16 *) (p + 0xA3B8) = 2; + break; + case 1: + *(u16 *) (p + 0xA3B6) = 1; + *(u16 *) (p + 0xA3B8) = 0; + break; + case 2: + *(u16 *) (p + 0xA3B6) = 1; + *(u16 *) (p + 0xA3B8) = 1; + break; + case 4: + *(u16 *) (p + 0xA3B6) = 1; + *(u16 *) (p + 0xA3B8) = 4; + break; + } + rect[0] = 0; + rect[1] = 0; + rect[2] = 0x140; + rect[3] = 0x1E0; + func_80059888(rect, 0, 0, 0); + } + func_800D0D6C(); +} + diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/residual.txt b/.run/P36/agents/md_MAIN_003__func_800D1E9C/residual.txt new file mode 100644 index 000000000..3ff9dd29e --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/residual.txt @@ -0,0 +1,31 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:func_800D1E9C: score 20 (COUNT; mine 307 ins, target 318) — not yet + replace mine[51:52] target[51:62] + 51 bnez v0,170 | beqz v0,180 + 52 -- | nop + 53 -- | jal 0 + 54 -- | move a0,zero + 55 -- | jal 0 + 56 -- | nop + 57 -- | jal 0 + 58 -- | nop + 59 -- | jal 0 + 60 -- | move a0,zero + 61 -- | j 554 + replace mine[67:68] target[77:78] + 67 j 52c | j 554 + replace mine[89:90] target[99:100] + 89 j 1f4 | j 21c + replace mine[115:116] target[125:126] + 115 j 2b0 | j 2d8 + replace mine[123:124] target[133:134] + 123 j 51c | j 544 + replace mine[198:199] target[208:209] + 198 j 3b0 | j 3d8 + replace mine[218:219] target[228:229] + 218 j 3f8 | j 420 + replace mine[270:271] target[280:281] + 270 j 4e4 | j 50c + replace mine[282:283] target[292:293] + 282 j 2c4 | j 2ec + insert mine[300:300] target[310:311] + 300 -- | li v0,1 diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/sites.txt b/.run/P36/agents/md_MAIN_003__func_800D1E9C/sites.txt new file mode 100644 index 000000000..8e2d24e9f --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/sites.txt @@ -0,0 +1,3 @@ +NEEDED pin $2 line 159 +NEEDED barrier line 174 +NEEDED keepalive line 264 diff --git a/.run/P36/agents/md_MAIN_003__func_800D1E9C/tu.txt b/.run/P36/agents/md_MAIN_003__func_800D1E9C/tu.txt new file mode 100644 index 000000000..85d50018b --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D1E9C/tu.txt @@ -0,0 +1,2 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c +func_800D1E9C diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/body_free.c b/.run/P36/agents/md_MAIN_003__func_800D24D0/body_free.c new file mode 100644 index 000000000..79295c23e --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/body_free.c @@ -0,0 +1,48 @@ +void func_800D24D0(void) { + D24D0_Rect sp10[2]; + s32 s0; + s32 idx; + s32 r; + s16 *p; + s32 n; + + if (D_800EC9DC != 0) { + if (D_800A5F1C != 0) { + StCdInterrupt(); + D_800A5F1C = 0; + } + } + sp10[0] = *(D24D0_Rect *)&D_800EC9D0; + { + s32 *pb = &D_800EC9B8; + s0 = *pb; + *pb = (*pb == 0); + } + if (D_800EC9F0 != 0) { + r = D_800EC9C0[D_800EC9CC * 4] % D_800EC9D4; + if (r != 0) { + D_800EC9F0 = 0; + D_800EC9D0 = D_800EC9D0 + r; + goto join; + } + } + { + s16 *px = &D_800EC9D0; + *px = *px + D_800EC9D4; + } +join: + p = (s16 *)((u8 *)D_800EC9A4 + 0x2C); + idx = D_800EC9CC; + if (*p < D_800EC9BC[idx * 4] + D_800EC9C0[idx * 4]) { + ((void (*)()) func_800D2C88)((&D_800EC9A4[3])[D_800EC9B8], + ((D_800EC9D4 << 4) * ((D_800EC9D6 - 1) / 16 + 1)) >> 1); + } else { + D_800EC9D8 = 1; + n = (idx == 0); + D_800EC9CC = n; + *p = *(u16 *)((u8 *)aD_800EC9BC + n * 8); + D_800EC9F0 = 1; + D_800EC9D2 = D_800EC9BE[n * 4]; + } + func_800599B8((u16 *)sp10, (u16 *)D_800EC9B0[s0]); +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/body_tree.c b/.run/P36/agents/md_MAIN_003__func_800D24D0/body_tree.c new file mode 100644 index 000000000..800edd956 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/body_tree.c @@ -0,0 +1,49 @@ +void func_800D24D0(void) { + D24D0_Rect sp10[2]; + s32 s0; + s32 idx; + s32 r; + s16 *p; + s32 n; + + if (D_800EC9DC != 0) { + if (D_800A5F1C != 0) { + StCdInterrupt(); + D_800A5F1C = 0; + } + } + sp10[0] = *(D24D0_Rect *)&D_800EC9D0; + { + s32 *pb = &D_800EC9B8; + s0 = *pb; + __asm__ __volatile__("" ::: "memory"); // !FAKE: barrier memory — NEEDED DIFFERS (P36 rung B tus9) + *pb = (*pb == 0); + } + if (D_800EC9F0 != 0) { + r = D_800EC9C0[D_800EC9CC * 4] % D_800EC9D4; + if (r != 0) { + D_800EC9F0 = 0; + D_800EC9D0 = D_800EC9D0 + r; + goto join; + } + } + { + s16 *px = &D_800EC9D0; + *px = *px + D_800EC9D4; + } +join: + p = (s16 *)((u8 *)D_800EC9A4 + 0x2C); + idx = D_800EC9CC; + if (*p < D_800EC9BC[idx * 4] + D_800EC9C0[idx * 4]) { + ((void (*)()) func_800D2C88)((&D_800EC9A4[3])[D_800EC9B8], + ((D_800EC9D4 << 4) * ((D_800EC9D6 - 1) / 16 + 1)) >> 1); + } else { + D_800EC9D8 = 1; + n = (idx == 0); + D_800EC9CC = n; + *p = *(u16 *)((u8 *)aD_800EC9BC + n * 8); + D_800EC9F0 = 1; + D_800EC9D2 = D_800EC9BE[n * 4]; + } + func_800599B8((u16 *)sp10, (u16 *)D_800EC9B0[s0]); +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/history.txt b/.run/P36/agents/md_MAIN_003__func_800D24D0/history.txt new file mode 100644 index 000000000..4dc9f14d1 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/history.txt @@ -0,0 +1,14 @@ +g6b: verdict NO-MATCH start 4 best 4 compiles 318 path +best-scoring single candidates of the last trace (move -> score [residual class]): + R12 width n s32->u16 @377 -> 4 [COUNT] (from 4) + R8 hoist tmp0 @392 -> 4 [COUNT] (from 4) + R7 block @381 -> 4 [COUNT] (from 4) + R5 swap + @395 -> 4 [COUNT] (from 4) + R12 width n s32->s16 @377 -> 4 [COUNT] (from 4) + R7 do-while @381 -> 4 [COUNT] (from 4) + R9 swap-stmts @394 -> 4 [COUNT] (from 4) + R12 width n s32->u8 @377 -> 4 [COUNT] (from 4) + R8 temp tmp0 @413 -> 4 [COUNT] (from 4) + R7 block @392 -> 4 [COUNT] (from 4) + R9 swap-stmts @410 -> 4 [COUNT] (from 4) + R8 base tmp0 @413 -> 4 [COUNT] (from 4) diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/neighbours.txt b/.run/P36/agents/md_MAIN_003__func_800D24D0/neighbours.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/neighbours.txt @@ -0,0 +1 @@ + diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/related.txt b/.run/P36/agents/md_MAIN_003__func_800D24D0/related.txt new file mode 100644 index 000000000..7da08db68 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/related.txt @@ -0,0 +1,54 @@ +=== lever-free bodies in md_MAIN_003 sharing a callee or global with func_800D24D0 (2 found; top 6 by shared symbols) — read them for the SHAPE === +--- func_800D0C50 (src/md_MAIN_003/md_MAIN_003_o0e.c:621) shares 1: func_800599B8 --- +void func_800D0C50(void) { + s16 sp10[8]; + u16 *addr2; + u16 *addr1; + + addr1 = (u16 *)(D_800EC894 * 307744 + 0x80114014); + addr2 = (u16 *)(D_800EC894 * 307744 + 0x80114220); + sp10[0] = 0; + sp10[1] = 0x1E0; + sp10[2] = 0x100; + sp10[3] = 1; + sp10[4] = 0x280; + sp10[5] = 0x10; + sp10[6] = 0x140; + sp10[7] = 0x1E0; + func_800599B8(sp10, addr1); + func_800599B8(&sp10[4], addr2); + func_80011928(3); +} + +--- func_800CFE00 (src/md_MAIN_003/md_MAIN_003.c:670) shares 1: func_800599B8 --- +void func_800CFE00(void) { + u16 sp10[8]; + u16 *addr1; + u16 *addr2; + s32 v; + s32 t; + + v = D_800EC678; + sp10[0] = 0; + sp10[1] = 0x1E0; + sp10[2] = 0x100; + sp10[3] = 1; + sp10[4] = 0x280; + sp10[5] = 0x24; + sp10[6] = 0x140; + sp10[7] = 0x1B8; + t = v << 4; + t += v; + t <<= 2; + t += v; + t <<= 3; + t -= v; + t <<= 4; + t += v; + t <<= 5; + addr1 = (u16 *)(t + 0x80120014); + addr2 = (u16 *)(t + 0x80120220); + func_800599B8(sp10, addr1); + func_800599B8(&sp10[4], addr2); +} + diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/residual.txt b/.run/P36/agents/md_MAIN_003__func_800D24D0/residual.txt new file mode 100644 index 000000000..ce4d077d2 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/residual.txt @@ -0,0 +1,10 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:func_800D24D0: score 4 (COUNT; mine 140 ins, target 141) — not yet + register pairs (mine -> target, count): s0->v0 x1 + insert mine[28:28] target[28:29] + 28 -- | lw v0,0(v1) + replace mine[30:31] target[31:32] + 30 sltiu v0,s0,1 | sltiu v0,v0,1 + replace mine[63:64] target[64:65] + 63 j 7dc | j 7e0 + replace mine[109:110] target[110:111] + 109 j 8c0 | j 8c4 diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/sites.txt b/.run/P36/agents/md_MAIN_003__func_800D24D0/sites.txt new file mode 100644 index 000000000..25c638aa5 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/sites.txt @@ -0,0 +1,2 @@ +NEEDED barrier memory line 389 +REMOVED barrier line 408 diff --git a/.run/P36/agents/md_MAIN_003__func_800D24D0/tu.txt b/.run/P36/agents/md_MAIN_003__func_800D24D0/tu.txt new file mode 100644 index 000000000..5f4abec1c --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D24D0/tu.txt @@ -0,0 +1,2 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c +func_800D24D0 diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/body_free.c b/.run/P36/agents/md_MAIN_003__func_800D2A24/body_free.c new file mode 100644 index 000000000..ae83a2bb9 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/body_free.c @@ -0,0 +1,26 @@ +void func_800D2A24(s32 a0) { + u8 *p; + s32 r; + s32 v0; + +retry: + p = D_800EC9E8; + for (;;) { + r = func_800435CC(2, (void *)a0, p); + if (*p & 0x10) { + goto ret1; + } + if (r != 0) { + break; + } + } + if (CdRead2(0x1C0) == 0) { + goto retry; + } + v0 = 0; + return; + +ret1: + v0 = 1; + return; +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/body_tree.c b/.run/P36/agents/md_MAIN_003__func_800D2A24/body_tree.c new file mode 100644 index 000000000..0bfb5a540 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/body_tree.c @@ -0,0 +1,28 @@ +void func_800D2A24(s32 a0) { + u8 *p; + s32 r; + register s32 v0 __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9) + +retry: + p = D_800EC9E8; + for (;;) { + r = func_800435CC(2, (void *)a0, p); + if (*p & 0x10) { + goto ret1; + } + if (r != 0) { + break; + } + } + if (CdRead2(0x1C0) == 0) { + goto retry; + } + v0 = 0; + __asm__ __volatile__("" : : "r"(v0)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus9) + return; + +ret1: + v0 = 1; + __asm__ __volatile__("" : : "r"(v0)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus9) + return; +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/history.txt b/.run/P36/agents/md_MAIN_003__func_800D2A24/history.txt new file mode 100644 index 000000000..6328da0b1 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/history.txt @@ -0,0 +1,14 @@ +s6: verdict NO-MATCH start 4 best 4 compiles 73 path +best-scoring single candidates of the last trace (move -> score [residual class]): + R12 width v0 s32->u16 @570 -> 4 [COUNT] (from 4) + R7 block @586 -> 4 [COUNT] (from 4) + R10 param-copy a0 @571 -> 4 [COUNT] (from 4) + R4 decl-move v0 2->0 -> 4 [COUNT] (from 4) + R12 width v0 s32->s16 @570 -> 4 [COUNT] (from 4) + R7 do-while @586 -> 4 [COUNT] (from 4) + R4 decl-move v0 2->1 -> 4 [COUNT] (from 4) + R12 width v0 s32->u8 @570 -> 4 [COUNT] (from 4) + R7 block @590 -> 4 [COUNT] (from 4) + R7 do-while @590 -> 4 [COUNT] (from 4) + R7 block @575 -> 4 [COUNT] (from 4) + R7 block @573 -> 4 [COUNT] (from 4) diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/neighbours.txt b/.run/P36/agents/md_MAIN_003__func_800D2A24/neighbours.txt new file mode 100644 index 000000000..4faad92fe --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/neighbours.txt @@ -0,0 +1,19 @@ +=== THIS FUNCTION'S OWN HEADER (func_800D2A24, line 567) — read it in full === +/* TU (src/md_MAIN_003/md_MAIN_003.c:1085) forward-declares this K&R-style as + * `extern void func_800D2A24();` for its sole caller (func_800D2454, which + * discards the return), so the definition here must be `void` to avoid + * `conflicting types for 'func_800D2A24'` (cc1 exit 33). The body genuinely + * sets $v0 to 1 or 0 on every exit path (asm: `addiu $v0,zero,1` / + * `addu $v0,zero,zero`), and a plain `return ;` in a void function is + * a pedwarn gcc-2.7.2 silently DISCARDS (loses those materializations, + * closeness != 0 -- cookbook §43's void-return-value-drop). Absorbed at the + * use site instead: a hard-`$2` register local set via a read-only + * input-`__asm__` immediately before a bare `return;` on each exit forces + * the same `li $v0,K` the s32-typed body would have emitted, without + * widening the TU's declared return type. Putting the early-exit's v0-set + * behind a `goto` (rather than inline in the `if` body) keeps that branch a + * single instruction, matching the target's branch polarity -- inlining the + * register-pin + asm barrier directly in the `if` block bloats it and flips + * beqz/bnez (byte-verified: NEAR closeness 10 vs this MATCH closeness 0). + */ + diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/related.txt b/.run/P36/agents/md_MAIN_003__func_800D2A24/related.txt new file mode 100644 index 000000000..9933aecbd --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/related.txt @@ -0,0 +1 @@ +=== lever-free bodies in md_MAIN_003 sharing a callee or global with func_800D2A24 (0 found; top 6 by shared symbols) — read them for the SHAPE === diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/residual.txt b/.run/P36/agents/md_MAIN_003__func_800D2A24/residual.txt new file mode 100644 index 000000000..87f574e76 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/residual.txt @@ -0,0 +1,8 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:func_800D2A24: score 4 (COUNT; mine 28 ins, target 31) — not yet + replace mine[14:15] target[14:15] + 14 bnez v1,c64 | bnez v1,c6c + insert mine[21:21] target[21:23] + 21 -- | move v0,zero + 22 -- | j c70 + insert mine[22:22] target[24:25] + 22 -- | li v0,1 diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/sites.txt b/.run/P36/agents/md_MAIN_003__func_800D2A24/sites.txt new file mode 100644 index 000000000..306869167 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/sites.txt @@ -0,0 +1,3 @@ +NEEDED pin $2 line 571 +NEEDED keepalive line 588 +NEEDED keepalive line 593 diff --git a/.run/P36/agents/md_MAIN_003__func_800D2A24/tu.txt b/.run/P36/agents/md_MAIN_003__func_800D2A24/tu.txt new file mode 100644 index 000000000..8488fd6ec --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D2A24/tu.txt @@ -0,0 +1,2 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c +func_800D2A24 diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/body_free.c b/.run/P36/agents/md_MAIN_003__func_800D30D0/body_free.c new file mode 100644 index 000000000..7ab091fcd --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/body_free.c @@ -0,0 +1,27 @@ +s32 aF800D30D0(char *arg0) { + s32 ret; + s32 s0; + + func_8005C604(D_800CEEB8, arg0); + s0 = *(volatile s32 *)D_800DB670; + func_8005C604(D_800CEE58, + (*(volatile u32 *)D_800DB644 >> 24) & 1, + (*(volatile u32 *)D_800DB650 >> 24) & 1, + *D_800DB63C, + *D_800DB648); + func_8005C604(D_800CEE80, + ((u32)~s0 >> 31), + ((u32)s0 >> 30) & 1, + ((u32)s0 >> 29) & 1, + ((u32)s0 >> 28) & 1, + ((u32)s0 >> 27) & 1, + ((u32)s0 >> 25) & 1, + ((u32)s0 >> 23) & 1); + *D_800DB670 = 0x80000000; + *D_800DB644 = 0; + *D_800DB650 = 0; + ret = 0; + (void)*(volatile s32 *)D_800DB650; + *D_800DB670 = 0x60000000; + return ret; +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/body_tree.c b/.run/P36/agents/md_MAIN_003__func_800D30D0/body_tree.c new file mode 100644 index 000000000..ff31877de --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/body_tree.c @@ -0,0 +1,27 @@ +s32 aF800D30D0(char *arg0) { + s32 ret; + s32 s0; + + func_8005C604(D_800CEEB8, arg0); + s0 = *(volatile s32 *)D_800DB670; + func_8005C604(D_800CEE58, + (*(volatile u32 *)D_800DB644 >> 24) & 1, + (*(volatile u32 *)D_800DB650 >> 24) & 1, + *D_800DB63C, + *D_800DB648); + func_8005C604(D_800CEE80, + ((u32)~s0 >> 31), + ((u32)s0 >> 30) & 1, + ((u32)s0 >> 29) & 1, + ((u32)s0 >> 28) & 1, + ((u32)s0 >> 27) & 1, + ((u32)s0 >> 25) & 1, + ((u32)s0 >> 23) & 1); + *D_800DB670 = 0x80000000; + *D_800DB644 = 0; + *D_800DB650 = 0; + __asm__ volatile("" : "=r"(ret) : "0"(0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9) + (void)*(volatile s32 *)D_800DB650; + *D_800DB670 = 0x60000000; + return ret; +} diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/history.txt b/.run/P36/agents/md_MAIN_003__func_800D30D0/history.txt new file mode 100644 index 000000000..ab53921a1 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/history.txt @@ -0,0 +1,14 @@ +s6: verdict NO-MATCH start 14 best 12 compiles 173 path R16 const-holder ret=0 x1 + R9 swap-stmts @924 +best-scoring single candidates of the last trace (move -> score [residual class]): + R9 swap-stmts @924 -> 12 [COUNT] (from 14) + R9 swap-stmts @924 -> 12 [COUNT] (from 14) + R16 const-holder ret=0 x1 -> 14 [COUNT] (from 14) + R6 inline ret @926 -> 14 [COUNT] (from 14) + R7 block @927 -> 14 [COUNT] (from 14) + R9 swap-stmts @926 -> 14 [COUNT] (from 14) + R7 block @926 -> 14 [COUNT] (from 14) + R9 swap-stmts @925 -> 14 [COUNT] (from 14) + R12 width ret s32->u16 @905 -> 14 [COUNT] (from 14) + R7 do-while @926 -> 14 [COUNT] (from 14) + R12 width ret s32->s16 @905 -> 14 [COUNT] (from 14) + R7 block @928 -> 14 [COUNT] (from 14) diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/neighbours.txt b/.run/P36/agents/md_MAIN_003__func_800D30D0/neighbours.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/neighbours.txt @@ -0,0 +1 @@ + diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/related.txt b/.run/P36/agents/md_MAIN_003__func_800D30D0/related.txt new file mode 100644 index 000000000..8544a2871 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/related.txt @@ -0,0 +1,87 @@ +=== lever-free bodies in md_MAIN_003 sharing a callee or global with func_800D30D0 (6 found; top 6 by shared symbols) — read them for the SHAPE === +--- func_800D2E64 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:789) shares 2: D_800DB63C D_800DB644 --- +void func_800D2E64(s32 a0, s32 a1) { + u32 s0; + s32 s1; + s1 = a0; + s0 = (u32)a1; + func_800D2F88(a0, a1); + s0 = (s0 >> 5) << 16; + *D_800DB674 |= 0x88; + *D_800DB63C = s1 + 4; + *D_800DB640 = s0 | 0x20; + *D_800DB66C = *(s32 *)s1; + *D_800DB644 = 0x1000201; +} + +--- func_800D2EF8 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:810) shares 2: D_800DB648 D_800DB650 --- +void func_800D2EF8(s32 a0, s32 a1) { + s32 s1; + u32 s0; + s1 = a0; + s0 = (u32)a1; + func_800D3020(); + s0 >>= 5; + *D_800DB674 |= 0x88; + *D_800DB650 = 0; + *D_800DB648 = s1; + *D_800DB64C = (s32)(s0 << 16) | 0x20; + *D_800DB650 = 0x1000200; +} + +--- func_800D30B8 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:859) shares 1: D_800DB670 --- +s32 func_800D30B8(void) { + return *D_800DB670; +} + +--- func_800D2F88 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:829) shares 1: D_800DB670 --- +u32 aF800D2F88(void) +{ + volatile int count = 0x100000; + while (*(*(u32 **)&D_800DB670) & 0x20000000) { + if (--count == -1) { + func_800D30D0("MDEC_in_sync"); + return -1; + } + } + return 0; +} + +--- func_800D3020 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:845) shares 1: D_800DB650 --- +u32 func_800D3020(void) +{ + volatile int count = 0x100000; + while (*(*(u32 * *)&D_800DB650) & 0x1000000) { + if (--count == -1) { + func_800D30D0("MDEC_out_sync"); + return -1; + } + } + return 0; +} + +--- func_800D2D68 (src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:757) shares 1: func_8005C604 --- +void func_800D2D68(s32 arg0) { + s32 dummy; + switch (arg0) { + case 0: + *aD800DB670 = 0x80000000; + *aD800DB644 = 0; + *aD800DB650 = 0; + *aD800DB670 = 0x60000000; + func_800D2E64((s32)&D_800DB52C, 0x20); + func_800D2E64((s32)&D_800DB5B0, 0x20); + break; + case 1: + *aD800DB670 = 0x80000000; + *aD800DB644 = 0; + *aD800DB650 = 0; + dummy = *aD800DB650; + *aD800DB670 = 0x60000000; + break; + default: + func_8005C604(D_800CEE1C, arg0); + break; + } +} + diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/residual.txt b/.run/P36/agents/md_MAIN_003__func_800D30D0/residual.txt new file mode 100644 index 000000000..1b411ff7a --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/residual.txt @@ -0,0 +1,17 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c:func_800D30D0: score 14 (COUNT; mine 76 ins, target 76) — not yet + delete mine[63:70] target[63:63] + 63 lui v0,0x0 | -- + 64 lw v0,0(v0) | -- + 65 lui v1,0x0 | -- + 66 lw v1,0(v1) | -- + 67 lw v0,0(v0) | -- + 68 lui v0,0x6000 | -- + 69 sw v0,0(v1) | -- + insert mine[71:71] target[64:71] + 71 -- | lui v1,0x0 + 72 -- | lw v1,0(v1) + 73 -- | lui a0,0x0 + 74 -- | lw a0,0(a0) + 75 -- | lw v1,0(v1) + 76 -- | lui v1,0x6000 + 77 -- | sw v1,0(a0) diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/sites.txt b/.run/P36/agents/md_MAIN_003__func_800D30D0/sites.txt new file mode 100644 index 000000000..7f477a6cc --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/sites.txt @@ -0,0 +1,6 @@ +REMOVED pin $2 line 906 +NEEDED cast volatile s32 * line 910 +NEEDED cast volatile u32 * line 912 +NEEDED cast volatile u32 * line 913 +NEEDED launder line 927 +NEEDED cast volatile s32 * line 928 diff --git a/.run/P36/agents/md_MAIN_003__func_800D30D0/tu.txt b/.run/P36/agents/md_MAIN_003__func_800D30D0/tu.txt new file mode 100644 index 000000000..792148857 --- /dev/null +++ b/.run/P36/agents/md_MAIN_003__func_800D30D0/tu.txt @@ -0,0 +1,2 @@ +src/md_MAIN_003/md_MAIN_003_jr_800D1E18.c +func_800D30D0