phase-36: S104 s104_d38 — func_801818A4 banked at 0 through the whole-object gate + propagated — $16 pin → 0: the cast copy of the parameter deleted (cse.c:846-856 + the second pass :8352-8355 kept a copy that crossed the call)

This commit is contained in:
Drew T
2026-09-11 00:03:35 -06:00
parent c3023eee40
commit ac8bc32657
7 changed files with 387 additions and 193 deletions
@@ -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.
@@ -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);
}
@@ -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.
+183 -183
View File
@@ -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
}
+2
View File
@@ -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"}
+4 -5
View File
@@ -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]);
+4 -5
View File
@@ -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]);