From 53d158ba036cbd590104e4d450b18ee079d4c27f Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Thu, 10 Sep 2026 23:03:03 -0600 Subject: [PATCH] =?UTF-8?q?phase-36:=20S104=20s104=5Fd25=20=E2=80=94=20fun?= =?UTF-8?q?c=5F8017E060=20banked=20at=200=20through=20the=20whole-object?= =?UTF-8?q?=20gate=20+=20propagated=20=E2=80=94=20$4=20pin=20=E2=86=92=200?= =?UTF-8?q?:=20the=20twice-set=20pointer=20as=20one=20expression=20(combin?= =?UTF-8?q?e=20leaves=20reg=5Fn=5Frefs=20on=20a=20folded=20pseudo,=20combi?= =?UTF-8?q?ne.c:2305-2337=20=E2=86=92=20alter=5Freg=20gives=20it=20a=20slo?= =?UTF-8?q?t,=20reload1.c:2327-2352)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agents/ov_SC04_012__func_8017E060/body.c | 7 + .../ov_SC04_012__func_8017E060/mechanism.md | 77 ++++ .run/P36/delever/calibration.json | 372 +++++++++--------- .run/P36/delever/ledger.jsonl | 3 + src/ov_SC03_007/ov_SC03_007_jr_80183894.c | 13 +- src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c | 13 +- 6 files changed, 279 insertions(+), 206 deletions(-) create mode 100644 .run/P36/agents/ov_SC04_012__func_8017E060/body.c create mode 100644 .run/P36/agents/ov_SC04_012__func_8017E060/mechanism.md diff --git a/.run/P36/agents/ov_SC04_012__func_8017E060/body.c b/.run/P36/agents/ov_SC04_012__func_8017E060/body.c new file mode 100644 index 0000000000..81c24943b6 --- /dev/null +++ b/.run/P36/agents/ov_SC04_012__func_8017E060/body.c @@ -0,0 +1,7 @@ +void func_8017E060(s32 *param_1) +{ + extern s8 D_80191C70; + + *(&D_80191C70 + param_1[0x34 / 4]) = 0; + func_801292C8((u8 *)param_1); +} diff --git a/.run/P36/agents/ov_SC04_012__func_8017E060/mechanism.md b/.run/P36/agents/ov_SC04_012__func_8017E060/mechanism.md new file mode 100644 index 0000000000..ae55c5d7ef --- /dev/null +++ b/.run/P36/agents/ov_SC04_012__func_8017E060/mechanism.md @@ -0,0 +1,77 @@ +# func_8017E060 (ov_SC04_012) — mechanism (P36 T7 S104, agent d25) + +**Final: score 0, plain C, ZERO levers (1 pin → 0).** Copies of the class also closed at 0 with the same text (table at the end). + +```c +void func_8017E060(s32 *param_1) +{ + extern s8 D_80191C70; + + *(&D_80191C70 + param_1[0x34 / 4]) = 0; + func_801292C8((u8 *)param_1); +} +``` + +## (a) The residual in one sentence +All 12 instructions are identical; only the FRAME differs — mine `addiu sp,-32 / sw ra,24(sp)`, target `-24 / 16(sp)`: the +lever-free body allocates one unused 4-byte stack slot (rounded to 8) for a pseudo that no longer appears in any insn. + +## (b) The pass and the decision (read in the dumps, proven on bytes) +- The decompiler text sets `p` TWICE: `p = (s32)&D_80191C70; … p += new_var;` → pseudo 74, `reg_n_sets = 2`, `reg_n_refs = 4` + (flow dump: "Register 74 used 4 times across 5 insns"). +- combine merges insns 11 (`p = sym`, i1), 20 (`p = r + p`, i2) and 23 (`*(s8*)p = 0`, i3) into one + `(set (mem:QI (plus r75 sym)) 0)` — p vanishes from every insn. But the ref-count bookkeeping at `combine.c:2305-2314` + (i2) and `:2327-2337` (i1) only zeroes `reg_n_refs` when `reg_n_sets` reaches 0: i2's branch is skipped because + `i2dest_in_i2src` (`combine.c:1394`, `p = p + r` reads p), and i1's decrement takes `reg_n_sets` 2 → 1 only. So pseudo 74 + keeps `reg_n_refs = 4` with no insn referencing it (the known exception documented at `combine.c:56-57`). +- regclass sees no uses → prefers `ST_REGS or none` (.lreg dump); global lists "1 regs to allocate: 74" but gives it no + hard register (.greg dispositions: only `75 in 2`). +- reload `alter_reg` (`reload1.c:2327-2352`): `reg_renumber < 0 && reg_n_refs > 0` and no equivalence → `assign_stack_local` + → a 4-byte slot → `compute_frame_size` rounds the frame 24 → 32. That is the whole residual. +- Byte evidence: `scratch/b1.c` (`p = &D; p += x; *(s8*)p = 0;`) scores 4 (the residual reproduced), `scratch/b2.c` + (`p = &D + x;` — ONE set) scores 0, `body.c` (no temp at all) scores 0. In b2's dumps the combined-away pseudos 73/75 + drop out of the .lreg register list (refs zeroed, set count 1 → 0). Dumps: `scratch/dumps_free/`, `scratch/dumps_b2/`. +- Why the tree's `$4` pin worked: a hard register is never given a stack slot by alter_reg (only pseudos), so the stale + count did nothing. + +## (c) The move that closed it +Delete the twice-set temp: write the store as one expression, `*(&D_80191C70 + param_1[0x34 / 4]) = 0;` (the sibling +functions func_8017D99C/func_8017DAE4 in the same TU spell the same global exactly this way), and pass `param_1` to +func_801292C8 as the file-scope prototype `(u8 *a0)` says (same bytes as the void(void) cast — a0 already holds param_1). +`D_80191C70[param_1[0x34/4]] = 0` with a body-local `extern s8 D_80191C70[]` also scores 0 (`scratch/a1.c`), but the TU's +other functions declare the scalar `extern s8 D_80191C70;`, so body.c keeps that. + +## (d) GENERATOR PROPOSAL +When the residual is FRAME-ONLY (identical instruction mnemonics/operands except the `addiu sp` / `sw|lw ra` offsets, mine +larger by 8), look in `.lreg` for a pseudo with refs > 0 that appears in NO insn ("ST_REGS or none") — a local set more than +once whose every set combine folded into an address — and rewrite its `x = A; x += B;` (or `x = A; … x = x op B;`) chain +into a single initialisation `x = A + B;` or inline it into its one use; mechanically: "merge consecutive sets of the same +local into one expression when the later set reads the local". + +## (e) What did not work (byte evidence) +- The mechanical sweep (R2–R34, 190+ compiles, history.txt): swaps, widths, inlining `r`/`new_var`, blocks, do-while, param + copy — best 2, never 0, because every candidate kept `p = &D; p += …` (two sets of p). Re-scored here: the regen's + `free_000.c` (`new_var` inlined, `p += r`) is still 4 with the identical frame diff. (The sweep's "2" came from a + statement swap, not examined further — it cannot fix the frame while p is set twice.) +- `s8 *p; p = &D; p += x; *p = 0;` (`scratch/b3.c`): still 4 — the pointer type does not matter, the SET COUNT does. + +## (f) Where the method fell short +- The residual class printed as `OTHER` and the brief's pointers (allocation table, register levers) aim at register or + order residuals; a frame-size-only diff is a different class — stale `reg_n_refs` → reload stack slot — and it is not + in `residual_moves.md` as far as this pack shows. The .lreg line "used N times … ST_REGS or none" for a pseudo absent from + every insn is the tell; worth a row in residual_moves.md and a check in `--explain`. +- The first `--try` of the most natural reading of the function closed it: with a 12-instruction body, trying the plain + idiomatic spelling BEFORE the generators would have saved the whole sweep. + +## (g) The structs question +No. The lever holds a stale reference count in combine's bookkeeping (`combine.c:2305-2337`) for a local set twice; a struct +type changes which insns reference memory, not how many times `p` is set. `param_1` is an entity whose 0x34 field is the +slot index into the `D_80191C70` byte table (func_8017D99C/func_8017DAE4 write `*(s32 *)(obj + 0x34) = slot`), so a struct +with `s32 slot` at 0x34 would read better; it is not needed for the bytes (this body closes with the cast form). + +## Copies table (each `--try` at 0) +| function | TU | file | +|---|---|---| +| func_8017E060 | src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c | PACK/body.c | +| func_801846EC | src/ov_SC03_007/ov_SC03_007_jr_80183894.c | PACK/scratch/copy_ov_SC03_007_func_801846EC.c | +| func_8017DE40 | src/ov_SC04_008/ov_SC04_008_jr_8017AE2C.c | PACK/scratch/copy_ov_SC04_008_func_8017DE40.c (file-scope prototype there is `func_801292C8(void)`, so the call is cast `((void (*)(u8 *))func_801292C8)((u8 *)param_1)`; `..._noarg.c` with a plain `func_801292C8();` also scores 0) | diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index ec732438af..18da53441f 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -1,7 +1,7 @@ { - "head": "6d923ea83", + "head": "0ab2802e2", "stamp": "15956e4a96c4", - "generated": "2026-09-10 23:00", + "generated": "2026-09-10 23:02", "aliases": [ "main", "ov_SC03_014", @@ -21,206 +21,206 @@ "main": { "objects": 85, "identical": 85, - "seconds": 11.269000000000002, - "mean_s": 0.133 + "seconds": 10.208000000000006, + "mean_s": 0.12 }, "ov_SC03_014": { "objects": 32, "identical": 32, - "seconds": 6.7330000000000005, - "mean_s": 0.21 + "seconds": 6.918, + "mean_s": 0.216 }, "ov_SC03_015": { "objects": 32, "identical": 32, - "seconds": 6.734, - "mean_s": 0.21 + "seconds": 6.473000000000002, + "mean_s": 0.202 }, "ov_SC04_011": { "objects": 28, "identical": 28, - "seconds": 6.180000000000001, - "mean_s": 0.221 + "seconds": 6.083000000000001, + "mean_s": 0.217 } }, "per_object_seconds": { - "build/src/800.o": 0.944, - "build/src/800_b.o": 0.107, - "build/src/800_b_2.o": 0.401, - "build/src/800_b_o0a.o": 0.142, - "build/src/800_c.o": 0.312, - "build/src/800b2.o": 0.157, - "build/src/apicard1.o": 0.12, - "build/src/apicard2.o": 0.143, - "build/src/apicard3.o": 0.128, - "build/src/apicard4.o": 0.091, - "build/src/apicard5.o": 0.115, - "build/src/apicard6.o": 0.161, - "build/src/apicard7.o": 0.079, - "build/src/boot.o": 0.233, - "build/src/gap.o": 0.091, - "build/src/libapi1.o": 0.09, - "build/src/libapi2.o": 0.107, - "build/src/libc2_1.o": 0.105, - "build/src/libc2_2.o": 0.113, - "build/src/libcd1.o": 0.14, - "build/src/libcd2.o": 0.087, - "build/src/libetc.o": 0.112, - "build/src/libgpu.o": 0.083, - "build/src/libgpu2.o": 0.113, - "build/src/libgs1.o": 0.075, - "build/src/libgs2.o": 0.105, - "build/src/libgs3.o": 0.077, - "build/src/libgs4.o": 0.134, - "build/src/libgs5.o": 0.094, - "build/src/libgs6.o": 0.126, - "build/src/libgs7.o": 0.105, - "build/src/libgs8.o": 0.126, - "build/src/libgte1.o": 0.106, - "build/src/libgte10.o": 0.123, - "build/src/libgte11.o": 0.093, - "build/src/libgte12.o": 0.127, - "build/src/libgte13.o": 0.086, - "build/src/libgte14.o": 0.078, - "build/src/libgte15.o": 0.102, - "build/src/libgte16.o": 0.114, - "build/src/libgte17.o": 0.094, - "build/src/libgte18.o": 0.098, - "build/src/libgte19.o": 0.127, - "build/src/libgte2.o": 0.115, - "build/src/libgte20.o": 0.08, - "build/src/libgte21.o": 0.087, - "build/src/libgte22.o": 0.101, - "build/src/libgte23.o": 0.121, - "build/src/libgte24.o": 0.163, - "build/src/libgte25.o": 0.079, - "build/src/libgte26.o": 0.112, - "build/src/libgte27.o": 0.09, - "build/src/libgte28.o": 0.159, - "build/src/libgte29.o": 0.146, - "build/src/libgte3.o": 0.148, - "build/src/libgte30.o": 0.138, - "build/src/libgte4.o": 0.117, - "build/src/libgte5.o": 0.153, - "build/src/libgte6.o": 0.09, - "build/src/libgte7.o": 0.1, - "build/src/libgte8.o": 0.095, - "build/src/libgte9.o": 0.11, - "build/src/libmcrd1.o": 0.092, - "build/src/libmcrd2.o": 0.156, - "build/src/libpad1.o": 0.11, - "build/src/libpad2.o": 0.149, - "build/src/sgap.o": 0.165, - "build/src/sgap_2.o": 0.177, + "build/src/800.o": 1.11, + "build/src/800_b.o": 0.112, + "build/src/800_b_2.o": 0.488, + "build/src/800_b_o0a.o": 0.112, + "build/src/800_c.o": 0.285, + "build/src/800b2.o": 0.1, + "build/src/apicard1.o": 0.132, + "build/src/apicard2.o": 0.095, + "build/src/apicard3.o": 0.084, + "build/src/apicard4.o": 0.083, + "build/src/apicard5.o": 0.114, + "build/src/apicard6.o": 0.112, + "build/src/apicard7.o": 0.136, + "build/src/boot.o": 0.138, + "build/src/gap.o": 0.163, + "build/src/libapi1.o": 0.082, + "build/src/libapi2.o": 0.1, + "build/src/libc2_1.o": 0.088, + "build/src/libc2_2.o": 0.074, + "build/src/libcd1.o": 0.096, + "build/src/libcd2.o": 0.074, + "build/src/libetc.o": 0.106, + "build/src/libgpu.o": 0.11, + "build/src/libgpu2.o": 0.123, + "build/src/libgs1.o": 0.082, + "build/src/libgs2.o": 0.091, + "build/src/libgs3.o": 0.162, + "build/src/libgs4.o": 0.109, + "build/src/libgs5.o": 0.108, + "build/src/libgs6.o": 0.104, + "build/src/libgs7.o": 0.096, + "build/src/libgs8.o": 0.089, + "build/src/libgte1.o": 0.121, + "build/src/libgte10.o": 0.094, + "build/src/libgte11.o": 0.13, + "build/src/libgte12.o": 0.085, + "build/src/libgte13.o": 0.113, + "build/src/libgte14.o": 0.081, + "build/src/libgte15.o": 0.129, + "build/src/libgte16.o": 0.096, + "build/src/libgte17.o": 0.137, + "build/src/libgte18.o": 0.131, + "build/src/libgte19.o": 0.095, + "build/src/libgte2.o": 0.093, + "build/src/libgte20.o": 0.086, + "build/src/libgte21.o": 0.095, + "build/src/libgte22.o": 0.117, + "build/src/libgte23.o": 0.08, + "build/src/libgte24.o": 0.071, + "build/src/libgte25.o": 0.089, + "build/src/libgte26.o": 0.073, + "build/src/libgte27.o": 0.068, + "build/src/libgte28.o": 0.08, + "build/src/libgte29.o": 0.083, + "build/src/libgte3.o": 0.105, + "build/src/libgte30.o": 0.133, + "build/src/libgte4.o": 0.079, + "build/src/libgte5.o": 0.085, + "build/src/libgte6.o": 0.109, + "build/src/libgte7.o": 0.083, + "build/src/libgte8.o": 0.142, + "build/src/libgte9.o": 0.102, + "build/src/libmcrd1.o": 0.125, + "build/src/libmcrd2.o": 0.078, + "build/src/libpad1.o": 0.081, + "build/src/libpad2.o": 0.087, + "build/src/sgap.o": 0.118, + "build/src/sgap_2.o": 0.117, "build/src/sgap_3.o": 0.12, - "build/src/sgap_4.o": 0.146, - "build/src/sgap_5.o": 0.184, - "build/src/sgap_6.o": 0.169, - "build/src/sgap_8.o": 0.093, - "build/src/snd1.o": 0.112, - "build/src/snd10.o": 0.128, - "build/src/snd11.o": 0.106, - "build/src/snd12.o": 0.091, - "build/src/snd2.o": 0.121, - "build/src/snd3.o": 0.086, - "build/src/snd4.o": 0.09, - "build/src/snd5.o": 0.125, - "build/src/snd6.o": 0.156, - "build/src/snd7.o": 0.097, - "build/src/snd8.o": 0.087, - "build/src/snd9.o": 0.141, - "build/src/ov_SC03_014/ov_SC03_014.o": 0.194, - "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.697, - "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.541, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.096, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.109, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.167, - "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.196, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.171, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.116, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.086, - "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.263, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.125, - "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.234, - "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.163, - "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.119, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.096, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.154, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.681, - "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.404, - "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.151, - "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.093, - "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.139, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.099, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.269, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.296, - "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.076, - "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.334, - "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.107, - "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.099, - "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.081, - "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.089, - "build/src/ov_SC03_015/ov_SC03_015.o": 0.19, - "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.651, - "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.528, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.126, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.096, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.159, - "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.204, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.152, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.136, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.107, - "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.271, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.157, - "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.245, - "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.131, - "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.108, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.144, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.159, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.625, - "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.392, - "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.136, - "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.305, - "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.082, - "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.208, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.103, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.211, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.26, - "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.085, - "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.369, - "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.107, - "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.082, - "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.082, - "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.123, - "build/src/ov_SC04_011/ov_SC04_011.o": 0.17, - "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.606, - "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.482, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.106, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.127, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.204, - "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.223, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.163, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.098, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.091, - "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.239, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.105, - "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.242, - "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.126, - "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.14, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.089, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.156, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.636, - "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.338, - "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.125, - "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.252, - "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.091, - "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.154, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.115, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.179, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.744, - "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.082, - "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.097 + "build/src/sgap_4.o": 0.084, + "build/src/sgap_5.o": 0.117, + "build/src/sgap_6.o": 0.12, + "build/src/sgap_8.o": 0.092, + "build/src/snd1.o": 0.134, + "build/src/snd10.o": 0.091, + "build/src/snd11.o": 0.098, + "build/src/snd12.o": 0.108, + "build/src/snd2.o": 0.077, + "build/src/snd3.o": 0.078, + "build/src/snd4.o": 0.08, + "build/src/snd5.o": 0.077, + "build/src/snd6.o": 0.099, + "build/src/snd7.o": 0.106, + "build/src/snd8.o": 0.095, + "build/src/snd9.o": 0.083, + "build/src/ov_SC03_014/ov_SC03_014.o": 0.171, + "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.722, + "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.539, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.07, + "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.182, + "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.208, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.144, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.18, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.128, + "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.3, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.133, + "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.229, + "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.126, + "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.11, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.103, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.153, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.721, + "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.4, + "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.164, + "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.264, + "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.15, + "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.15, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.103, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.196, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.248, + "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.074, + "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.483, + "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.074, + "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.104, + "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.101, + "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.101, + "build/src/ov_SC03_015/ov_SC03_015.o": 0.216, + "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.642, + "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.529, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.081, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.065, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.147, + "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.221, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.144, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.097, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.112, + "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.246, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.155, + "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.205, + "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.11, + "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.087, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.108, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.134, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.634, + "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.413, + "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.128, + "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.254, + "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.094, + "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.163, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.092, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.235, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.286, + "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.08, + "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.368, + "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.099, + "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.089, + "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.126, + "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.113, + "build/src/ov_SC04_011/ov_SC04_011.o": 0.235, + "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.651, + "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.54, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.074, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.073, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.159, + "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.17, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.145, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.09, + "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.232, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.113, + "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.109, + "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.084, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.081, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.139, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.561, + "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.344, + "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.126, + "build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.249, + "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.083, + "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.162, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.103, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.155, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.771, + "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.084, + "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.094 }, "ok": true, "seconds": 3.8 diff --git a/.run/P36/delever/ledger.jsonl b/.run/P36/delever/ledger.jsonl index fc7bbb3d38..3b6ad2f509 100644 --- a/.run/P36/delever/ledger.jsonl +++ b/.run/P36/delever/ledger.jsonl @@ -29241,3 +29241,6 @@ {"ts": "2026-09-10 23:00:17", "label": "s104_d23", "rung": "E", "calib": {"head": "2b83a9aa3", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC05_004/ov_SC05_004_jr_8017F210.c", "fn": "func_801800F8", "addr": 2149056760, "aliases": null, "header": false, "includers": 0, "nhash_before": "fdc9d270a8d0015431aaf8a3b82f784d2258cc17", "nhash_after": "36a51e9c953a497309ffa9bdf312cadf80bb3715", "source": ".run/P36/agents/ov_SC03_113__func_80181864/scratch/copy_func_801800F8.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.14, "objects": ["build/src/ov_SC05_004/ov_SC05_004_jr_8017F210.o"], "before_text": "void func_801800F8(s32 arg0) {\n /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every\n LATER function in this TU, which blocks a byte-true decl of a different type.\n Declaration-only move (cookbook \u00a7103); the whole-binary byte-gate is the arbiter. */\n extern u8 D_8019AEA4[];\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_8019AEC0;\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_8019AEC0);\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_8019AEA4);\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_801800F8(s32 e) {\n /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every\n LATER function in this TU, which blocks a byte-true decl of a different type.\n Declaration-only move (cookbook \u00a7103); the whole-binary byte-gate is the arbiter. */\n extern u8 D_8019AEA4[];\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_8019AEC0;\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_8019AEC0);\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_8019AEA4);\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 23:00:47", "label": "s104_d23", "rung": "E", "calib": {"head": "2b83a9aa3", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_111/ov_SC03_111_jr_8017EC58.c", "fn": "func_80182BCC", "addr": 2149067724, "aliases": null, "header": false, "includers": 0, "nhash_before": "fdc9d270a8d0015431aaf8a3b82f784d2258cc17", "nhash_after": "36a51e9c953a497309ffa9bdf312cadf80bb3715", "source": "propagate:src/ov_SC05_004/ov_SC05_004_jr_8017F210.c:func_801800F8", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.185, "objects": ["build/src/ov_SC03_111/ov_SC03_111_jr_8017EC58.o"], "before_text": "void func_80182BCC(s32 arg0) {\n /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every\n LATER function in this TU, which blocks a byte-true decl of a different type.\n Declaration-only move (cookbook \u00a7103); the whole-binary byte-gate is the arbiter. */\n extern u8 D_801B1C64[];\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_801B1C80;\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 tus8)\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_801B1C80);\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 tus8)\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 tus8)\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_801B1C64);\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_80182BCC(s32 e) {\n /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every\n LATER function in this TU, which blocks a byte-true decl of a different type.\n Declaration-only move (cookbook \u00a7103); the whole-binary byte-gate is the arbiter. */\n extern u8 D_801B1C64[];\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_801B1C80;\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_801B1C80);\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_801B1C64);\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 23:01:27", "label": "s104_d23", "rung": "E", "calib": {"head": "6d923ea83", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_107/ov_SC03_107_jr_801789AC.c", "fn": "func_8017FE24", "addr": 2149056036, "aliases": null, "header": false, "includers": 0, "nhash_before": "c4043704d394c919b6246c7a9f8fa4138b7d86bc", "nhash_after": "edcb91ce3c21a234deb395e712b484adbedf88b8", "source": ".run/P36/agents/ov_SC03_113__func_80181864/scratch/copy_func_8017FE24.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.408, "objects": ["build/src/ov_SC03_107/ov_SC03_107_jr_801789AC.o"], "before_text": "void func_8017FE24(s32 arg0) {\n\n extern u8 D_80197498[];\n extern void func_8012C218(void *a0);\n extern void func_8012CC64(s32, s32);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32, u16, u16);\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_801974B4;\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 = ((s32 (*)(s32, void *))func_8012CC64)(e, &D_801974B4);\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 ((void (*)(s32, s32, s32))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_80197498);\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_8017FE24(s32 e) {\n\n extern u8 D_80197498[];\n extern void func_8012C218(void *a0);\n extern void func_8012CC64(s32, s32);\n extern s32 func_80133784(s32 a0, void *a1, s32 a2);\n extern void func_8012E688(s32, u16, u16);\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_801974B4;\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 = ((s32 (*)(s32, void *))func_8012CC64)(e, &D_801974B4);\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 ((void (*)(s32, s32, s32))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_80197498);\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 23:02:33", "label": "s104_d25", "rung": "E", "calib": {"head": "0ab2802e2", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c", "fn": "func_8017E060", "addr": 2149048416, "aliases": null, "header": false, "includers": 0, "nhash_before": "9df1c70c3322e4aae0f6ca83f74adc7ed9c68354", "nhash_after": "eb5ea44cd329f29519501894f1db6aaed5035fce", "source": ".run/P36/agents/ov_SC04_012__func_8017E060/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.143, "objects": ["build/src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.o"], "before_text": "void func_8017E060(s32 *param_1)\n{\n\n extern s8 D_80191C70;\n int new_var;\nregister s32 p __asm__(\"$4\"); // !FAKE: pin $4 \u2014 NEEDED DIFFERS (P36 rung B tus7)\ns32 r;\n p = (s32) (&D_80191C70);\n r = param_1[0x34 / 4];\n new_var = r;\n p += new_var;\n *((s8 *) p) = 0;\n ((void (*)(void)) func_801292C8)();\n}\n", "after_text": "void func_8017E060(s32 *param_1)\n{\n extern s8 D_80191C70;\n\n *(&D_80191C70 + param_1[0x34 / 4]) = 0;\n func_801292C8((u8 *)param_1);\n}\n"} +{"ts": "2026-09-10 23:03:01", "label": "s104_d25", "rung": "E", "calib": {"head": "0ab2802e2", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC04_008/ov_SC04_008_jr_8017AE2C.c", "fn": "func_8017DE40", "addr": 2149047872, "aliases": null, "header": false, "includers": 0, "nhash_before": "9df1c70c3322e4aae0f6ca83f74adc7ed9c68354", "nhash_after": "eb5ea44cd329f29519501894f1db6aaed5035fce", "source": "propagate:src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c:func_8017E060", "verdict": "BODY-COMPILE-ERROR", "sites": [], "compiles": 1, "seconds": 0.174, "objects": ["build/src/ov_SC04_008/ov_SC04_008_jr_8017AE2C.o"], "before_text": "void func_8017DE40(s32 *param_1)\n{\n\n extern s8 D_80191EF0;\n int new_var;\nregister s32 p __asm__(\"$4\"); // !FAKE: pin $4 \u2014 NEEDED DIFFERS (P36 rung B tus7)\ns32 r;\n p = (s32) (&D_80191EF0);\n r = param_1[0x34 / 4];\n new_var = r;\n p += new_var;\n *((s8 *) p) = 0;\n ((void (*)(void)) func_801292C8)();\n}\n", "after_text": "void func_8017DE40(s32 *param_1)\n{\n extern s8 D_80191EF0;\n\n *(&D_80191EF0 + param_1[0x34 / 4]) = 0;\n func_801292C8((u8 *)param_1);\n}\n"} +{"ts": "2026-09-10 23:03:02", "label": "s104_d25", "rung": "E", "calib": {"head": "0ab2802e2", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_007/ov_SC03_007_jr_80183894.c", "fn": "func_801846EC", "addr": 2149074668, "aliases": null, "header": false, "includers": 0, "nhash_before": "9df1c70c3322e4aae0f6ca83f74adc7ed9c68354", "nhash_after": "eb5ea44cd329f29519501894f1db6aaed5035fce", "source": "propagate:src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c:func_8017E060", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.197, "objects": ["build/src/ov_SC03_007/ov_SC03_007_jr_80183894.o"], "before_text": "void func_801846EC(s32 *param_1)\n{\n\n extern s8 D_801E9CE0;\n int new_var;\nregister s32 p __asm__(\"$4\"); // !FAKE: pin $4 \u2014 NEEDED DIFFERS (P36 rung B tus9)\ns32 r;\n p = (s32) (&D_801E9CE0);\n r = param_1[0x34 / 4];\n new_var = r;\n p += new_var;\n *((s8 *) p) = 0;\n ((void (*)(void)) func_801292C8)();\n}\n", "after_text": "void func_801846EC(s32 *param_1)\n{\n extern s8 D_801E9CE0;\n\n *(&D_801E9CE0 + param_1[0x34 / 4]) = 0;\n func_801292C8((u8 *)param_1);\n}\n"} diff --git a/src/ov_SC03_007/ov_SC03_007_jr_80183894.c b/src/ov_SC03_007/ov_SC03_007_jr_80183894.c index 07d8b4a4ad..66c48edb0c 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_80183894.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_80183894.c @@ -3756,17 +3756,10 @@ void func_80184560(s32 param_1) extern void func_801292C8(u8*); void func_801846EC(s32 *param_1) { - extern s8 D_801E9CE0; - int new_var; -register s32 p __asm__("$4"); // !FAKE: pin $4 — NEEDED DIFFERS (P36 rung B tus9) -s32 r; - p = (s32) (&D_801E9CE0); - r = param_1[0x34 / 4]; - new_var = r; - p += new_var; - *((s8 *) p) = 0; - ((void (*)(void)) func_801292C8)(); + + *(&D_801E9CE0 + param_1[0x34 / 4]) = 0; + func_801292C8((u8 *)param_1); } diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c b/src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c index db654009b0..3ff6c516e6 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c @@ -4151,17 +4151,10 @@ void func_8017DED4(s32 param_1) extern void func_801292C8(u8 *a0); void func_8017E060(s32 *param_1) { - extern s8 D_80191C70; - int new_var; -register s32 p __asm__("$4"); // !FAKE: pin $4 — NEEDED DIFFERS (P36 rung B tus7) -s32 r; - p = (s32) (&D_80191C70); - r = param_1[0x34 / 4]; - new_var = r; - p += new_var; - *((s8 *) p) = 0; - ((void (*)(void)) func_801292C8)(); + + *(&D_80191C70 + param_1[0x34 / 4]) = 0; + func_801292C8((u8 *)param_1); }