diff --git a/.run/P36/agents/ov_SC03_113__func_80181864/body.c b/.run/P36/agents/ov_SC03_113__func_80181864/body.c index e17fe6ce8c..c4d5e130c8 100644 --- a/.run/P36/agents/ov_SC03_113__func_80181864/body.c +++ b/.run/P36/agents/ov_SC03_113__func_80181864/body.c @@ -1,4 +1,4 @@ -void func_80181864(s32 arg0) { +void func_80181864(s32 e) { extern void func_8012C218(void *a0); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_80133784(s32 a0, void *a1, s32 a2); @@ -9,28 +9,23 @@ void func_80181864(s32 arg0) { extern s32 D_8019F2A8; extern s32 D_8019F28C; - s32 e; + s32 p; s32 n; s32 dir; - e = arg0; if (--*(s16 *)(e + 0xFC) == 0) { n = 0; + p = e; do { - arg0 = *(s32 *)(arg0 + 0x6C); + p = *(s32 *)(p + 0x6C); n++; - } while (arg0 != 0); + } while (p != 0); if (n < 7) { - if (e != 0) { - arg0 = e; - for (;;) { - s32 next = *(s32 *)(arg0 + 0x6C); - func_8012C218((void *)arg0); - arg0 = next; - if (arg0 == 0) { - return; - } - } + p = e; + while (p != 0) { + s32 next = *(s32 *)(p + 0x6C); + func_8012C218((void *)p); + p = next; } return; } @@ -71,15 +66,15 @@ void func_80181864(s32 arg0) { q[2] = z; if (func_80133784(1, p1, (s32)q) != 0) { - n = 1; *(s16 *)(e + 0x12) = -(rand() & 3) - 4; + n = 1; } else { q[0] = p1[0] + 0x40; q[1] = p1[1]; q[2] = p1[2]; if (func_80133784(1, q, (s32)p1) != 0) { - n = 2; *(s16 *)(e + 0x12) = (rand() & 3) + 4; + n = 2; } } } @@ -100,15 +95,15 @@ void func_80181864(s32 arg0) { q[2] = z + 0x40; if (func_80133784(1, p1, (s32)q) != 0) { - n += 4; *(s16 *)(e + 0x1A) = -(rand() & 3) - 4; + n += 4; } else { q[0] = p1[0]; q[1] = p1[1]; q[2] = p1[2] + 0x40; if (func_80133784(1, q, (s32)p1) != 0) { - n += 8; *(s16 *)(e + 0x1A) = (rand() & 3) + 4; + n += 8; } } } @@ -146,7 +141,6 @@ void func_80181864(s32 arg0) { s32 t1; s32 t2; s32 t3; - s32 p; *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0; t1 = *(u16 *)(e + 6); diff --git a/.run/P36/agents/ov_SC03_113__func_80181864/mechanism.md b/.run/P36/agents/ov_SC03_113__func_80181864/mechanism.md new file mode 100644 index 0000000000..7474aa29ee --- /dev/null +++ b/.run/P36/agents/ov_SC03_113__func_80181864/mechanism.md @@ -0,0 +1,71 @@ +# func_80181864 (ov_SC03_113) — d23, P36 S104 — score 25 → 0, ZERO levers (3 levers → 0; 7 copies close, 21 → 0) + +## (a) The residual +Two defects, both counted before touching the source (237 vs 240 instructions): +1. **Free-list loop** (was the `launder` lever): target `move a0,s0; beqz a0,END; nop; j L; nop` — the exit test reads the + COPY (a0); mine tested the source `s0` and reorg put the copy in the branch delay slot (`beqz s0,END; move a0,s0`). + Same count, different test register → one delay slot unfilled in the target. +2. **Two cross-jumped stores** (were the two `barrier` levers): target ends BOTH arms of each `if (call) … else if (call) …` + pair with its own `sh v0,18(s0)` / `sh v0,26(s0)` (the first arm's in its `j`'s delay slot); mine had ONE store, the + first arm jumping into the middle of the second arm's tail (`j ; addiu v0,v0,-4`) — 2 missing instructions. + +## (b) Passes and decisions (read, and proved on dumps) +1. cse `make_regs_eqv`, **`cse.c:846-857`**: on `arg0 = e`, the NEW register becomes the class's canonical (first) reg only + if it lives beyond the cse block AND its last use is later than the old one's (`regno_last_uid[new] > …[firstr]`). + The decompiler text reused `e` (the function's entity pointer, used to the function's END) as the loop's "next" temp, + so `e` always stayed canonical and the test `arg0 == 0` was rewritten to `e == 0` (`canon_reg`). A loop-local `next` + dies at `p = next`, `p` outlives it (the loop test), so `p` becomes canonical and the test stays on the copy. + (Proved on bytes: this move alone 25 → 21, the loop hunk vanishes.) +2. post-reload jump pass with cross-jumping, **`toplev.c:3142`** → `find_cross_jump` **`jump.c:2371`**, equality by + `rtx_renumbered_equal_p` (`jump.c:3899`), minimum 1 insn (`jump.c:1978`). Source order `n = 1; store;` makes the store the + LAST insn before both the `j L` and the fall-through into `L` → equal → merged (`do_cross_jump`). Dump proof + (`scratch/dumps_a1` vs `scratch/dumps_sw15`, pass order greg → sched2 → jump2 → dbr): with the old order the stores to + e+0x12/e+0x1A are insns 259/312/392/445 in `.sched2` and only 312/445 in `.jump2`; with `store; n = 1;` the last insns + before the jump/label are `(set s1 (const_int 1))` vs `(set s1 (const_int 2))` (and `s1+4` vs `s1+8`) — unequal at the + first compare, no merge; all four stores survive `.jump2`, and reorg (`.dbr`) later hoists `li s1,N` into the `jal rand` + delay slot and copies the store into the `j`'s slot (new uids 766/769) — exactly the target's layout. + +## (c) The moves that closed it (all plain C) +1. `for(;;){ e = p->next; f(p); p = e; if (!p) return; }` → `while (p != 0) { s32 next = *(s32 *)(p + 0x6C); f(p); p = next; }` + (a fresh loop-local `next` instead of reusing `e`; the structured `while` is byte-identical to the `for(;;)`/`if` form, + and so are `for (p = e; p != 0; p = next)` and the `if (e) do … while` form — tested). +2. In each of the four arms: `n = K; *(s16 *)(e + 0x12) = …;` → `*(s16 *)(e + 0x12) = …; n = K;` (store first, then the + counter). Either one arm of each pair suffices (masks 5/6/9/10… of 16 all score 0); all four swapped is the consistent text. +3. Readability only (0 bytes): parameter named `e` directly, one walker `p` for all three list walks (the count loop, the + free loop, the 0x2000-arm loop — the inner `s32 p;` shadow deleted). Scores 0 with each step. +Single-move scores: move 1 alone 21, move 2 alone 18, both 0 (the 25 start). + +## (d) GENERATOR PROPOSALS +- **R-xjump-order**: when the residual shows a `j` into the MIDDLE of another arm's tail with the target duplicating that + tail's last store (a cross-jump stub; tree lever = `__asm__ __volatile__("")` "5a cross-jump barrier"), move the arm's + last side-effect-free REGISTER assignment (`n = K`, `n += K`, a flag) to AFTER the arm's final store, in every arm that + ends `…; store;` before a join label — the arms then end with unequal insns and `find_cross_jump` stops at the first + compare. This is the lever-free replacement for every "cookbook 5a" barrier whose arms set distinct constants. +- **R-fresh-next**: when a list-walk `x = p->next; f(p); p = x; if (p == 0)` reuses a LONG-LIVED variable as `x` and the + residual is the loop's test register (test on the source vs the copy), replace `x` with a loop-local `next` + (cse canonical-reg choice, `cse.c:846-857`). Tree lever = a `"=r"/"0"` launder on the copy. + +## (e) What did not work / notes +- Struct typing does NOT steer the cross-jump: a body-local `struct Ent { …; s16 v12; …; s16 v1A; }` for the four stores + scores 21 with the old statement order (`scratch/st_a1.c`) and 0 with the new (`scratch/st_sw15.c`) — + `rtx_renumbered_equal_p` compares codes/modes/operands, never `MEM_IN_STRUCT_P` (a flag, not a format field). +- No lever-free donor existed: all 6 other definitions of the class carry the same 3 levers. +- The sweep's generators could not reach either move: R9 swap-stmts was applied at one site only (`@5537`), and neither + defect alone moves the score much from its start (21/18) while the other remains — a JOINT edit (method step 5). + +## (f) Where the method fell short +- Nothing blocking; step 1 (whole-function dump diff with addresses stripped) located both defects in one read, and the + `.sched2`/`.jump2` store-uid census proved the cross-jump in one command. A cheap enumerator over "statement pair + swaps inside arms that end at a shared label" (16 bodies here, ~5 s) would have found move 2 mechanically. + +## (g) Structs answer +No for this class — neither remaining decision reads struct information: cse's canonical-register choice is lifetime +arithmetic on pseudos, and cross-jump's equality ignores MEM flags (tested on bytes, above). A struct for `e` would still +be the right READABILITY step for the structs phase: `0x02 s16 state`, `0x06/0x0A/0x0E u16 pos x/y/z`, `0x12/0x16/0x1A s16 +vel x/y/z`, `0x20 ptr → sub-object (0x12 s16 dir, 0x14 s16 angle)`, `0x34 s16`, `0x6C next` (linked list), `0x70 s16`, +`0x88/0x8A/0x8C s16 home x/y/z`, `0xFC s16 timer` — all byte-neutral per the struct test. + +## Proved vs not proved +Proved on bytes: both moves (score 0, reloc-level objdump identical, `scratch/final.s` vs `scratch/target.s`), the +cross-jump attribution (uid census across `.sched2`/`.jump2`), the struct null. Read but not traced in a dump: the exact +`make_regs_eqv` branch taken for `p = next` (inferred from the loop hunk disappearing under move 1 alone). diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index 4bddbbd7dd..337a1fea94 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -1,7 +1,7 @@ { - "head": "48bb124be", + "head": "1f4989b4c", "stamp": "15956e4a96c4", - "generated": "2026-09-10 22:57", + "generated": "2026-09-10 22:59", "aliases": [ "main", "ov_SC03_014", @@ -21,207 +21,207 @@ "main": { "objects": 85, "identical": 85, - "seconds": 10.658000000000007, - "mean_s": 0.125 + "seconds": 9.427999999999999, + "mean_s": 0.111 }, "ov_SC03_014": { "objects": 32, "identical": 32, - "seconds": 6.604000000000002, - "mean_s": 0.206 + "seconds": 3.6810000000000005, + "mean_s": 0.115 }, "ov_SC03_015": { "objects": 32, "identical": 32, - "seconds": 6.815000000000002, - "mean_s": 0.213 + "seconds": 5.304, + "mean_s": 0.166 }, "ov_SC04_011": { "objects": 28, "identical": 28, - "seconds": 6.18, - "mean_s": 0.221 + "seconds": 5.533999999999999, + "mean_s": 0.198 } }, "per_object_seconds": { - "build/src/800.o": 0.967, - "build/src/800_b.o": 0.145, - "build/src/800_b_2.o": 0.431, - "build/src/800_b_o0a.o": 0.163, - "build/src/800_c.o": 0.324, - "build/src/800b2.o": 0.127, - "build/src/apicard1.o": 0.081, - "build/src/apicard2.o": 0.088, - "build/src/apicard3.o": 0.148, - "build/src/apicard4.o": 0.16, - "build/src/apicard5.o": 0.128, - "build/src/apicard6.o": 0.107, - "build/src/apicard7.o": 0.106, - "build/src/boot.o": 0.116, - "build/src/gap.o": 0.068, - "build/src/libapi1.o": 0.076, - "build/src/libapi2.o": 0.084, - "build/src/libc2_1.o": 0.154, - "build/src/libc2_2.o": 0.118, - "build/src/libcd1.o": 0.103, - "build/src/libcd2.o": 0.13, - "build/src/libetc.o": 0.098, - "build/src/libgpu.o": 0.11, - "build/src/libgpu2.o": 0.09, - "build/src/libgs1.o": 0.08, - "build/src/libgs2.o": 0.081, - "build/src/libgs3.o": 0.094, - "build/src/libgs4.o": 0.077, - "build/src/libgs5.o": 0.073, - "build/src/libgs6.o": 0.094, - "build/src/libgs7.o": 0.113, - "build/src/libgs8.o": 0.081, - "build/src/libgte1.o": 0.094, - "build/src/libgte10.o": 0.085, - "build/src/libgte11.o": 0.131, - "build/src/libgte12.o": 0.127, - "build/src/libgte13.o": 0.088, - "build/src/libgte14.o": 0.133, - "build/src/libgte15.o": 0.099, - "build/src/libgte16.o": 0.135, - "build/src/libgte17.o": 0.082, - "build/src/libgte18.o": 0.116, - "build/src/libgte19.o": 0.098, - "build/src/libgte2.o": 0.094, - "build/src/libgte20.o": 0.09, - "build/src/libgte21.o": 0.117, - "build/src/libgte22.o": 0.082, - "build/src/libgte23.o": 0.089, - "build/src/libgte24.o": 0.081, - "build/src/libgte25.o": 0.129, - "build/src/libgte26.o": 0.086, - "build/src/libgte27.o": 0.094, - "build/src/libgte28.o": 0.087, - "build/src/libgte29.o": 0.11, - "build/src/libgte3.o": 0.122, - "build/src/libgte30.o": 0.115, - "build/src/libgte4.o": 0.104, - "build/src/libgte5.o": 0.109, - "build/src/libgte6.o": 0.1, - "build/src/libgte7.o": 0.124, - "build/src/libgte8.o": 0.114, - "build/src/libgte9.o": 0.08, - "build/src/libmcrd1.o": 0.149, - "build/src/libmcrd2.o": 0.096, - "build/src/libpad1.o": 0.087, - "build/src/libpad2.o": 0.13, - "build/src/sgap.o": 0.1, - "build/src/sgap_2.o": 0.12, - "build/src/sgap_3.o": 0.144, - "build/src/sgap_4.o": 0.101, - "build/src/sgap_5.o": 0.178, - "build/src/sgap_6.o": 0.126, - "build/src/sgap_8.o": 0.112, - "build/src/snd1.o": 0.167, - "build/src/snd10.o": 0.085, - "build/src/snd11.o": 0.112, - "build/src/snd12.o": 0.163, - "build/src/snd2.o": 0.098, - "build/src/snd3.o": 0.083, - "build/src/snd4.o": 0.129, - "build/src/snd5.o": 0.108, - "build/src/snd6.o": 0.129, - "build/src/snd7.o": 0.108, - "build/src/snd8.o": 0.088, - "build/src/snd9.o": 0.115, - "build/src/ov_SC03_014/ov_SC03_014.o": 0.169, - "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.747, - "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.513, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.078, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.087, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.171, - "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.252, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.2, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.122, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.131, - "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.263, + "build/src/800.o": 0.82, + "build/src/800_b.o": 0.14, + "build/src/800_b_2.o": 0.388, + "build/src/800_b_o0a.o": 0.134, + "build/src/800_c.o": 0.285, + "build/src/800b2.o": 0.167, + "build/src/apicard1.o": 0.098, + "build/src/apicard2.o": 0.113, + "build/src/apicard3.o": 0.086, + "build/src/apicard4.o": 0.158, + "build/src/apicard5.o": 0.129, + "build/src/apicard6.o": 0.08, + "build/src/apicard7.o": 0.16, + "build/src/boot.o": 0.121, + "build/src/gap.o": 0.081, + "build/src/libapi1.o": 0.104, + "build/src/libapi2.o": 0.069, + "build/src/libc2_1.o": 0.081, + "build/src/libc2_2.o": 0.078, + "build/src/libcd1.o": 0.114, + "build/src/libcd2.o": 0.123, + "build/src/libetc.o": 0.117, + "build/src/libgpu.o": 0.109, + "build/src/libgpu2.o": 0.11, + "build/src/libgs1.o": 0.113, + "build/src/libgs2.o": 0.083, + "build/src/libgs3.o": 0.119, + "build/src/libgs4.o": 0.101, + "build/src/libgs5.o": 0.099, + "build/src/libgs6.o": 0.115, + "build/src/libgs7.o": 0.093, + "build/src/libgs8.o": 0.12, + "build/src/libgte1.o": 0.076, + "build/src/libgte10.o": 0.137, + "build/src/libgte11.o": 0.096, + "build/src/libgte12.o": 0.138, + "build/src/libgte13.o": 0.085, + "build/src/libgte14.o": 0.096, + "build/src/libgte15.o": 0.118, + "build/src/libgte16.o": 0.09, + "build/src/libgte17.o": 0.111, + "build/src/libgte18.o": 0.103, + "build/src/libgte19.o": 0.108, + "build/src/libgte2.o": 0.099, + "build/src/libgte20.o": 0.093, + "build/src/libgte21.o": 0.132, + "build/src/libgte22.o": 0.096, + "build/src/libgte23.o": 0.128, + "build/src/libgte24.o": 0.094, + "build/src/libgte25.o": 0.08, + "build/src/libgte26.o": 0.13, + "build/src/libgte27.o": 0.079, + "build/src/libgte28.o": 0.105, + "build/src/libgte29.o": 0.117, + "build/src/libgte3.o": 0.097, + "build/src/libgte30.o": 0.128, + "build/src/libgte4.o": 0.11, + "build/src/libgte5.o": 0.127, + "build/src/libgte6.o": 0.102, + "build/src/libgte7.o": 0.118, + "build/src/libgte8.o": 0.077, + "build/src/libgte9.o": 0.098, + "build/src/libmcrd1.o": 0.087, + "build/src/libmcrd2.o": 0.086, + "build/src/libpad1.o": 0.098, + "build/src/libpad2.o": 0.077, + "build/src/sgap.o": 0.085, + "build/src/sgap_2.o": 0.074, + "build/src/sgap_3.o": 0.097, + "build/src/sgap_4.o": 0.076, + "build/src/sgap_5.o": 0.084, + "build/src/sgap_6.o": 0.092, + "build/src/sgap_8.o": 0.097, + "build/src/snd1.o": 0.077, + "build/src/snd10.o": 0.049, + "build/src/snd11.o": 0.053, + "build/src/snd12.o": 0.043, + "build/src/snd2.o": 0.05, + "build/src/snd3.o": 0.053, + "build/src/snd4.o": 0.052, + "build/src/snd5.o": 0.045, + "build/src/snd6.o": 0.052, + "build/src/snd7.o": 0.04, + "build/src/snd8.o": 0.04, + "build/src/snd9.o": 0.045, + "build/src/ov_SC03_014/ov_SC03_014.o": 0.08, + "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.317, + "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.241, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.034, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.035, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.138, + "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.145, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.112, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.112, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.099, + "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.161, "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.089, - "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.272, - "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.123, - "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.099, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.11, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.115, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.622, - "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.347, - "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.149, - "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.288, - "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.11, - "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.148, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.1, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.206, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.263, - "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.079, - "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.358, - "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.078, - "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.111, - "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.078, - "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.126, - "build/src/ov_SC03_015/ov_SC03_015.o": 0.203, - "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.711, - "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.478, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.09, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.103, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.168, - "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.257, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.156, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.133, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.131, - "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.285, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.111, - "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.232, - "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.142, - "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.092, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.085, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.173, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.667, - "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.388, - "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.137, - "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.278, - "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.075, - "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.181, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.093, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.28, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.303, - "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.094, - "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.367, - "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.078, - "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.132, - "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.095, - "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.097, - "build/src/ov_SC04_011/ov_SC04_011.o": 0.166, - "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.71, - "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.505, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.079, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.07, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.193, - "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.207, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.164, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.116, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.086, - "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.25, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.095, - "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.269, - "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.114, - "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.117, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.105, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.136, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.552, - "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.33, - "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.146, - "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.255, + "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.157, + "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.096, + "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.101, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.083, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.08, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.327, + "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.193, + "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.092, + "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.148, + "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.051, + "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.088, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.061, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.13, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.124, + "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.033, + "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.171, + "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.042, + "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.043, + "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.041, + "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.057, + "build/src/ov_SC03_015/ov_SC03_015.o": 0.082, + "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.553, + "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.454, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.102, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.122, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.165, + "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.234, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.17, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.184, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.13, + "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.253, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.115, + "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.239, + "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.184, + "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.097, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.134, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.111, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.456, + "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.267, + "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.12, + "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.209, + "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.08, + "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.12, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.059, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.126, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.17, + "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.044, + "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.168, + "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.039, + "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.038, + "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.036, + "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.043, + "build/src/ov_SC04_011/ov_SC04_011.o": 0.079, + "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.313, + "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.407, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.107, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.119, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.219, + "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.184, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.18, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.147, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.165, + "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.275, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.145, + "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.249, + "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.161, + "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.123, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.151, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.15, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.496, + "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.27, + "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.137, + "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.266, "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.103, - "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.151, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.123, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.151, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.774, - "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.095, - "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.118 + "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.146, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.08, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.156, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.552, + "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.066, + "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.088 }, "ok": true, - "seconds": 3.7 + "seconds": 25.1 } diff --git a/.run/P36/delever/ledger.jsonl b/.run/P36/delever/ledger.jsonl index 15495e4fef..b8a54c6529 100644 --- a/.run/P36/delever/ledger.jsonl +++ b/.run/P36/delever/ledger.jsonl @@ -29234,3 +29234,7 @@ {"ts": "2026-09-10 22:57:33", "label": "s104_d24", "rung": "E", "calib": {"head": "66eafc8a5", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC02_017/ov_SC02_017_jr_8017DF34.c", "fn": "func_80182EB0", "addr": 2149068464, "aliases": null, "header": false, "includers": 0, "nhash_before": "b4500dd7c2e066075034c4b8b67c07456ed3c475", "nhash_after": "2f162956e3247ba63ce54da7d2645664934d4557", "source": "propagate:src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c:func_8018003C", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.248, "objects": ["build/src/ov_SC02_017/ov_SC02_017_jr_8017DF34.o"], "before_text": "void func_80182EB0(s32 arg0)\n{\n register s32 s1 __asm__(\"$17\") = arg0; // !FAKE: pin $17 \u2014 NEEDED DIFFERS (P36 rung B tus8)\n s32 s0;\n s32 v0;\n s32 v1;\n s32 a0;\n register s32 a1 __asm__(\"$5\"); // !FAKE: pin $5 \u2014 NEEDED DIFFERS (P36 rung B tus8)\n register s32 a2 __asm__(\"$6\"); // !FAKE: pin $6 \u2014 NEEDED DIFFERS (P36 rung B tus8)\n register s32 zr __asm__(\"$0\"); // !FAKE: pin $0 \u2014 NEEDED DIFFERS (P36 rung B tus8)\n\n \n v0 = *(s32 *)(s1 + 0x10);\n v1 = *(s32 *)(s1 + 0x2C);\n a1 = *(s32 *)(s1 + 0x30);\n a2 = *(s32 *)(s1 + 0x34);\n\n \n s0 = *(s32 *)(s1 + 0x20);\n\n \n v0 = v0 + v1;\n *(s32 *)(s1 + 0x10) = v0;\n\n \n v0 = *(s32 *)(s1 + 0x14);\n v1 = *(s32 *)(s1 + 0x18);\n v0 = v0 + a1;\n v1 = v1 + a2;\n *(s32 *)(s1 + 0x14) = v0;\n *(s32 *)(s1 + 0x18) = v1;\n\n \n ((void (*)(void))func_8012931C)();\n\n \n a0 = s0 + zr;\n\n \n v0 = *(u16 *)(s0 + 0x1A);\n v0 = v0 - 0x100;\n *(u16 *)(a0 + 0x1A) = (u16)v0;\n *(u16 *)(a0 + 0x18) = (u16)v0;\n\n \n if (func_80128ED8(a0, (s32 *)(s1 + 0x24)) != 0) {\n func_801292C8((u8 *)s1);\n } else {\n v0 = *(s32 *)(s1 + 0x1C);\n if (v0 != 0) {\n v0--;\n *(s32 *)(s1 + 0x1C) = v0;\n if (v0 == 0) {\n func_801292C8((u8 *)s1);\n }\n }\n }\n}\n", "after_text": "void func_80182EB0(s32 arg0)\n{\n s32 obj;\n s32 v;\n s32 timer;\n\n obj = *(s32 *)(arg0 + 0x20);\n *(s32 *)(arg0 + 0x10) += *(s32 *)(arg0 + 0x2C);\n *(s32 *)(arg0 + 0x14) += *(s32 *)(arg0 + 0x30);\n *(s32 *)(arg0 + 0x18) += *(s32 *)(arg0 + 0x34);\n func_8012931C((struct vec *)arg0);\n v = *(u16 *)(obj + 0x1A) - 0x100;\n *(u16 *)(obj + 0x1A) = v;\n *(u16 *)(obj + 0x18) = v;\n if (func_80128ED8(obj, (s32 *)(arg0 + 0x24)) != 0) {\n func_801292C8((u8 *)arg0);\n } else {\n timer = *(s32 *)(arg0 + 0x1C);\n if (timer != 0) {\n timer--;\n *(s32 *)(arg0 + 0x1C) = timer;\n if (timer == 0) {\n func_801292C8((u8 *)arg0);\n }\n }\n }\n}\n"} {"ts": "2026-09-10 22:57:36", "label": "s104_d24", "rung": "E", "calib": {"head": "66eafc8a5", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c", "fn": "func_80181D9C", "addr": 2149064092, "aliases": null, "header": false, "includers": 0, "nhash_before": "b4500dd7c2e066075034c4b8b67c07456ed3c475", "nhash_after": "2f162956e3247ba63ce54da7d2645664934d4557", "source": "propagate:src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c:func_8018003C", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.294, "objects": ["build/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.o"], "before_text": "void func_80181D9C(s32 arg0)\n{\n register s32 s1 __asm__(\"$17\") = arg0; // !FAKE: pin $17 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 s0;\n s32 v0;\n s32 v1;\n s32 a0;\n register s32 a1 __asm__(\"$5\"); // !FAKE: pin $5 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 a2 __asm__(\"$6\"); // !FAKE: pin $6 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 zr __asm__(\"$0\"); // !FAKE: pin $0 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n\n \n v0 = *(s32 *)(s1 + 0x10);\n v1 = *(s32 *)(s1 + 0x2C);\n a1 = *(s32 *)(s1 + 0x30);\n a2 = *(s32 *)(s1 + 0x34);\n\n \n s0 = *(s32 *)(s1 + 0x20);\n\n \n v0 = v0 + v1;\n *(s32 *)(s1 + 0x10) = v0;\n\n \n v0 = *(s32 *)(s1 + 0x14);\n v1 = *(s32 *)(s1 + 0x18);\n v0 = v0 + a1;\n v1 = v1 + a2;\n *(s32 *)(s1 + 0x14) = v0;\n *(s32 *)(s1 + 0x18) = v1;\n\n \n ((void (*)(void))func_8012931C)();\n\n \n a0 = s0 + zr;\n\n \n v0 = *(u16 *)(s0 + 0x1A);\n v0 = v0 - 0x100;\n *(u16 *)(a0 + 0x1A) = (u16)v0;\n *(u16 *)(a0 + 0x18) = (u16)v0;\n\n \n if (func_80128ED8(a0, (s32 *)(s1 + 0x24)) != 0) {\n func_801292C8((u8 *)s1);\n } else {\n v0 = *(s32 *)(s1 + 0x1C);\n if (v0 != 0) {\n v0--;\n *(s32 *)(s1 + 0x1C) = v0;\n if (v0 == 0) {\n func_801292C8((u8 *)s1);\n }\n }\n }\n}\n", "after_text": "void func_80181D9C(s32 arg0)\n{\n s32 obj;\n s32 v;\n s32 timer;\n\n obj = *(s32 *)(arg0 + 0x20);\n *(s32 *)(arg0 + 0x10) += *(s32 *)(arg0 + 0x2C);\n *(s32 *)(arg0 + 0x14) += *(s32 *)(arg0 + 0x30);\n *(s32 *)(arg0 + 0x18) += *(s32 *)(arg0 + 0x34);\n func_8012931C((struct vec *)arg0);\n v = *(u16 *)(obj + 0x1A) - 0x100;\n *(u16 *)(obj + 0x1A) = v;\n *(u16 *)(obj + 0x18) = v;\n if (func_80128ED8(obj, (s32 *)(arg0 + 0x24)) != 0) {\n func_801292C8((u8 *)arg0);\n } else {\n timer = *(s32 *)(arg0 + 0x1C);\n if (timer != 0) {\n timer--;\n *(s32 *)(arg0 + 0x1C) = timer;\n if (timer == 0) {\n func_801292C8((u8 *)arg0);\n }\n }\n }\n}\n"} {"ts": "2026-09-10 22:58:09", "label": "s104_d24", "rung": "E", "calib": {"head": "48bb124be", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC02_011/ov_SC02_011_jr_80183178.c", "fn": "func_80187CE8", "addr": 2149088488, "aliases": null, "header": false, "includers": 0, "nhash_before": "b4500dd7c2e066075034c4b8b67c07456ed3c475", "nhash_after": "2f162956e3247ba63ce54da7d2645664934d4557", "source": ".run/P36/agents/ov_SC02_016__func_8018003C/scratch/copy_func_80187CE8.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.258, "objects": ["build/src/ov_SC02_011/ov_SC02_011_jr_80183178.o"], "before_text": "void func_80187CE8(s32 arg0)\n{\n register s32 s1 __asm__(\"$17\") = arg0; // !FAKE: pin $17 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 s0;\n s32 v0;\n s32 v1;\n s32 a0;\n register s32 a1 __asm__(\"$5\"); // !FAKE: pin $5 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 a2 __asm__(\"$6\"); // !FAKE: pin $6 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 zr __asm__(\"$0\"); // !FAKE: pin $0 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n\n /* Load velocity components */\n v0 = *(s32 *)(s1 + 0x10);\n v1 = *(s32 *)(s1 + 0x2C);\n a1 = *(s32 *)(s1 + 0x30);\n a2 = *(s32 *)(s1 + 0x34);\n\n /* Load s0 pointer from offset 0x20 */\n s0 = *(s32 *)(s1 + 0x20);\n\n /* Add velocity to position at 0x10 */\n v0 = v0 + v1;\n *(s32 *)(s1 + 0x10) = v0;\n\n /* Load and add velocity to positions at 0x14 and 0x18 */\n v0 = *(s32 *)(s1 + 0x14);\n v1 = *(s32 *)(s1 + 0x18);\n v0 = v0 + a1;\n v1 = v1 + a2;\n *(s32 *)(s1 + 0x14) = v0;\n *(s32 *)(s1 + 0x18) = v1;\n\n /* Call update function */\n ((void (*)(void))func_8012931C)();\n\n /* Opaque copy s0 -> a0: RC-12 $0-add so cse cannot fold the later\n lhu (which the target keeps reading from $s0) onto this copy. */\n a0 = s0 + zr;\n\n /* Update value at offset 0x1A (target reads this via $s0, not $a0) */\n v0 = *(u16 *)(s0 + 0x1A);\n v0 = v0 - 0x100;\n *(u16 *)(a0 + 0x1A) = (u16)v0;\n *(u16 *)(a0 + 0x18) = (u16)v0;\n\n /* Call func_80128ED8 and branch on result */\n if (func_80128ED8(a0, (s32 *)(s1 + 0x24)) != 0) {\n func_801292C8((u8 *)s1);\n } else {\n v0 = *(s32 *)(s1 + 0x1C);\n if (v0 != 0) {\n v0--;\n *(s32 *)(s1 + 0x1C) = v0;\n if (v0 == 0) {\n func_801292C8((u8 *)s1);\n }\n }\n }\n}\n", "after_text": "void func_80187CE8(s32 arg0)\n{\n s32 obj;\n s32 v;\n s32 timer;\n\n obj = *(s32 *)(arg0 + 0x20);\n *(s32 *)(arg0 + 0x10) += *(s32 *)(arg0 + 0x2C);\n *(s32 *)(arg0 + 0x14) += *(s32 *)(arg0 + 0x30);\n *(s32 *)(arg0 + 0x18) += *(s32 *)(arg0 + 0x34);\n func_8012931C((struct vec *)arg0);\n v = *(u16 *)(obj + 0x1A) - 0x100;\n *(u16 *)(obj + 0x1A) = v;\n *(u16 *)(obj + 0x18) = v;\n if (func_80128ED8(obj, (s32 *)(arg0 + 0x24)) != 0) {\n func_801292C8((u8 *)arg0);\n } else {\n timer = *(s32 *)(arg0 + 0x1C);\n if (timer != 0) {\n timer--;\n *(s32 *)(arg0 + 0x1C) = timer;\n if (timer == 0) {\n func_801292C8((u8 *)arg0);\n }\n }\n }\n}\n"} +{"ts": "2026-09-10 22:59:16", "label": "s104_d23", "rung": "E", "calib": {"head": "1f4989b4c", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_113/ov_SC03_113_jr_8017C294.c", "fn": "func_80181864", "addr": 2149062756, "aliases": null, "header": false, "includers": 0, "nhash_before": "a2a06c58d36e8f55167081242f1185c813cb1358", "nhash_after": "cca73347ccf21893ff750979877bc89934abef21", "source": ".run/P36/agents/ov_SC03_113__func_80181864/scratch/copy_func_80181864.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.308, "objects": ["build/src/ov_SC03_113/ov_SC03_113_jr_8017C294.o"], "before_text": "void func_80181864(s32 arg0) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_8019F2A8;\n extern s32 D_8019F28C;\n\n s32 e;\n s32 n;\n s32 dir;\n\n e = arg0;\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n do {\n arg0 = *(s32 *)(arg0 + 0x6C);\n n++;\n } while (arg0 != 0);\n if (n < 7) {\n if (e != 0) {\n arg0 = e;\n for (;;) {\n e = *(s32 *)(arg0 + 0x6C);\n func_8012C218((void *)arg0);\n arg0 = e;\n __asm__ __volatile__(\"\" : \"=r\"(arg0) : \"0\"(arg0)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if (arg0 == 0) {\n return;\n }\n }\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_8019F2A8);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n = 1;\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n n = 2;\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n += 4;\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n n += 8;\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n s32 p;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_8019F28C);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n", "after_text": "void func_80181864(s32 e) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_8019F2A8;\n extern s32 D_8019F28C;\n\n s32 p;\n s32 n;\n s32 dir;\n\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n p = e;\n do {\n p = *(s32 *)(p + 0x6C);\n n++;\n } while (p != 0);\n if (n < 7) {\n p = e;\n while (p != 0) {\n s32 next = *(s32 *)(p + 0x6C);\n func_8012C218((void *)p);\n p = next;\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_8019F2A8);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n n = 1;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n n = 2;\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n n += 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n n += 8;\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_8019F28C);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n"} +{"ts": "2026-09-10 22:59:45", "label": "s104_d23", "rung": "E", "calib": {"head": "1f4989b4c", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_118/ov_SC03_118_jr_801863CC.c", "fn": "func_801872B4", "addr": 2149085876, "aliases": null, "header": false, "includers": 0, "nhash_before": "a2a06c58d36e8f55167081242f1185c813cb1358", "nhash_after": "cca73347ccf21893ff750979877bc89934abef21", "source": "propagate:src/ov_SC03_113/ov_SC03_113_jr_8017C294.c:func_80181864", "verdict": "LEVER-FREE", "sites": [], "compiles": 2, "seconds": 0.376, "objects": ["build/src/ov_SC03_118/ov_SC03_118_jr_801863CC.o", "build/src/ov_SC03_119/ov_SC03_119_jr_801863CC.o"], "before_text": "void func_801872B4(s32 arg0) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_801C6FC4;\n extern s32 D_801C6FA8;\n\n s32 e;\n s32 n;\n s32 dir;\n\n e = arg0;\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n do {\n arg0 = *(s32 *)(arg0 + 0x6C);\n n++;\n } while (arg0 != 0);\n if (n < 7) {\n if (e != 0) {\n arg0 = e;\n for (;;) {\n e = *(s32 *)(arg0 + 0x6C);\n func_8012C218((void *)arg0);\n arg0 = e;\n __asm__ __volatile__(\"\" : \"=r\"(arg0) : \"0\"(arg0)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if (arg0 == 0) {\n return;\n }\n }\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_801C6FC4);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n = 1;\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n n = 2;\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n += 4;\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n n += 8;\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n s32 p;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_801C6FA8);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n", "after_text": "void func_801872B4(s32 e) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_801C6FC4;\n extern s32 D_801C6FA8;\n\n s32 p;\n s32 n;\n s32 dir;\n\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n p = e;\n do {\n p = *(s32 *)(p + 0x6C);\n n++;\n } while (p != 0);\n if (n < 7) {\n p = e;\n while (p != 0) {\n s32 next = *(s32 *)(p + 0x6C);\n func_8012C218((void *)p);\n p = next;\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_801C6FC4);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n n = 1;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n n = 2;\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n n += 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n n += 8;\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_801C6FA8);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n"} +{"ts": "2026-09-10 22:59:45", "label": "s104_d23", "rung": "E", "calib": {"head": "1f4989b4c", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_117/ov_SC03_117_jr_80181C80.c", "fn": "func_80182B68", "addr": 2149067624, "aliases": null, "header": false, "includers": 0, "nhash_before": "a2a06c58d36e8f55167081242f1185c813cb1358", "nhash_after": "cca73347ccf21893ff750979877bc89934abef21", "source": "propagate:src/ov_SC03_113/ov_SC03_113_jr_8017C294.c:func_80181864", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.156, "objects": ["build/src/ov_SC03_117/ov_SC03_117_jr_80181C80.o"], "before_text": "void func_80182B68(s32 arg0) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_801C36A8;\n extern s32 D_801C368C;\n\n s32 e;\n s32 n;\n s32 dir;\n\n e = arg0;\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n do {\n arg0 = *(s32 *)(arg0 + 0x6C);\n n++;\n } while (arg0 != 0);\n if (n < 7) {\n if (e != 0) {\n arg0 = e;\n for (;;) {\n e = *(s32 *)(arg0 + 0x6C);\n func_8012C218((void *)arg0);\n arg0 = e;\n __asm__ __volatile__(\"\" : \"=r\"(arg0) : \"0\"(arg0)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if (arg0 == 0) {\n return;\n }\n }\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_801C36A8);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n = 1;\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n n = 2;\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n += 4;\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n n += 8;\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n s32 p;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_801C368C);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n", "after_text": "void func_80182B68(s32 e) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_801C36A8;\n extern s32 D_801C368C;\n\n s32 p;\n s32 n;\n s32 dir;\n\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n p = e;\n do {\n p = *(s32 *)(p + 0x6C);\n n++;\n } while (p != 0);\n if (n < 7) {\n p = e;\n while (p != 0) {\n s32 next = *(s32 *)(p + 0x6C);\n func_8012C218((void *)p);\n p = next;\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_801C36A8);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n n = 1;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n n = 2;\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n n += 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n n += 8;\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_801C368C);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n"} +{"ts": "2026-09-10 22:59:45", "label": "s104_d23", "rung": "E", "calib": {"head": "1f4989b4c", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c", "fn": "func_80183AE0", "addr": 2149071584, "aliases": null, "header": false, "includers": 0, "nhash_before": "a2a06c58d36e8f55167081242f1185c813cb1358", "nhash_after": "cca73347ccf21893ff750979877bc89934abef21", "source": "propagate:src/ov_SC03_113/ov_SC03_113_jr_8017C294.c:func_80181864", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.114, "objects": ["build/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.o"], "before_text": "void func_80183AE0(s32 arg0) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_801A8B5C;\n extern s32 D_801A8B40;\n\n s32 e;\n s32 n;\n s32 dir;\n\n e = arg0;\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n do {\n arg0 = *(s32 *)(arg0 + 0x6C);\n n++;\n } while (arg0 != 0);\n if (n < 7) {\n if (e != 0) {\n arg0 = e;\n for (;;) {\n e = *(s32 *)(arg0 + 0x6C);\n func_8012C218((void *)arg0);\n arg0 = e;\n __asm__ __volatile__(\"\" : \"=r\"(arg0) : \"0\"(arg0)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if (arg0 == 0) {\n return;\n }\n }\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_801A8B5C);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n = 1;\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n n = 2;\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n n += 4;\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n n += 8;\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n __asm__ __volatile__(\"\"); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n s32 p;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_801A8B40);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n", "after_text": "void func_80183AE0(s32 e) {\n extern void func_8012C218(void *a0);\n extern s32 func_8012CC64(s32 a0, void *a1);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32 arg0, s32 arg1, s32 arg2);\n extern void func_8012B23C(s32 a0);\n extern void func_8012B1B4(s32 a0, s32 a1);\n extern s32 rand(void);\n extern s32 D_801A8B5C;\n extern s32 D_801A8B40;\n\n s32 p;\n s32 n;\n s32 dir;\n\n if (--*(s16 *)(e + 0xFC) == 0) {\n n = 0;\n p = e;\n do {\n p = *(s32 *)(p + 0x6C);\n n++;\n } while (p != 0);\n if (n < 7) {\n p = e;\n while (p != 0) {\n s32 next = *(s32 *)(p + 0x6C);\n func_8012C218((void *)p);\n p = next;\n }\n return;\n }\n }\n\n {\n s32 f;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) += 0x40;\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) &= 0xFFF;\n f = func_8012CC64(e, &D_801A8B5C);\n\n if (f & 0x1000) {\n *(s16 *)(e + 0x2) = 0x12;\n return;\n }\n\n n = 0;\n if (f & 0xC000) {\n s16 p1[3];\n s16 p2[3];\n\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n x = *(u16 *)(e + 6);\n p1[0] = x - 0x20;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE) + 0x20;\n p1[2] = z;\n q[0] = x + 0x20;\n q[1] = y;\n q[2] = z;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x12) = -(rand() & 3) - 4;\n n = 1;\n } else {\n q[0] = p1[0] + 0x40;\n q[1] = p1[1];\n q[2] = p1[2];\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x12) = (rand() & 3) + 4;\n n = 2;\n }\n }\n }\n {\n s16 *q = p2;\n s32 x;\n s32 y;\n s32 z;\n\n x = *(u16 *)(e + 6);\n p1[0] = x;\n y = *(u16 *)(e + 0xA) + 0x10;\n p1[1] = y;\n z = *(u16 *)(e + 0xE);\n p1[2] = z;\n q[0] = x;\n q[1] = y;\n q[2] = z + 0x40;\n\n if (func_80133784(1, p1, (s32)q) != 0) {\n *(s16 *)(e + 0x1A) = -(rand() & 3) - 4;\n n += 4;\n } else {\n q[0] = p1[0];\n q[1] = p1[1];\n q[2] = p1[2] + 0x40;\n if (func_80133784(1, q, (s32)p1) != 0) {\n *(s16 *)(e + 0x1A) = (rand() & 3) + 4;\n n += 8;\n }\n }\n }\n\n switch (n - 1) {\n case 0:\n dir = 0x800;\n break;\n case 1:\n dir = 0;\n break;\n case 3:\n dir = 0x400;\n break;\n case 4:\n dir = 0x600;\n break;\n case 5:\n dir = 0x200;\n break;\n case 7:\n dir = 0xC00;\n break;\n case 8:\n dir = 0xA00;\n break;\n case 9:\n dir = 0xE00;\n break;\n }\n *(s16 *)(*(s32 *)(e + 0x20) + 0x12) = dir;\n } else if (f & 0x2000) {\n func_8012E688(e, 0x833, 0);\n if ((rand() & 0xF) == 0) {\n s32 t1;\n s32 t2;\n s32 t3;\n\n *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;\n t1 = *(u16 *)(e + 6);\n t2 = *(u16 *)(e + 0xA);\n t3 = *(u16 *)(e + 0xE);\n *(s16 *)(e + 0x2) = 1;\n *(s16 *)(e + 0x34) = 1;\n *(s16 *)(e + 0x70) = 0;\n *(s16 *)(e + 0x88) = t1;\n *(s16 *)(e + 0x8A) = t2;\n *(s16 *)(e + 0x8C) = t3;\n func_8012B23C(e);\n func_8012B1B4(e, (s32)&D_801A8B40);\n p = *(s32 *)(e + 0x6C);\n if (p != 0) {\n do {\n *(s16 *)(p + 0x2) = 2;\n *(s16 *)(p + 0x70) -= 0x10;\n *(s16 *)(*(s32 *)(p + 0x20) + 0x14) = 0;\n p = *(s32 *)(p + 0x6C);\n } while (p != 0);\n }\n *(s16 *)(e + 0xFC) = 0;\n } else {\n *(s16 *)(e + 0x16) = -(rand() & 3) - 8;\n }\n }\n }\n\n if (*(s16 *)(e + 0xA) >= 0x65) {\n func_8012C218((void *)e);\n }\n}\n"} diff --git a/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c b/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c index 0c69f974b9..b32d8d2e1f 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_80183AE0.c @@ -2748,7 +2748,7 @@ extern void func_801833A4(s32 a0); #include "common.h" -void func_80183AE0(s32 arg0) { +void func_80183AE0(s32 e) { extern void func_8012C218(void *a0); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_80133784(s32 a0, void *a1, s32 a2); @@ -2759,29 +2759,23 @@ void func_80183AE0(s32 arg0) { extern s32 D_801A8B5C; extern s32 D_801A8B40; - s32 e; + s32 p; s32 n; s32 dir; - e = arg0; if (--*(s16 *)(e + 0xFC) == 0) { n = 0; + p = e; do { - arg0 = *(s32 *)(arg0 + 0x6C); + p = *(s32 *)(p + 0x6C); n++; - } while (arg0 != 0); + } while (p != 0); if (n < 7) { - if (e != 0) { - arg0 = e; - for (;;) { - e = *(s32 *)(arg0 + 0x6C); - func_8012C218((void *)arg0); - arg0 = e; - __asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9) - if (arg0 == 0) { - return; - } - } + p = e; + while (p != 0) { + s32 next = *(s32 *)(p + 0x6C); + func_8012C218((void *)p); + p = next; } return; } @@ -2822,16 +2816,15 @@ void func_80183AE0(s32 arg0) { q[2] = z; if (func_80133784(1, p1, (s32)q) != 0) { - n = 1; *(s16 *)(e + 0x12) = -(rand() & 3) - 4; + n = 1; } else { q[0] = p1[0] + 0x40; q[1] = p1[1]; q[2] = p1[2]; if (func_80133784(1, q, (s32)p1) != 0) { - n = 2; *(s16 *)(e + 0x12) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n = 2; } } } @@ -2852,16 +2845,15 @@ void func_80183AE0(s32 arg0) { q[2] = z + 0x40; if (func_80133784(1, p1, (s32)q) != 0) { - n += 4; *(s16 *)(e + 0x1A) = -(rand() & 3) - 4; + n += 4; } else { q[0] = p1[0]; q[1] = p1[1]; q[2] = p1[2] + 0x40; if (func_80133784(1, q, (s32)p1) != 0) { - n += 8; *(s16 *)(e + 0x1A) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n += 8; } } } @@ -2899,7 +2891,6 @@ void func_80183AE0(s32 arg0) { s32 t1; s32 t2; s32 t3; - s32 p; *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0; t1 = *(u16 *)(e + 6); diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c b/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c index 08a65e55d2..ddf8e189a2 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8017C294.c @@ -5429,7 +5429,7 @@ void func_80181730(s32 a0) #include "common.h" -void func_80181864(s32 arg0) { +void func_80181864(s32 e) { extern void func_8012C218(void *a0); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_80133784(s32 a0, void *a1, s32 a2); @@ -5440,29 +5440,23 @@ void func_80181864(s32 arg0) { extern s32 D_8019F2A8; extern s32 D_8019F28C; - s32 e; + s32 p; s32 n; s32 dir; - e = arg0; if (--*(s16 *)(e + 0xFC) == 0) { n = 0; + p = e; do { - arg0 = *(s32 *)(arg0 + 0x6C); + p = *(s32 *)(p + 0x6C); n++; - } while (arg0 != 0); + } while (p != 0); if (n < 7) { - if (e != 0) { - arg0 = e; - for (;;) { - e = *(s32 *)(arg0 + 0x6C); - func_8012C218((void *)arg0); - arg0 = e; - __asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9) - if (arg0 == 0) { - return; - } - } + p = e; + while (p != 0) { + s32 next = *(s32 *)(p + 0x6C); + func_8012C218((void *)p); + p = next; } return; } @@ -5503,16 +5497,15 @@ void func_80181864(s32 arg0) { q[2] = z; if (func_80133784(1, p1, (s32)q) != 0) { - n = 1; *(s16 *)(e + 0x12) = -(rand() & 3) - 4; + n = 1; } else { q[0] = p1[0] + 0x40; q[1] = p1[1]; q[2] = p1[2]; if (func_80133784(1, q, (s32)p1) != 0) { - n = 2; *(s16 *)(e + 0x12) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n = 2; } } } @@ -5533,16 +5526,15 @@ void func_80181864(s32 arg0) { q[2] = z + 0x40; if (func_80133784(1, p1, (s32)q) != 0) { - n += 4; *(s16 *)(e + 0x1A) = -(rand() & 3) - 4; + n += 4; } else { q[0] = p1[0]; q[1] = p1[1]; q[2] = p1[2] + 0x40; if (func_80133784(1, q, (s32)p1) != 0) { - n += 8; *(s16 *)(e + 0x1A) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n += 8; } } } @@ -5580,7 +5572,6 @@ void func_80181864(s32 arg0) { s32 t1; s32 t2; s32 t3; - s32 p; *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0; t1 = *(u16 *)(e + 6); diff --git a/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c b/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c index 6c4e166290..439807ef64 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_80181C80.c @@ -3310,7 +3310,7 @@ void func_80182A34(s32 a0) #include "common.h" -void func_80182B68(s32 arg0) { +void func_80182B68(s32 e) { extern void func_8012C218(void *a0); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_80133784(s32 a0, void *a1, s32 a2); @@ -3321,29 +3321,23 @@ void func_80182B68(s32 arg0) { extern s32 D_801C36A8; extern s32 D_801C368C; - s32 e; + s32 p; s32 n; s32 dir; - e = arg0; if (--*(s16 *)(e + 0xFC) == 0) { n = 0; + p = e; do { - arg0 = *(s32 *)(arg0 + 0x6C); + p = *(s32 *)(p + 0x6C); n++; - } while (arg0 != 0); + } while (p != 0); if (n < 7) { - if (e != 0) { - arg0 = e; - for (;;) { - e = *(s32 *)(arg0 + 0x6C); - func_8012C218((void *)arg0); - arg0 = e; - __asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9) - if (arg0 == 0) { - return; - } - } + p = e; + while (p != 0) { + s32 next = *(s32 *)(p + 0x6C); + func_8012C218((void *)p); + p = next; } return; } @@ -3384,16 +3378,15 @@ void func_80182B68(s32 arg0) { q[2] = z; if (func_80133784(1, p1, (s32)q) != 0) { - n = 1; *(s16 *)(e + 0x12) = -(rand() & 3) - 4; + n = 1; } else { q[0] = p1[0] + 0x40; q[1] = p1[1]; q[2] = p1[2]; if (func_80133784(1, q, (s32)p1) != 0) { - n = 2; *(s16 *)(e + 0x12) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n = 2; } } } @@ -3414,16 +3407,15 @@ void func_80182B68(s32 arg0) { q[2] = z + 0x40; if (func_80133784(1, p1, (s32)q) != 0) { - n += 4; *(s16 *)(e + 0x1A) = -(rand() & 3) - 4; + n += 4; } else { q[0] = p1[0]; q[1] = p1[1]; q[2] = p1[2] + 0x40; if (func_80133784(1, q, (s32)p1) != 0) { - n += 8; *(s16 *)(e + 0x1A) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n += 8; } } } @@ -3461,7 +3453,6 @@ void func_80182B68(s32 arg0) { s32 t1; s32 t2; s32 t3; - s32 p; *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0; t1 = *(u16 *)(e + 6); diff --git a/src/ov_SC03_118/ov_SC03_118_jr_801863CC.c b/src/ov_SC03_118/ov_SC03_118_jr_801863CC.c index 1d806a34ef..cfd090905f 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_801863CC.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_801863CC.c @@ -3452,7 +3452,7 @@ void func_80187180(s32 a0) #include "common.h" -void func_801872B4(s32 arg0) { +void func_801872B4(s32 e) { extern void func_8012C218(void *a0); extern s32 func_8012CC64(s32 a0, void *a1); extern s32 func_80133784(s32 a0, void *a1, s32 a2); @@ -3463,29 +3463,23 @@ void func_801872B4(s32 arg0) { extern s32 D_801C6FC4; extern s32 D_801C6FA8; - s32 e; + s32 p; s32 n; s32 dir; - e = arg0; if (--*(s16 *)(e + 0xFC) == 0) { n = 0; + p = e; do { - arg0 = *(s32 *)(arg0 + 0x6C); + p = *(s32 *)(p + 0x6C); n++; - } while (arg0 != 0); + } while (p != 0); if (n < 7) { - if (e != 0) { - arg0 = e; - for (;;) { - e = *(s32 *)(arg0 + 0x6C); - func_8012C218((void *)arg0); - arg0 = e; - __asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9) - if (arg0 == 0) { - return; - } - } + p = e; + while (p != 0) { + s32 next = *(s32 *)(p + 0x6C); + func_8012C218((void *)p); + p = next; } return; } @@ -3526,16 +3520,15 @@ void func_801872B4(s32 arg0) { q[2] = z; if (func_80133784(1, p1, (s32)q) != 0) { - n = 1; *(s16 *)(e + 0x12) = -(rand() & 3) - 4; + n = 1; } else { q[0] = p1[0] + 0x40; q[1] = p1[1]; q[2] = p1[2]; if (func_80133784(1, q, (s32)p1) != 0) { - n = 2; *(s16 *)(e + 0x12) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n = 2; } } } @@ -3556,16 +3549,15 @@ void func_801872B4(s32 arg0) { q[2] = z + 0x40; if (func_80133784(1, p1, (s32)q) != 0) { - n += 4; *(s16 *)(e + 0x1A) = -(rand() & 3) - 4; + n += 4; } else { q[0] = p1[0]; q[1] = p1[1]; q[2] = p1[2] + 0x40; if (func_80133784(1, q, (s32)p1) != 0) { - n += 8; *(s16 *)(e + 0x1A) = (rand() & 3) + 4; - __asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9) + n += 8; } } } @@ -3603,7 +3595,6 @@ void func_801872B4(s32 arg0) { s32 t1; s32 t2; s32 t3; - s32 p; *(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0; t1 = *(u16 *)(e + 6);