diff --git a/.run/P36/agents/ov_SC02_031__func_801818A4/mechanism.md b/.run/P36/agents/ov_SC02_031__func_801818A4/mechanism.md new file mode 100644 index 000000000..a59a9757a --- /dev/null +++ b/.run/P36/agents/ov_SC02_031__func_801818A4/mechanism.md @@ -0,0 +1,67 @@ +# func_801818A4 (ov_SC02_031) — P36 S104 d38 — score 0, zero levers (body_free 17 → 0 on the first --try) + +## (a) The residual +Score 17, COUNT (mine 38, target 37). The target copies `a1` into `$s0` in the prologue and reads every field through +`$s0`. body_free keeps the pointer in `$v0` for the first block's reads (`move v0,a1`), then copies it late +(`move s0,v0` just before the first `jal`), and uses `$s0` only in the else arm. That is one extra `move`. Because +`$v0` holds the pointer, the loaded halfwords move to `$v1` (the v1->v0 ×7 pairs), and the `move a2,s1` lands in a +different place. + +## (b) The pass and the decision (read in the dumps, scratch/dumps_free vs scratch/dumps_c1) +- The .rtl has two pointer pseudos: 73 = `a1` (the parameter copy, insn 6) and 74 = `s0 = 73` (insn 13). +- cse follows the jump. Its first path, `2 to 95`, takes the branch into the else arm, so the extended block covers + every use. make_regs_eqv (`cse.c:846-856`) makes a new reg the canonical one only if it outlives the block, so 73 + stays canonical and every read of 74 is rewritten to 73, the else arm's insn 68 included. +- cse_main then reprocesses from the start along the fall-through path, `2 to 64` (`cse.c:8352-8355`, + `val.path_size > 0`). Now 74 outlives the block (its recorded last use, insn 68, lies past uid 64), so 74 becomes + canonical. The first block's reads are rewritten to 74, and the `(set REG0 REG1)` swap (`cse.c:7440-7474`) turns + insns 6/13 into `74 = a1; 73 = 74`. Insn 68 keeps reading 73: its block (`66 to 95`) starts at a label with no + equivalences. +- Result (.cse): one pseudo lives only in block 0 with 5 uses, and one copy crosses the call with 2 uses. cse2 swaps + the numbers back (.cse2 insn 6 `73 = a1`) but the structure stays. .lreg: "Register 73 used 5 times across 14 insns + in block 0" gets `Register 73 in 2` from local-alloc (`$v0`). "Register 74 … crosses 1 call" gets 16 from global + (`$s0`). That produces the late `move s0,v0`. +- With no local (c1): one pseudo, .lreg "Register 73 used 5 times across 18 insns; crosses 1 call", `73 in 16`. It is + set from `$a1` in the prologue, which is the target's `move s0,a1`. +- Proven on bytes: `--try` = 0 (c1). The two-pass cse reading matches the .cse/.cse2/.lreg/.greg dumps. I did not + step through regno_last_uid's lifetime in a debugger: that it is not recomputed between the two paths is inferred + from insn 68 keeping 73. + +## (c) The move that closed it +Delete the local `s16 *s0 = (s16 *)a1;` and read through the parameter: `((s16 *)a1)[6]` etc. (PACK/body.c). +Readability alternative, also 0 on both copies: the two stack halves as `SVECTOR a, b;` (the TU's own typedef), with +fields `.vx/.vy/.vz` instead of `stack_buf[0..6]` (scratch/v2.c). + +## (d) GENERATOR PROPOSAL +When a local is only ever the cast copy of a parameter (`T *p = (T *)argN;`, never reassigned) and the function +branches, delete the local and substitute `((T *)argN)` at every use. d24's `T x = argN;` rule, extended to CAST +copies. The trigger in the objdump is `move vK,aN` early plus `move sJ,vK` just before a `jal`. + +## (e) What did not work +- A body-local struct pointer `struct {…} *r = a1;` with field reads → 17, byte-identical to body_free. The defect is + the local copy, not the access type. +- Constant returns (d27's move) with no local → 3: `return func_8012DEB8(...) != 0;` loses the shared `sltu` shape. + Not needed. +- The sweep's best (1, free_004.c) is semantically broken (`return (1)`), not a start. R27's port_002.c is a + different function (a name collision with ov_SC05_001's func_801818A4). + +## (f) Where the method fell short +Nothing in the method was missing: step 15 (d24) already names this move for an uncast parameter copy. But the sweep's +generator evidently matches only `T x = argN;` and not `T *x = (T *)argN;`, so the class sat at 17 (the R10 +"param-copy" family does the INVERSE, routing a parameter through a local). The same defect was being papered over +elsewhere by an unmarked `do { … } while (0)` barrier in four same-shape siblings (scratch/copies.md): those +do-whiles are levers that no census counts. + +## (g) Structs answer +Partly. Typing `a1` does NOT change the decision: a struct-pointer local scores 17, the same as body_free, because the +defect is cse's two-path canonicalisation of a copied pointer, not an aggregate-vs-scalar dependence. Typing the +STACK buffer as two `SVECTOR`s does not change the bytes (0 either way) but it is the honest shape: +`func_8012DEB8(a0, &a, &b)` takes two 3D points, like its sibling func_8012D714's `u16 a[3], b[3]`. For the structs +phase, `a1`/D_80188DD8 looks like a box `{ s16 ?, ?, x0, x1, ?, ?, z0, z1 }` (fields +4/+6 = x, +12/+14 = z) and +should be a typed parameter, not a cast. Declaring the PARAMETER as that struct pointer is a signature change: the +TU's extern is `(void *, void *)`. It is not needed for the bytes. + +## Copies — scratch/copies.md +func_80186B1C (ov_SC02_011, the class's second copy) → 0 with the same text. Four more same-shape siblings lose +their unmarked do-while barriers with the same move: func_801826E8 (ov_SC03_024), func_801865E4 (ov_SC02_011), +func_801848A4 (ov_SC06_000) and func_80188FB4 (ov_SC03_014). All `--try` 0. diff --git a/.run/P36/agents/ov_SC03_090__func_80185484/body.c b/.run/P36/agents/ov_SC03_090__func_80185484/body.c new file mode 100644 index 000000000..b35921744 --- /dev/null +++ b/.run/P36/agents/ov_SC03_090__func_80185484/body.c @@ -0,0 +1,34 @@ +s32 func_80185484_body(s32 a0) { + extern void func_8012BE54(s32 a0); + extern u16 D_80126B62; + extern u8 D_801A31B0[]; + + s32 h; + s32 h2; + s32 ret; + s32 s0; + s32 r; + s32 v; + s32 g; + s32 d; + u16 arr[3]; + + h = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x18); + ret = ((s32 (*)(s32))func_8012BE54)(a0); + s0 = (s16)h >> 8; + if (ret > s0 * s0) { + return 0; + } + v = *(s16 *)(a0 + 0xA); + h2 = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x1A); + g = *(s16 *)&D_80126B62; + r = (s16)h2 >> 6; + d = v - g; + if (d >= 0 ? r < d : r < g - v) { + return 0; + } + arr[0] = *(u16 *)(a0 + 0x6); + arr[1] = *(u16 *)(a0 + 0xA); + arr[2] = *(u16 *)(a0 + 0xE); + func_8012F568(1, 0x4201, 0, 0x1C, (s32)arr, (s32)D_801A31B0); +} diff --git a/.run/P36/agents/ov_SC03_090__func_80185484/mechanism.md b/.run/P36/agents/ov_SC03_090__func_80185484/mechanism.md new file mode 100644 index 000000000..1f28b6818 --- /dev/null +++ b/.run/P36/agents/ov_SC03_090__func_80185484/mechanism.md @@ -0,0 +1,93 @@ +# func_80185484 (src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c) — d39, P36 T7 S104 — CLOSED at 0, zero levers + +**Final: score 0 (54/54 ins, byte-identical), plain C.** Levers 2 → 0 (both `launder`s, sites.txt lines 6739/6747; +the `$17` pin was already REMOVED). Start: body_free.c = 8 (the sweep's best, R12 `u16 h`, = 7). + +The change against `body_free.c`: + + - s0 = h >> 8; + + s0 = (s16)h >> 8; + - r = h2 >> 6; + + r = (s16)h2 >> 6; + +That is S104 step 13's (d13) move, `(s16)t >> N` on the shift's operand, applied at both sites. Both casts are needed: +h's alone scores 5, h2's alone scores 4, both score 0 (`scratch/c2.c`, `c3.c`, `c1.c`). The delivered `body.c` also +drops three pieces of decompiler noise, and each drop was checked at 0: the dead `a0 = 1;` (`scratch/c4.c`), the +`ent = a0` copy (a0 is used directly), and the `p` temp (inlined). S104 (d24) says to delete a top-of-body +`T x = argN;` copy, and here doing so costs nothing. + +## Copies: the same text closes all four definitions of this class (each `--try` at 0) + +| function | TU | file | score | +|---|---|---|---| +| func_80185484 | src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c | body.c | 0 | +| func_801857A8 | src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c | scratch/copy_func_801857A8.c | 0 | +| func_80183318 | src/ov_SC03_104/ov_SC03_104_jr_80182038.c | scratch/copy_func_80183318.c | 0 | +| func_8018632C | src/ov_SC03_091/ov_SC03_091_jr_8018326C.c | scratch/copy_func_8018632C.c (C name `aF8018632C`, keeps its body-local `func_8012F568` 6-arg extern) | 0 | + +The copies were found with `grep -rn "0x4201, 0, 0x1C" src/`, which gives exactly four sites. Each copy differs only in +its `D_` table symbol and its C name. + +## (a) The residual +COUNT +2 (56 vs 54). Both s16 field loads come out as `lhu; sll 16; sra 16+N` where the target has `lh; sra N`: +`lhu s0,24(v0)` … `sll s0,16; sra s0,24` vs `lh s0,24(v0)` … `sra s0,8`, and `lhu v0,26(v0); sll v0,16; sra a0,v0,22` +vs `lh v0,26(v0); sra a0,v0,6`. The two branch-target hunks are the +2 displacement. No register or order defect. +The two laundered values are exactly the two shifted values. + +## (b) The pass and the decision (proved on the dumps, `scratch/dumps_free/free.i.cse`) +- Expand (`mips.md` `extendhisi2`, `force_not_mem` at -O2) emits each `(int)*(s16 *)` read as `movhi` + `ashift 16` + + `ashiftrt 16`. +- cse1 `fold_rtx`'s associative-shift block (`cse.c:5577-5667`, `lookup_as_function (…, ASHIFTRT)` at `:5594`) folds + `h >> 8` into `(ashiftrt (reg 84) (const_int 24))` and `h2 >> 6` into `(ashiftrt (reg 91) (const_int 22))`. Both are + visible in the free compile's `.cse` dump (lines 57-58 and 152-153 of the function's range). Each shift then reads + the `ashift` temp directly. +- combine can no longer merge the extension back into the load, so no `lh` is formed. In d13 the obstacle was the temp's + second reader (`combine.c:1458`). Here h itself is dead after the fold, so the `sra 16` dies too. What remains is + `lhu` + `(ashiftrt (ashift x 16) 24)`, which combine does not turn back into `lh` + `sra 8`. I did not trace which + exact combine attempt fails for this shape. The cse fold itself is proved. + +## (c) Why the cast closes it (bytes proven; same mechanism as d13, dumps not re-traced for the close) +`(s16)h >> 8`: with a constant right shift of an operand that narrows to short, `c-typeck.c:2418-2450` (short_shift) +does the shift in `short`. Expand then re-extends `(subreg:HI h)` through a second extension pair built on h's OWN +pseudo, not on the load's temp. cse folds into that new pair instead, so the load's extension stays intact and +combine forms `lh`. Because `num_sign_bit_copies(h) = 17 > 16`, combine's `simplify_shift_const` +(`combine.c:7930-7944`) collapses `(ashiftrt (ashift h 16) 16+N)` to `(ashiftrt h N)`. The value is unchanged, +because h is already a sign-extended s16. + +## (d) GENERATOR PROPOSAL +When the residual shows `lhu; sll 16; sra 16+N` where the target has `lh; …; sra N`, rewrite EVERY constant right +shift `v >> N` whose operand `v` was loaded from an `s16` and has that residual shape as `(s16)v >> N` (`(s8)` for +`lbu`/`sra 24+N`). Enumerate the subsets of those sites. This body needed both of its two sites. d13's needed one of +two, because the second site's cast broke allocation. The tell is mechanical: the mine-side shift count is target+16. +This is the "narrow the shifted operand at the use" family that d13 proposed. This class is its second independent +confirmation, now across 4 more bodies. + +## (e) What did NOT work (all `--try`) +| spelling | score | +|---|---| +| body_free.c (start) | 8 | +| sweep best, R12 `u16 h` | 7 (wrong signedness, `srl`) | +| `(s16)h >> 8` only | 5 | +| `(s16)h2 >> 6` only | 4 | +| `s16 h; s16 h2;` declarations, no cast (`scratch/c5.c`) | 8. The declaration width is inert, as d13 found | +| body-local struct `{ u8 pad[0x18]; s16 x, y; }`, field reads, no cast (`scratch/s1.c`) | 8 | + +## (f) Where the method fell short +Nowhere that mattered. Step 13's (d13) line described this residual exactly and closed it on the first `--try`. The +only gap is the one d13 already reported: no sweep family puts a cast on a use site. Had R-families had a "cast the +shifted operand" rule, this class (4 bodies) and d13's (5 bodies) would have closed in the free sweep. The cookbook's +§197-A advice ("do not chase it with casts") remains the stale entry to correct. + +## (g) Structs answer +Inert, and proven on bytes. Giving `*(ent + 0x20)` a struct type with `s16` fields at 0x18/0x1A (`scratch/s1.c`) +scores 8, the same as body_free. The deciding pass is cse's shift re-association on the extension pair +(`cse.c:5594`), which is keyed on the value's TYPE AT THE SHIFT. It is not a memory/aliasing decision +(`expr.c:4568-4577` does not enter into it). So this lever was a type-at-use problem, not a struct problem. A struct +type is still the right readability move for the struct phase (`ent->sub->x >> 8` would need the same `(s16)` cast, +or an equivalent). + +## Signature note (not changed) +The TU declares `extern void func_80185484(s32)` and defines the body as `s32` under an asm alias. The early exits +return 0 (`move v0,zero` in the delay slots). The final path falls off after `func_8012F568`, so `$v0` is whatever +that call returned. That is consistent with `return func_8012F568(…);` in the original, but nothing in this body reads +`v0` as a keepalive. I left it as the tree has it; it is a candidate for the STRUCTS/signature phase only. diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index 3ae0c75ff..9983a10f0 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -1,7 +1,7 @@ { - "head": "f5a68c412", + "head": "c3023eee4", "stamp": "15956e4a96c4", - "generated": "2026-09-11 00:01", + "generated": "2026-09-11 00:02", "aliases": [ "main", "ov_SC03_014", @@ -21,207 +21,207 @@ "main": { "objects": 85, "identical": 85, - "seconds": 10.600000000000007, - "mean_s": 0.125 + "seconds": 9.373, + "mean_s": 0.11 }, "ov_SC03_014": { "objects": 32, "identical": 32, - "seconds": 6.774999999999998, - "mean_s": 0.212 + "seconds": 5.372, + "mean_s": 0.168 }, "ov_SC03_015": { "objects": 32, "identical": 32, - "seconds": 6.652000000000001, - "mean_s": 0.208 + "seconds": 6.076, + "mean_s": 0.19 }, "ov_SC04_011": { "objects": 28, "identical": 28, - "seconds": 6.2490000000000006, - "mean_s": 0.223 + "seconds": 5.819999999999999, + "mean_s": 0.208 } }, "per_object_seconds": { - "build/src/800.o": 1.051, - "build/src/800_b.o": 0.125, - "build/src/800_b_2.o": 0.434, - "build/src/800_b_o0a.o": 0.124, - "build/src/800_c.o": 0.354, - "build/src/800b2.o": 0.177, - "build/src/apicard1.o": 0.107, - "build/src/apicard2.o": 0.133, - "build/src/apicard3.o": 0.124, - "build/src/apicard4.o": 0.125, - "build/src/apicard5.o": 0.093, - "build/src/apicard6.o": 0.091, - "build/src/apicard7.o": 0.092, - "build/src/boot.o": 0.17, - "build/src/gap.o": 0.126, - "build/src/libapi1.o": 0.107, - "build/src/libapi2.o": 0.099, - "build/src/libc2_1.o": 0.097, - "build/src/libc2_2.o": 0.08, - "build/src/libcd1.o": 0.143, - "build/src/libcd2.o": 0.093, - "build/src/libetc.o": 0.101, - "build/src/libgpu.o": 0.144, - "build/src/libgpu2.o": 0.111, - "build/src/libgs1.o": 0.153, - "build/src/libgs2.o": 0.125, - "build/src/libgs3.o": 0.113, - "build/src/libgs4.o": 0.108, - "build/src/libgs5.o": 0.085, - "build/src/libgs6.o": 0.128, - "build/src/libgs7.o": 0.086, - "build/src/libgs8.o": 0.081, - "build/src/libgte1.o": 0.094, - "build/src/libgte10.o": 0.078, - "build/src/libgte11.o": 0.078, - "build/src/libgte12.o": 0.102, - "build/src/libgte13.o": 0.112, - "build/src/libgte14.o": 0.127, - "build/src/libgte15.o": 0.142, - "build/src/libgte16.o": 0.084, - "build/src/libgte17.o": 0.084, - "build/src/libgte18.o": 0.091, - "build/src/libgte19.o": 0.146, - "build/src/libgte2.o": 0.082, - "build/src/libgte20.o": 0.081, - "build/src/libgte21.o": 0.08, - "build/src/libgte22.o": 0.094, - "build/src/libgte23.o": 0.088, - "build/src/libgte24.o": 0.085, - "build/src/libgte25.o": 0.077, - "build/src/libgte26.o": 0.073, - "build/src/libgte27.o": 0.106, - "build/src/libgte28.o": 0.089, - "build/src/libgte29.o": 0.13, - "build/src/libgte3.o": 0.093, + "build/src/800.o": 0.839, + "build/src/800_b.o": 0.149, + "build/src/800_b_2.o": 0.39, + "build/src/800_b_o0a.o": 0.109, + "build/src/800_c.o": 0.252, + "build/src/800b2.o": 0.14, + "build/src/apicard1.o": 0.155, + "build/src/apicard2.o": 0.126, + "build/src/apicard3.o": 0.078, + "build/src/apicard4.o": 0.136, + "build/src/apicard5.o": 0.099, + "build/src/apicard6.o": 0.126, + "build/src/apicard7.o": 0.128, + "build/src/boot.o": 0.108, + "build/src/gap.o": 0.105, + "build/src/libapi1.o": 0.111, + "build/src/libapi2.o": 0.077, + "build/src/libc2_1.o": 0.076, + "build/src/libc2_2.o": 0.078, + "build/src/libcd1.o": 0.08, + "build/src/libcd2.o": 0.101, + "build/src/libetc.o": 0.102, + "build/src/libgpu.o": 0.069, + "build/src/libgpu2.o": 0.076, + "build/src/libgs1.o": 0.08, + "build/src/libgs2.o": 0.077, + "build/src/libgs3.o": 0.077, + "build/src/libgs4.o": 0.096, + "build/src/libgs5.o": 0.08, + "build/src/libgs6.o": 0.1, + "build/src/libgs7.o": 0.093, + "build/src/libgs8.o": 0.065, + "build/src/libgte1.o": 0.069, + "build/src/libgte10.o": 0.064, + "build/src/libgte11.o": 0.065, + "build/src/libgte12.o": 0.062, + "build/src/libgte13.o": 0.081, + "build/src/libgte14.o": 0.08, + "build/src/libgte15.o": 0.135, + "build/src/libgte16.o": 0.116, + "build/src/libgte17.o": 0.098, + "build/src/libgte18.o": 0.119, + "build/src/libgte19.o": 0.142, + "build/src/libgte2.o": 0.105, + "build/src/libgte20.o": 0.161, + "build/src/libgte21.o": 0.083, + "build/src/libgte22.o": 0.118, + "build/src/libgte23.o": 0.141, + "build/src/libgte24.o": 0.094, + "build/src/libgte25.o": 0.087, + "build/src/libgte26.o": 0.084, + "build/src/libgte27.o": 0.077, + "build/src/libgte28.o": 0.094, + "build/src/libgte29.o": 0.106, + "build/src/libgte3.o": 0.079, "build/src/libgte30.o": 0.082, - "build/src/libgte4.o": 0.096, - "build/src/libgte5.o": 0.081, - "build/src/libgte6.o": 0.128, - "build/src/libgte7.o": 0.116, - "build/src/libgte8.o": 0.108, - "build/src/libgte9.o": 0.101, - "build/src/libmcrd1.o": 0.098, - "build/src/libmcrd2.o": 0.091, - "build/src/libpad1.o": 0.099, - "build/src/libpad2.o": 0.105, - "build/src/sgap.o": 0.079, - "build/src/sgap_2.o": 0.094, - "build/src/sgap_3.o": 0.091, - "build/src/sgap_4.o": 0.145, - "build/src/sgap_5.o": 0.129, - "build/src/sgap_6.o": 0.115, - "build/src/sgap_8.o": 0.143, - "build/src/snd1.o": 0.178, + "build/src/libgte4.o": 0.132, + "build/src/libgte5.o": 0.119, + "build/src/libgte6.o": 0.145, + "build/src/libgte7.o": 0.095, + "build/src/libgte8.o": 0.098, + "build/src/libgte9.o": 0.15, + "build/src/libmcrd1.o": 0.13, + "build/src/libmcrd2.o": 0.1, + "build/src/libpad1.o": 0.082, + "build/src/libpad2.o": 0.095, + "build/src/sgap.o": 0.094, + "build/src/sgap_2.o": 0.077, + "build/src/sgap_3.o": 0.068, + "build/src/sgap_4.o": 0.104, + "build/src/sgap_5.o": 0.075, + "build/src/sgap_6.o": 0.078, + "build/src/sgap_8.o": 0.106, + "build/src/snd1.o": 0.084, "build/src/snd10.o": 0.09, - "build/src/snd11.o": 0.097, - "build/src/snd12.o": 0.085, - "build/src/snd2.o": 0.119, - "build/src/snd3.o": 0.118, - "build/src/snd4.o": 0.112, - "build/src/snd5.o": 0.102, - "build/src/snd6.o": 0.143, - "build/src/snd7.o": 0.08, - "build/src/snd8.o": 0.085, - "build/src/snd9.o": 0.094, - "build/src/ov_SC03_014/ov_SC03_014.o": 0.225, - "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.778, - "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.087, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.144, - "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.186, - "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.218, - "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.134, - "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.112, - "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.214, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.114, - "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.233, - "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.106, - "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.093, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.091, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.146, - "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.615, - "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.382, - "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.13, - "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.33, - "build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.102, - "build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.137, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.087, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.257, - "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.258, - "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.374, - "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.079, - "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.089, - "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.106, - "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.162, - "build/src/ov_SC03_015/ov_SC03_015.o": 0.217, - "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.661, - "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.492, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.067, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.067, - "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.212, - "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.187, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.167, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.11, - "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.155, - "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.266, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.14, - "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.202, - "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.154, - "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.132, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.138, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.15, - "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.633, - "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.351, - "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.202, - "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.314, - "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.089, - "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.146, + "build/src/snd11.o": 0.079, + "build/src/snd12.o": 0.086, + "build/src/snd2.o": 0.081, + "build/src/snd3.o": 0.065, + "build/src/snd4.o": 0.082, + "build/src/snd5.o": 0.07, + "build/src/snd6.o": 0.069, + "build/src/snd7.o": 0.069, + "build/src/snd8.o": 0.063, + "build/src/snd9.o": 0.067, + "build/src/ov_SC03_014/ov_SC03_014.o": 0.119, + "build/src/ov_SC03_014/ov_SC03_014_after.o": 0.394, + "build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.322, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.058, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.058, + "build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.114, + "build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.125, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.09, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.062, + "build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.059, + "build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.136, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.054, + "build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.131, + "build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.135, + "build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.083, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.104, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.131, + "build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.595, + "build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.359, + "build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.141, + "build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.321, + "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.174, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.097, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.229, + "build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.265, + "build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.103, + "build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.36, + "build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.131, + "build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.128, + "build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.103, + "build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.098, + "build/src/ov_SC03_015/ov_SC03_015.o": 0.173, + "build/src/ov_SC03_015/ov_SC03_015_after.o": 0.605, + "build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.477, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.092, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.089, + "build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.18, + "build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.196, + "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.092, + "build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.072, + "build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.238, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.096, + "build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.23, + "build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.114, + "build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.093, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.093, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.12, + "build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.555, + "build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.335, + "build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.155, + "build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.223, + "build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.116, + "build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.127, "build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.106, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.238, - "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.288, - "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.071, - "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.355, - "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.069, - "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.081, - "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.079, - "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.113, - "build/src/ov_SC04_011/ov_SC04_011.o": 0.176, - "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.654, - "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.495, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.2, + "build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.239, + "build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.077, + "build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.333, + "build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.133, + "build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.12, + "build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.126, + "build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.119, + "build/src/ov_SC04_011/ov_SC04_011.o": 0.188, + "build/src/ov_SC04_011/ov_SC04_011_after.o": 0.664, + "build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.452, "build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.075, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.088, - "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.174, - "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.244, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.213, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.124, - "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.15, - "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.235, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.144, - "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.201, - "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.113, - "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.091, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.134, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.12, - "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.555, - "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.383, - "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.131, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.099, + "build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.146, + "build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.191, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.131, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.122, + "build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.098, + "build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.221, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.114, + "build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.194, + "build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.096, + "build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.133, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.085, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.124, + "build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.534, + "build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.341, + "build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.138, "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.13, - "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.11, - "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.755, - "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.109, - "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.121 + "build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.111, + "build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.134, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.133, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.177, + "build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.672, + "build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.079, + "build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.102 }, "ok": true, - "seconds": 3.8 + "seconds": 4.7 } diff --git a/.run/P36/delever/ledger.jsonl b/.run/P36/delever/ledger.jsonl index 2f13e2869..50e19b945 100644 --- a/.run/P36/delever/ledger.jsonl +++ b/.run/P36/delever/ledger.jsonl @@ -29307,3 +29307,5 @@ {"ts": "2026-09-11 00:01:32", "label": "s104_d35", "rung": "E", "calib": {"head": "1f4de6b82", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c", "fn": "func_801839C4", "addr": 2149071300, "aliases": null, "header": false, "includers": 0, "nhash_before": "1951cabcc095b67046bae435614eff58a3cbe464", "nhash_after": "72602ef932efc2eab4b204f950a1e0afad9fb3f0", "source": "propagate:src/ov_SC03_091/ov_SC03_091_jr_8018326C.c:func_8018486C", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.502, "objects": ["build/src/ov_SC03_090/ov_SC03_090_jr_8017CA80.o"], "before_text": "void func_801839C4(s32 a0) {\n\n extern u8 D_801202A0[];\n s32 i;\n s32 v1;\n s32 val1;\n s32 val2;\n u8 *cur;\n u8 *best1;\n register u8 *best2 __asm__(\"$22\"); // !FAKE: pin $22 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 flag __asm__(\"$19\"); // !FAKE: pin $19 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 t;\n register s32 cmp __asm__(\"$23\"); // !FAKE: pin $23 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 pad[2];\n\n best1 = 0;\n best2 = 0;\n flag = 0;\n t = *(s32 *)(a0 + 0xCC);\n if (t == 0) {\n goto L_D54;\n }\n func_80183C3C(t + 4, 0);\n goto L_D5C;\n\nL_D3C:\n val1 = func_8012BD14((s32)cur);\n best1 = cur;\n flag = 1;\n goto L_D8C;\n\nL_D54:\n func_8013B7AC(0);\n\nL_D5C:\n cur = D_801202A0;\n i = 0;\n cmp = 1;\n\nL_D6C:\n if (func_80183B98((s32)cur) == cmp) {\n goto L_D3C;\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_D6C;\n }\n\nL_D8C:\n if (flag) {\n goto L_DBC;\n }\n func_8013B7AC(1);\n goto L_DFC;\n\nL_DA4:\n val2 = func_8012BD14((s32)cur);\n best2 = cur;\n flag = 1;\n goto L_DE8;\n\nL_DBC:\n flag = 0;\n if (i >= 0x60) {\n goto L_DE8;\n }\n cmp = 1;\n\nL_DC8:\n if (func_80183B98((s32)cur) == cmp) {\n goto L_DA4;\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_DC8;\n }\n\nL_DE8:\n if (flag) {\n goto L_E0C;\n }\n func_80183BF0((s32)best1, 1);\n\nL_DFC:\n func_8013B7AC(2);\n return;\n\nL_E0C:\n if (i >= 0x60) {\n goto L_E78;\n }\n flag = 1;\n\nL_E18:\n if (func_80183B98((s32)cur) == flag) {\n v1 = func_8012BD14((s32)cur);\n if (v1 < val1) {\n best2 = best1;\n best1 = cur;\n val2 = val1;\n val1 = v1;\n } else if (v1 < val2) {\n best2 = cur;\n val2 = v1;\n }\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_E18;\n }\n\nL_E78:\n func_80183BF0((s32)best1, 1);\n func_80183BF0((s32)best2, 2);\n}\n", "after_text": "void func_801839C4(s32 a0) {\n\n extern u8 D_801202A0[];\n s32 i;\n s32 v1;\n s32 val1;\n s32 val2;\n u8 *cur;\n u8 *best1;\n u8 *best2;\n s32 flag;\n s32 t;\n s32 pad[2];\n\n best1 = 0;\n best2 = 0;\n flag = 0;\n t = *(s32 *)(a0 + 0xCC);\n if (t != 0) {\n func_80183C3C(t + 4, 0);\n } else {\n func_8013B7AC(0);\n }\n\n cur = D_801202A0;\n for (i = 0; i < 0x60; i++, cur += 0x10C) {\n if (func_80183B98((s32)cur) == 1) {\n val1 = func_8012BD14((s32)cur);\n best1 = cur;\n flag = 1;\n break;\n }\n }\n if (!flag) {\n func_8013B7AC(1);\n func_8013B7AC(2);\n return;\n }\n\n flag = 0;\n for (; i < 0x60; i++, cur += 0x10C) {\n if (func_80183B98((s32)cur) == 1) {\n val2 = func_8012BD14((s32)cur);\n best2 = cur;\n flag = 1;\n break;\n }\n }\n if (!flag) {\n func_80183BF0((s32)best1, 1);\n func_8013B7AC(2);\n return;\n }\n\n for (; i < 0x60; i++, cur += 0x10C) {\n if (func_80183B98((s32)cur) == 1) {\n v1 = func_8012BD14((s32)cur);\n if (v1 < val1) {\n best2 = best1;\n best1 = cur;\n val2 = val1;\n val1 = v1;\n } else if (v1 < val2) {\n best2 = cur;\n val2 = v1;\n }\n }\n }\n func_80183BF0((s32)best1, 1);\n func_80183BF0((s32)best2, 2);\n}\n"} {"ts": "2026-09-11 00:01:32", "label": "s104_d35", "rung": "E", "calib": {"head": "1f4de6b82", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c", "fn": "func_80181858", "addr": 2149062744, "aliases": null, "header": false, "includers": 0, "nhash_before": "1951cabcc095b67046bae435614eff58a3cbe464", "nhash_after": "72602ef932efc2eab4b204f950a1e0afad9fb3f0", "source": "propagate:src/ov_SC03_091/ov_SC03_091_jr_8018326C.c:func_8018486C", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.231, "objects": ["build/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.o"], "before_text": "void func_80181858(s32 a0) {\n\n extern u8 D_801202A0[];\n s32 i;\n s32 v1;\n s32 val1;\n s32 val2;\n u8 *cur;\n u8 *best1;\n register u8 *best2 __asm__(\"$22\"); // !FAKE: pin $22 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 flag __asm__(\"$19\"); // !FAKE: pin $19 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 t;\n register s32 cmp __asm__(\"$23\"); // !FAKE: pin $23 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 pad[2];\n\n best1 = 0;\n best2 = 0;\n flag = 0;\n t = *(s32 *)(a0 + 0xCC);\n if (t == 0) {\n goto L_D54;\n }\n func_80181AD0(t + 4, 0);\n goto L_D5C;\n\nL_D3C:\n val1 = func_8012BD14((s32)cur);\n best1 = cur;\n flag = 1;\n goto L_D8C;\n\nL_D54:\n func_8013B7AC(0);\n\nL_D5C:\n cur = D_801202A0;\n i = 0;\n cmp = 1;\n\nL_D6C:\n if (func_80181A2C((s32)cur) == cmp) {\n goto L_D3C;\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_D6C;\n }\n\nL_D8C:\n if (flag) {\n goto L_DBC;\n }\n func_8013B7AC(1);\n goto L_DFC;\n\nL_DA4:\n val2 = func_8012BD14((s32)cur);\n best2 = cur;\n flag = 1;\n goto L_DE8;\n\nL_DBC:\n flag = 0;\n if (i >= 0x60) {\n goto L_DE8;\n }\n cmp = 1;\n\nL_DC8:\n if (func_80181A2C((s32)cur) == cmp) {\n goto L_DA4;\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_DC8;\n }\n\nL_DE8:\n if (flag) {\n goto L_E0C;\n }\n func_80181A84((s32)best1, 1);\n\nL_DFC:\n func_8013B7AC(2);\n return;\n\nL_E0C:\n if (i >= 0x60) {\n goto L_E78;\n }\n flag = 1;\n\nL_E18:\n if (func_80181A2C((s32)cur) == flag) {\n v1 = func_8012BD14((s32)cur);\n if (v1 < val1) {\n best2 = best1;\n best1 = cur;\n val2 = val1;\n val1 = v1;\n } else if (v1 < val2) {\n best2 = cur;\n val2 = v1;\n }\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_E18;\n }\n\nL_E78:\n func_80181A84((s32)best1, 1);\n func_80181A84((s32)best2, 2);\n}\n", "after_text": "void func_80181858(s32 a0) {\n\n extern u8 D_801202A0[];\n s32 i;\n s32 v1;\n s32 val1;\n s32 val2;\n u8 *cur;\n u8 *best1;\n u8 *best2;\n s32 flag;\n s32 t;\n s32 pad[2];\n\n best1 = 0;\n best2 = 0;\n flag = 0;\n t = *(s32 *)(a0 + 0xCC);\n if (t != 0) {\n func_80181AD0(t + 4, 0);\n } else {\n func_8013B7AC(0);\n }\n\n cur = D_801202A0;\n for (i = 0; i < 0x60; i++, cur += 0x10C) {\n if (func_80181A2C((s32)cur) == 1) {\n val1 = func_8012BD14((s32)cur);\n best1 = cur;\n flag = 1;\n break;\n }\n }\n if (!flag) {\n func_8013B7AC(1);\n func_8013B7AC(2);\n return;\n }\n\n flag = 0;\n for (; i < 0x60; i++, cur += 0x10C) {\n if (func_80181A2C((s32)cur) == 1) {\n val2 = func_8012BD14((s32)cur);\n best2 = cur;\n flag = 1;\n break;\n }\n }\n if (!flag) {\n func_80181A84((s32)best1, 1);\n func_8013B7AC(2);\n return;\n }\n\n for (; i < 0x60; i++, cur += 0x10C) {\n if (func_80181A2C((s32)cur) == 1) {\n v1 = func_8012BD14((s32)cur);\n if (v1 < val1) {\n best2 = best1;\n best1 = cur;\n val2 = val1;\n val1 = v1;\n } else if (v1 < val2) {\n best2 = cur;\n val2 = v1;\n }\n }\n }\n func_80181A84((s32)best1, 1);\n func_80181A84((s32)best2, 2);\n}\n"} {"ts": "2026-09-11 00:02:05", "label": "s104_d35", "rung": "E", "calib": {"head": "f5a68c412", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c", "fn": "func_80183CE8", "addr": 2149072104, "aliases": null, "header": false, "includers": 0, "nhash_before": "f7197f221dc265dc84b1bf96da5dc5f71d4fe118", "nhash_after": "2885e8193e54a6a04cce23b0f7aa9952771faca9", "source": ".run/P36/agents/ov_SC03_091__func_8018486C/scratch/copy_SC03_089_func_80183CE8.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.407, "objects": ["build/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.o"], "before_text": "void func_80183CE8(s32 a0) {\n s32 i;\n s32 v1;\n s32 val1;\n s32 val2;\n u8 *cur;\n u8 *best1;\n register u8 *best2 __asm__(\"$22\"); // !FAKE: pin $22 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n register s32 flag __asm__(\"$19\"); // !FAKE: pin $19 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 t;\n register s32 cmp __asm__(\"$23\"); // !FAKE: pin $23 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 pad[2];\n\n best1 = 0;\n best2 = 0;\n flag = 0;\n t = *(s32 *)(a0 + 0xCC);\n if (t == 0) {\n goto L_D54;\n }\n func_80183F60(t + 4, 0);\n goto L_D5C;\n\nL_D3C:\n val1 = func_8012BD14((s32)cur);\n best1 = cur;\n flag = 1;\n goto L_D8C;\n\nL_D54:\n func_8013B7AC(0);\n\nL_D5C:\n cur = D_801202A0;\n i = 0;\n cmp = 1;\n\nL_D6C:\n if (func_80183EBC((s32)cur) == cmp) {\n goto L_D3C;\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_D6C;\n }\n\nL_D8C:\n if (flag) {\n goto L_DBC;\n }\n func_8013B7AC(1);\n goto L_DFC;\n\nL_DA4:\n val2 = func_8012BD14((s32)cur);\n best2 = cur;\n flag = 1;\n goto L_DE8;\n\nL_DBC:\n flag = 0;\n if (i >= 0x60) {\n goto L_DE8;\n }\n cmp = 1;\n\nL_DC8:\n if (func_80183EBC((s32)cur) == cmp) {\n goto L_DA4;\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_DC8;\n }\n\nL_DE8:\n if (flag) {\n goto L_E0C;\n }\n func_80183F14((s32)best1, 1);\n\nL_DFC:\n func_8013B7AC(2);\n return;\n\nL_E0C:\n if (i >= 0x60) {\n goto L_E78;\n }\n flag = 1;\n\nL_E18:\n if (func_80183EBC((s32)cur) == flag) {\n v1 = func_8012BD14((s32)cur);\n if (v1 < val1) {\n best2 = best1;\n best1 = cur;\n val2 = val1;\n val1 = v1;\n } else if (v1 < val2) {\n best2 = cur;\n val2 = v1;\n }\n }\n i++;\n cur += 0x10C;\n if (i < 0x60) {\n goto L_E18;\n }\n\nL_E78:\n func_80183F14((s32)best1, 1);\n func_80183F14((s32)best2, 2);\n}\n", "after_text": "void func_80183CE8(s32 a0) {\n\n s32 i;\n s32 v1;\n s32 val1;\n s32 val2;\n u8 *cur;\n u8 *best1;\n u8 *best2;\n s32 flag;\n s32 t;\n s32 pad[2];\n\n best1 = 0;\n best2 = 0;\n flag = 0;\n t = *(s32 *)(a0 + 0xCC);\n if (t != 0) {\n func_80183F60(t + 4, 0);\n } else {\n func_8013B7AC(0);\n }\n\n cur = D_801202A0;\n for (i = 0; i < 0x60; i++, cur += 0x10C) {\n if (func_80183EBC((s32)cur) == 1) {\n val1 = func_8012BD14((s32)cur);\n best1 = cur;\n flag = 1;\n break;\n }\n }\n if (!flag) {\n func_8013B7AC(1);\n func_8013B7AC(2);\n return;\n }\n\n flag = 0;\n for (; i < 0x60; i++, cur += 0x10C) {\n if (func_80183EBC((s32)cur) == 1) {\n val2 = func_8012BD14((s32)cur);\n best2 = cur;\n flag = 1;\n break;\n }\n }\n if (!flag) {\n func_80183F14((s32)best1, 1);\n func_8013B7AC(2);\n return;\n }\n\n for (; i < 0x60; i++, cur += 0x10C) {\n if (func_80183EBC((s32)cur) == 1) {\n v1 = func_8012BD14((s32)cur);\n if (v1 < val1) {\n best2 = best1;\n best1 = cur;\n val2 = val1;\n val1 = v1;\n } else if (v1 < val2) {\n best2 = cur;\n val2 = v1;\n }\n }\n }\n func_80183F14((s32)best1, 1);\n func_80183F14((s32)best2, 2);\n}\n"} +{"ts": "2026-09-11 00:03:08", "label": "s104_d38", "rung": "E", "calib": {"head": "c3023eee4", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c", "fn": "func_801818A4", "addr": 2149062820, "aliases": null, "header": false, "includers": 0, "nhash_before": "7c6ab19d1a87fc4859bda6d3476cea0c1a7677dc", "nhash_after": "3e79536c0c690a8af4636fc2afedc99a5636fccf", "source": ".run/P36/agents/ov_SC02_031__func_801818A4/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.282, "objects": ["build/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.o"], "before_text": "s32 func_801818A4(void *a0, void *a1) {\n s16 stack_buf[8];\n register s16 *s0 __asm__(\"$16\") = (s16 *)a1; // !FAKE: pin $16 \u2014 NEEDED DIFFERS (P36 rung B tus7)\n s16 v0;\n s32 result;\n s32 ret;\n\n v0 = s0[6];\n stack_buf[2] = v0;\n v0 = s0[7];\n stack_buf[5] = 0;\n stack_buf[1] = 0;\n stack_buf[6] = v0;\n v0 = s0[2];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n\n if (result != 0) {\n ret = 1;\n } else {\n v0 = s0[3];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n ret = (result != 0);\n }\n return ret;\n}\n", "after_text": "s32 func_801818A4(void *a0, void *a1) {\n s16 stack_buf[8];\n s16 v0;\n s32 result;\n s32 ret;\n\n v0 = ((s16 *)a1)[6];\n stack_buf[2] = v0;\n v0 = ((s16 *)a1)[7];\n stack_buf[5] = 0;\n stack_buf[1] = 0;\n stack_buf[6] = v0;\n v0 = ((s16 *)a1)[2];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n\n if (result != 0) {\n ret = 1;\n } else {\n v0 = ((s16 *)a1)[3];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n ret = (result != 0);\n }\n return ret;\n}\n"} +{"ts": "2026-09-11 00:03:34", "label": "s104_d38", "rung": "E", "calib": {"head": "c3023eee4", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC02_011/ov_SC02_011_jr_80183178.c", "fn": "func_80186B1C", "addr": 2149083932, "aliases": null, "header": false, "includers": 0, "nhash_before": "7c6ab19d1a87fc4859bda6d3476cea0c1a7677dc", "nhash_after": "3e79536c0c690a8af4636fc2afedc99a5636fccf", "source": "propagate:src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c:func_801818A4", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.238, "objects": ["build/src/ov_SC02_011/ov_SC02_011_jr_80183178.o"], "before_text": "s32 func_80186B1C(void *a0, void *a1) {\n s16 stack_buf[8];\n register s16 *s0 __asm__(\"$16\") = (s16 *)a1; // !FAKE: pin $16 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s16 v0;\n s32 result;\n s32 ret;\n\n v0 = s0[6];\n stack_buf[2] = v0;\n v0 = s0[7];\n stack_buf[5] = 0;\n stack_buf[1] = 0;\n stack_buf[6] = v0;\n v0 = s0[2];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n\n if (result != 0) {\n ret = 1;\n } else {\n v0 = s0[3];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n ret = (result != 0);\n }\n return ret;\n}\n", "after_text": "s32 func_80186B1C(void *a0, void *a1) {\n s16 stack_buf[8];\n s16 v0;\n s32 result;\n s32 ret;\n\n v0 = ((s16 *)a1)[6];\n stack_buf[2] = v0;\n v0 = ((s16 *)a1)[7];\n stack_buf[5] = 0;\n stack_buf[1] = 0;\n stack_buf[6] = v0;\n v0 = ((s16 *)a1)[2];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n\n if (result != 0) {\n ret = 1;\n } else {\n v0 = ((s16 *)a1)[3];\n stack_buf[4] = v0;\n stack_buf[0] = v0;\n result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);\n ret = (result != 0);\n }\n return ret;\n}\n"} diff --git a/src/ov_SC02_011/ov_SC02_011_jr_80183178.c b/src/ov_SC02_011/ov_SC02_011_jr_80183178.c index a7133d8cf..210ebf415 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_80183178.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_80183178.c @@ -2631,18 +2631,17 @@ void func_80186AE0(void *a0) { s32 func_80186B1C(void *a0, void *a1) { s16 stack_buf[8]; - register s16 *s0 __asm__("$16") = (s16 *)a1; // !FAKE: pin $16 — NEEDED DIFFERS (P36 rung B tus9) s16 v0; s32 result; s32 ret; - v0 = s0[6]; + v0 = ((s16 *)a1)[6]; stack_buf[2] = v0; - v0 = s0[7]; + v0 = ((s16 *)a1)[7]; stack_buf[5] = 0; stack_buf[1] = 0; stack_buf[6] = v0; - v0 = s0[2]; + v0 = ((s16 *)a1)[2]; stack_buf[4] = v0; stack_buf[0] = v0; @@ -2651,7 +2650,7 @@ s32 func_80186B1C(void *a0, void *a1) { if (result != 0) { ret = 1; } else { - v0 = s0[3]; + v0 = ((s16 *)a1)[3]; stack_buf[4] = v0; stack_buf[0] = v0; result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]); diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c b/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c index 9a7c576eb..c6c5473a6 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c @@ -6451,18 +6451,17 @@ void func_80181868(void *a0) { s32 func_801818A4(void *a0, void *a1) { s16 stack_buf[8]; - register s16 *s0 __asm__("$16") = (s16 *)a1; // !FAKE: pin $16 — NEEDED DIFFERS (P36 rung B tus7) s16 v0; s32 result; s32 ret; - v0 = s0[6]; + v0 = ((s16 *)a1)[6]; stack_buf[2] = v0; - v0 = s0[7]; + v0 = ((s16 *)a1)[7]; stack_buf[5] = 0; stack_buf[1] = 0; stack_buf[6] = v0; - v0 = s0[2]; + v0 = ((s16 *)a1)[2]; stack_buf[4] = v0; stack_buf[0] = v0; @@ -6471,7 +6470,7 @@ s32 func_801818A4(void *a0, void *a1) { if (result != 0) { ret = 1; } else { - v0 = s0[3]; + v0 = ((s16 *)a1)[3]; stack_buf[4] = v0; stack_buf[0] = v0; result = func_8012DEB8((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);