mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
phase-36: S104 s104_e36 — func_801880E8 banked at 0 through the whole-object gate + propagated — 3 levers → 0: the pinned word copies as ONE struct assignment (expand_block_move mips.c:2331)
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
s32 func_801880E8(s32 param_1, s32 arg1)
|
||||
{
|
||||
s32 hole[4];
|
||||
Blk20 m;
|
||||
s32 vec[3];
|
||||
s16 *spt;
|
||||
|
||||
spt = *(s16 **)(param_1 + 0x2C);
|
||||
if (*(u16 *)spt == 0) {
|
||||
return 0;
|
||||
}
|
||||
m = D_800AE620;
|
||||
RotMatrixY(func_8012B6D4((s16 *)(param_1 + 4), spt + 2), &m);
|
||||
vec[1] = 0;
|
||||
vec[0] = 0;
|
||||
vec[2] = arg1;
|
||||
func_800484EC((s32)&m, (s32)vec, param_1 + 0x10);
|
||||
return 1;
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
# func_801880E8 (ov_SC03_091_jr_8018326C.c) — P36 S104 agent e36
|
||||
|
||||
**Result: score 0 in plain C, ZERO levers.** Levers 3 NEEDED (`$2/$3/$4` pins, a launder on `s`, a keepalive) → 0.
|
||||
54/54 ins; the WHOLE object is identical to the baseline snapshot (`objdump -s -r` md5 `12d084b9…`, `scratch/p1.o`).
|
||||
Closed on the FIRST `--try`: `PACK/body.c` (= `scratch/p1.c`).
|
||||
|
||||
## (a) The residual
|
||||
COUNT +6 (60 vs 54) plus a shuffled prologue: the tree's hand-unrolled 8-word copy through three pinned temps came out as
|
||||
eight `lui/lw` absolute pairs (the launder was meant to keep `&D_800AE620` in one register) and one `addiu a1,a1,4`
|
||||
where the target has ONE `lui/addiu a1` and the canonical MIPS block move: `lw v0,v1,a0` ×3 / `sw` ×3, twice, then 2+2.
|
||||
|
||||
## (b) The pass and the decision
|
||||
Not a pass decision at all — the target is `movstrsi_internal`, gcc's own block move for a 32-byte aggregate assignment:
|
||||
`expand_block_move` (`config/mips/mips.c:2331`, the `bytes <= 2*MAX_MOVE_BYTES` branch at `:2361-2364`, `MAX_MOVE_REGS 4`
|
||||
at `:2216`) → `output_block_move` (`:2444`) emits loads in groups of up to three temps then their stores — exactly the
|
||||
`v0/v1/a0` triples with `sw` in between. The decompiler's element-wise copy can never reproduce it (each element is its
|
||||
own SImode load from an absolute address; cse's `find_best_addr` keeps them absolute). Proven on bytes.
|
||||
|
||||
## (c) The move
|
||||
The whole pinned block `{ Blk20 *s = &D_800AE620; register t0,t1,t2 …; m.w[i] = …; keepalive }` → `m = D_800AE620;`
|
||||
(a struct assignment; `Blk20` is `struct { s32 w[8]; }`, `src/shared/engine_types.h:472`). Nothing else changed; the dead
|
||||
`s32 hole[4]` stays — without it the frame is 80 not 96 (`scratch/p2.c`, the accepted dead-local idiom, cookbook idiom 6).
|
||||
|
||||
## (d) Generator proposal
|
||||
When a body copies N consecutive words of one aggregate/global into a local through temps (a run of `m.w[k] = s->w[k]`,
|
||||
`dst[k] = src[k]`, or three pinned temps ferrying triples) and the residual shows the target's `lw ×3 / sw ×3` groups
|
||||
(or 2+2 / 4+4) from one base register, replace the run with a single struct assignment `m = SRC;` (declare a
|
||||
`struct { s32 w[N]; }` type if none exists). Also: **grep the whole `src/` for the callee combination first** — this body's
|
||||
lever-free twin was banked in two other overlays (`RotMatrixY(func_8012B6D4(` gives three sites).
|
||||
|
||||
## (e) What did not work
|
||||
Nothing tried before the port. The sweep's best (29, R9+R18 reordering the temps) only reshuffled the element copies.
|
||||
|
||||
## (f) Where the method fell short
|
||||
Nothing — step 12 (d2/d6, "a lever-free SAME-shape variant in another binary is the answer half the time"):
|
||||
`func_801826C8` (`src/ov_SC03_098/ov_SC03_098_jr_8017D898.c:5211`) and `func_80181EC0`
|
||||
(`src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c:5971`) are this exact body, lever-free, under a `mat = D_800AE620;` copy.
|
||||
The pack builder's `related.txt` searches one overlay; a src-wide grep for `D_800AE620` finds 20 lever-free struct copies.
|
||||
|
||||
## (g) Structs
|
||||
This close IS the struct answer: the lever existed only because the copy was spelled element-wise. The aggregate
|
||||
assignment is the only C spelling that reaches `movstrsi`. `Blk20` is the 8-word (MATRIX-sized, 32-byte) rotation
|
||||
matrix seed at `D_800AE620` (the identity matrix passed to `RotMatrixY`); `vec` is an s32[3] translation.
|
||||
|
||||
## Copies
|
||||
None under this name; the two same-shape functions in other overlays are already banked lever-free (above).
|
||||
@@ -0,0 +1,17 @@
|
||||
s32 aF80188B64(s32 arg0) __asm__("func_80188B64");
|
||||
|
||||
s32 aF80188B64(s32 arg0) {
|
||||
s32 rv;
|
||||
s32 buf1[2];
|
||||
s32 buf2[2];
|
||||
|
||||
((void (*)(s32, s32, s32))func_8012F14C)((s32)D_80126B78 + 0x34, (s32)D_801AC098, (s32)buf1);
|
||||
((void (*)(s32, s32, s32))func_8012F14C)((s32)D_80126B78 + 0x34, (s32)(D_801AC098 + 8), (s32)buf2);
|
||||
if (func_80135888(*(s32 *)(arg0 + 0x20), *(s32 *)(arg0 + 0x58), (s32)buf1, (s32)buf2) == 0) {
|
||||
rv = 0;
|
||||
} else {
|
||||
func_8012F568(1, 0x201, *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), 0x23, (s32)buf2, (s32)D_801152A8);
|
||||
rv = 1;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
# func_80188B64 (ov_SC03_091_jr_8018326C.c) — P36 S104 agent e36
|
||||
|
||||
**Result: score 0, ZERO levers, plain C — a SIGNATURE change (return type `void` → `s32`), so PARKED per S104 (d29).**
|
||||
Levers 1 → 0 (the NEEDED `launder` on `rv`; the `$2` pin was already REMOVED). 45/45 ins; the WHOLE object is identical to
|
||||
the baseline snapshot (`objdump -s -r` md5 `12d084b9…` for `scratch/b2.o`; `nm` identical). Second `--try`.
|
||||
|
||||
`PACK/body.c` (= `scratch/b2.c`): the tree's body unchanged except `s32` return, the launder → `return rv;`, spelled with
|
||||
the TU's DEF-SIDE ALIAS idiom (`s32 aF80188B64(s32) __asm__("func_80188B64");`, as `aF8018632C` in the same TU) because the
|
||||
TU declares `extern void func_80188B64(s32 a0);` twice (TU:6250, :6349) and `--body` cannot edit those. A coordinator may
|
||||
instead change the two prototypes and define `s32 func_80188B64` directly (d29's bank shape); the bytes are the same either
|
||||
way (the callers at :6314/:6409 discard the result).
|
||||
|
||||
## (a) The residual
|
||||
COUNT −3 (42 vs 45): the target's `if` path carries `j <epilogue>; move v0,zero` and the else arm `li v0,1` — the function
|
||||
RETURNS 0/1 in `$v0`. In a `void` function both stores of `rv` are dead and flow deletes them (`insn_dead_p`, `flow.c:1705`,
|
||||
applied `flow.c:1479-1492`); the launder was keeping `rv` alive to fake the return.
|
||||
|
||||
## (b) The pass and the decision
|
||||
d29's mechanism exactly: `return rv;` → `c_expand_return` (`c-typeck.c:6473`) → `expand_return` (`stmt.c:2590`) →
|
||||
`expand_value_return` into `$2` + a `USE`, so the constant stores survive. Proven on bytes (score 0, whole object).
|
||||
|
||||
## (c) The moves
|
||||
1. Return type `void` → `s32` (def-side alias to dodge the `extern void` prototypes).
|
||||
2. The launder → `return rv;`. Keep the if/else with `rv` — the structured `if (…) return 0; …; return 1;` (`scratch/b1.c`)
|
||||
scores 4: jump.c re-lays the `return 0` arm as a fall-through `j; move v0,zero` at the END instead of after the test, i.e.
|
||||
the original was the if/else-assign shape, not early returns.
|
||||
|
||||
## (d) Generator proposal
|
||||
When a `!FAKE: launder` of a local is the last statement of a `void` function and that local is assigned on every path with
|
||||
nothing reading it: change the return type to `s32`, replace the launder with `return <local>;` (keep the assignment shape;
|
||||
do NOT convert to early returns), spell it as a def-side alias when the TU carries `extern void` prototypes, then score.
|
||||
This is d29's rule with "launder of the result local" added to "keepalive of `v0`" (and e36's func_80185730: "$2 pin +
|
||||
keepalive of a copied parameter").
|
||||
|
||||
## (e) What did not work
|
||||
- `scratch/b1.c` early-return spelling: 4 (the `move v0,zero` arm lands after the call arm). Byte evidence above.
|
||||
- All of R2–R43 keep `void` (`history.txt`: every family at 4), so the sweep could never reach it.
|
||||
|
||||
## (f) Where the method fell short
|
||||
Nothing — step 15 (d29). The pack builder should flag "launder/keepalive as last statement of a `void` function" as
|
||||
"missing return value" and emit the `s32` + `return` candidate itself.
|
||||
|
||||
## (g) Structs
|
||||
Neutral. Nothing in the tail is a memory access; the decision is the return type. `arg0` is an actor (`+0x20` sub-object
|
||||
with an s16 at `+0x12`, `+0x58` a pointer) and `buf1/buf2` are two 8-byte vectors from `func_8012F14C`; a struct would
|
||||
read better but changes no pass.
|
||||
|
||||
## Copies (`--try` 0)
|
||||
| function | TU | file |
|
||||
|---|---|---|
|
||||
| func_80188B64 | src/ov_SC03_091/ov_SC03_091_jr_8018326C.c | PACK/body.c (whole object identical) |
|
||||
| func_80187CBC | src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c | scratch/copy_func_80187CBC.c (`D_801A906C` for `D_801AC098`; its TU declares `extern void func_80187CBC(s32 a0);` at :7920) |
|
||||
+175
-175
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"head": "26c19c6f1",
|
||||
"head": "e69218dc5",
|
||||
"stamp": "15956e4a96c4",
|
||||
"generated": "2026-09-11 05:47",
|
||||
"generated": "2026-09-11 05:51",
|
||||
"aliases": [
|
||||
"main",
|
||||
"ov_SC03_014",
|
||||
@@ -21,207 +21,207 @@
|
||||
"main": {
|
||||
"objects": 85,
|
||||
"identical": 85,
|
||||
"seconds": 6.279,
|
||||
"seconds": 6.315999999999996,
|
||||
"mean_s": 0.074
|
||||
},
|
||||
"ov_SC03_014": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 4.418,
|
||||
"mean_s": 0.138
|
||||
"seconds": 4.354,
|
||||
"mean_s": 0.136
|
||||
},
|
||||
"ov_SC03_015": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 4.176,
|
||||
"seconds": 4.196999999999998,
|
||||
"mean_s": 0.131
|
||||
},
|
||||
"ov_SC04_011": {
|
||||
"objects": 28,
|
||||
"identical": 28,
|
||||
"seconds": 3.6020000000000003,
|
||||
"mean_s": 0.129
|
||||
"seconds": 3.6499999999999995,
|
||||
"mean_s": 0.13
|
||||
}
|
||||
},
|
||||
"per_object_seconds": {
|
||||
"build/src/800.o": 0.716,
|
||||
"build/src/800.o": 0.713,
|
||||
"build/src/800_b.o": 0.067,
|
||||
"build/src/800_b_2.o": 0.29,
|
||||
"build/src/800_b_o0a.o": 0.074,
|
||||
"build/src/800_c.o": 0.172,
|
||||
"build/src/800b2.o": 0.071,
|
||||
"build/src/apicard1.o": 0.061,
|
||||
"build/src/apicard2.o": 0.087,
|
||||
"build/src/apicard3.o": 0.058,
|
||||
"build/src/apicard4.o": 0.078,
|
||||
"build/src/apicard5.o": 0.085,
|
||||
"build/src/apicard6.o": 0.057,
|
||||
"build/src/apicard7.o": 0.064,
|
||||
"build/src/boot.o": 0.089,
|
||||
"build/src/gap.o": 0.068,
|
||||
"build/src/libapi1.o": 0.073,
|
||||
"build/src/libapi2.o": 0.056,
|
||||
"build/src/libc2_1.o": 0.059,
|
||||
"build/src/libc2_2.o": 0.056,
|
||||
"build/src/800_b_2.o": 0.282,
|
||||
"build/src/800_b_o0a.o": 0.06,
|
||||
"build/src/800_c.o": 0.165,
|
||||
"build/src/800b2.o": 0.07,
|
||||
"build/src/apicard1.o": 0.058,
|
||||
"build/src/apicard2.o": 0.062,
|
||||
"build/src/apicard3.o": 0.064,
|
||||
"build/src/apicard4.o": 0.068,
|
||||
"build/src/apicard5.o": 0.063,
|
||||
"build/src/apicard6.o": 0.067,
|
||||
"build/src/apicard7.o": 0.071,
|
||||
"build/src/boot.o": 0.081,
|
||||
"build/src/gap.o": 0.061,
|
||||
"build/src/libapi1.o": 0.072,
|
||||
"build/src/libapi2.o": 0.057,
|
||||
"build/src/libc2_1.o": 0.061,
|
||||
"build/src/libc2_2.o": 0.048,
|
||||
"build/src/libcd1.o": 0.068,
|
||||
"build/src/libcd2.o": 0.061,
|
||||
"build/src/libetc.o": 0.052,
|
||||
"build/src/libgpu.o": 0.062,
|
||||
"build/src/libgpu2.o": 0.059,
|
||||
"build/src/libgs1.o": 0.059,
|
||||
"build/src/libgs2.o": 0.049,
|
||||
"build/src/libgs3.o": 0.054,
|
||||
"build/src/libcd2.o": 0.059,
|
||||
"build/src/libetc.o": 0.062,
|
||||
"build/src/libgpu.o": 0.067,
|
||||
"build/src/libgpu2.o": 0.069,
|
||||
"build/src/libgs1.o": 0.062,
|
||||
"build/src/libgs2.o": 0.051,
|
||||
"build/src/libgs3.o": 0.062,
|
||||
"build/src/libgs4.o": 0.06,
|
||||
"build/src/libgs5.o": 0.059,
|
||||
"build/src/libgs6.o": 0.065,
|
||||
"build/src/libgs7.o": 0.059,
|
||||
"build/src/libgs8.o": 0.057,
|
||||
"build/src/libgte1.o": 0.056,
|
||||
"build/src/libgte10.o": 0.054,
|
||||
"build/src/libgte11.o": 0.051,
|
||||
"build/src/libgte12.o": 0.057,
|
||||
"build/src/libgte13.o": 0.075,
|
||||
"build/src/libgte14.o": 0.062,
|
||||
"build/src/libgte15.o": 0.066,
|
||||
"build/src/libgte16.o": 0.053,
|
||||
"build/src/libgte17.o": 0.058,
|
||||
"build/src/libgte18.o": 0.057,
|
||||
"build/src/libgte19.o": 0.056,
|
||||
"build/src/libgte2.o": 0.057,
|
||||
"build/src/libgte20.o": 0.057,
|
||||
"build/src/libgte21.o": 0.056,
|
||||
"build/src/libgte22.o": 0.059,
|
||||
"build/src/libgte23.o": 0.054,
|
||||
"build/src/libgte24.o": 0.055,
|
||||
"build/src/libgte25.o": 0.061,
|
||||
"build/src/libgte26.o": 0.059,
|
||||
"build/src/libgte27.o": 0.049,
|
||||
"build/src/libgte28.o": 0.059,
|
||||
"build/src/libgte29.o": 0.067,
|
||||
"build/src/libgte3.o": 0.057,
|
||||
"build/src/libgte30.o": 0.059,
|
||||
"build/src/libgte4.o": 0.064,
|
||||
"build/src/libgte5.o": 0.057,
|
||||
"build/src/libgte6.o": 0.061,
|
||||
"build/src/libgte7.o": 0.056,
|
||||
"build/src/libgte8.o": 0.056,
|
||||
"build/src/libgte9.o": 0.06,
|
||||
"build/src/libmcrd1.o": 0.078,
|
||||
"build/src/libgs5.o": 0.058,
|
||||
"build/src/libgs6.o": 0.071,
|
||||
"build/src/libgs7.o": 0.062,
|
||||
"build/src/libgs8.o": 0.06,
|
||||
"build/src/libgte1.o": 0.06,
|
||||
"build/src/libgte10.o": 0.058,
|
||||
"build/src/libgte11.o": 0.065,
|
||||
"build/src/libgte12.o": 0.062,
|
||||
"build/src/libgte13.o": 0.062,
|
||||
"build/src/libgte14.o": 0.065,
|
||||
"build/src/libgte15.o": 0.056,
|
||||
"build/src/libgte16.o": 0.049,
|
||||
"build/src/libgte17.o": 0.064,
|
||||
"build/src/libgte18.o": 0.065,
|
||||
"build/src/libgte19.o": 0.057,
|
||||
"build/src/libgte2.o": 0.065,
|
||||
"build/src/libgte20.o": 0.06,
|
||||
"build/src/libgte21.o": 0.061,
|
||||
"build/src/libgte22.o": 0.07,
|
||||
"build/src/libgte23.o": 0.062,
|
||||
"build/src/libgte24.o": 0.057,
|
||||
"build/src/libgte25.o": 0.069,
|
||||
"build/src/libgte26.o": 0.058,
|
||||
"build/src/libgte27.o": 0.057,
|
||||
"build/src/libgte28.o": 0.062,
|
||||
"build/src/libgte29.o": 0.068,
|
||||
"build/src/libgte3.o": 0.06,
|
||||
"build/src/libgte30.o": 0.06,
|
||||
"build/src/libgte4.o": 0.063,
|
||||
"build/src/libgte5.o": 0.059,
|
||||
"build/src/libgte6.o": 0.06,
|
||||
"build/src/libgte7.o": 0.059,
|
||||
"build/src/libgte8.o": 0.06,
|
||||
"build/src/libgte9.o": 0.061,
|
||||
"build/src/libmcrd1.o": 0.066,
|
||||
"build/src/libmcrd2.o": 0.065,
|
||||
"build/src/libpad1.o": 0.06,
|
||||
"build/src/libpad2.o": 0.061,
|
||||
"build/src/sgap.o": 0.071,
|
||||
"build/src/sgap_2.o": 0.054,
|
||||
"build/src/sgap_3.o": 0.059,
|
||||
"build/src/sgap_4.o": 0.065,
|
||||
"build/src/sgap_5.o": 0.055,
|
||||
"build/src/sgap_6.o": 0.061,
|
||||
"build/src/sgap_8.o": 0.073,
|
||||
"build/src/snd1.o": 0.099,
|
||||
"build/src/snd10.o": 0.068,
|
||||
"build/src/snd11.o": 0.062,
|
||||
"build/src/snd12.o": 0.059,
|
||||
"build/src/snd2.o": 0.06,
|
||||
"build/src/libpad1.o": 0.061,
|
||||
"build/src/libpad2.o": 0.074,
|
||||
"build/src/sgap.o": 0.059,
|
||||
"build/src/sgap_2.o": 0.066,
|
||||
"build/src/sgap_3.o": 0.063,
|
||||
"build/src/sgap_4.o": 0.069,
|
||||
"build/src/sgap_5.o": 0.067,
|
||||
"build/src/sgap_6.o": 0.056,
|
||||
"build/src/sgap_8.o": 0.071,
|
||||
"build/src/snd1.o": 0.067,
|
||||
"build/src/snd10.o": 0.066,
|
||||
"build/src/snd11.o": 0.058,
|
||||
"build/src/snd12.o": 0.062,
|
||||
"build/src/snd2.o": 0.07,
|
||||
"build/src/snd3.o": 0.064,
|
||||
"build/src/snd4.o": 0.06,
|
||||
"build/src/snd5.o": 0.06,
|
||||
"build/src/snd6.o": 0.066,
|
||||
"build/src/snd4.o": 0.063,
|
||||
"build/src/snd5.o": 0.055,
|
||||
"build/src/snd6.o": 0.065,
|
||||
"build/src/snd7.o": 0.063,
|
||||
"build/src/snd8.o": 0.06,
|
||||
"build/src/snd9.o": 0.063,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.117,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.489,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.391,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.055,
|
||||
"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.128,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.154,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.102,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.073,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.069,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.158,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.077,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.157,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.096,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.07,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.064,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.08,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.468,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.241,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.094,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.193,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.054,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.096,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.064,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.144,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.179,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.041,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.279,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.059,
|
||||
"build/src/snd8.o": 0.071,
|
||||
"build/src/snd9.o": 0.06,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.121,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.491,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.377,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.056,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.056,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.112,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.149,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.116,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.077,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.07,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.173,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.07,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.167,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.094,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.065,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.058,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.081,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.45,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.252,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.088,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.175,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.058,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.092,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.061,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.141,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.157,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.049,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.277,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.05,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.057,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.051,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.06,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.117,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.483,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.343,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.042,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.048,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.053,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.061,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.113,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.506,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.375,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.045,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.051,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.114,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.125,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.099,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.073,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.053,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.169,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.061,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.146,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.08,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.058,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.061,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.075,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.417,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.249,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.088,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.185,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.055,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.102,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.063,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.171,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.18,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.121,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.093,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.06,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.057,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.163,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.067,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.16,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.091,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.054,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.062,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.074,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.412,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.236,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.089,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.202,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.056,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.085,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.066,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.153,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.194,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.048,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.248,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.053,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.051,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.052,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.067,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.105,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.394,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.317,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.247,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.046,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.05,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.044,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.063,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.111,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.407,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.325,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.047,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.048,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.107,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.139,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.104,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.07,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.06,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.16,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.066,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.147,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.076,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.057,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.068,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.087,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.325,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.193,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.088,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.148,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.05,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.089,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.04,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.112,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.145,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.11,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.074,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.054,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.154,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.067,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.156,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.072,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.059,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.056,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.076,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.328,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.194,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.092,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.159,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.051,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.088,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.062,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.083,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.413,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.045,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.054
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.092,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.416,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.041,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.062
|
||||
},
|
||||
"ok": true,
|
||||
"seconds": 2.1
|
||||
"seconds": 2.2
|
||||
}
|
||||
|
||||
@@ -29545,3 +29545,4 @@
|
||||
{"ts": "2026-09-11 04:52:16", "label": "s104_e32", "rung": "E", "calib": {"head": "55a84c4fd", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC05_005/ov_SC05_005_jr_8017D898.c", "fn": "func_80181DE4", "addr": 2149064164, "aliases": null, "header": false, "includers": 0, "nhash_before": "3b6ca8e79d4117385dcea9308c8e3860d27992ca", "nhash_after": "a57d9f274e5758265f54d92a0730f8e3aec7d870", "source": ".run/P36/agents/ov_SC03_105__func_80183DA0/scratch/x2.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.117, "objects": ["build/src/ov_SC05_005/ov_SC05_005_jr_8017D898.o"], "before_text": "s32 func_80181DE4(s32 a0, s32 a1) {\n register s32 zr __asm__(\"$0\"); // !FAKE: pin $0 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n SVec_80181CDC_80181DE4 pos;\n SVec_80181CDC_80181DE4 out;\n s32 val;\n s32 lvl;\n s32 t;\n s32 x;\n s32 n;\n s32 y;\n s32 arg;\n\n val = 0x7F;\n arg = a1;\n pos.vx = *(s16 *)(a0 + 0x6);\n pos.vy = *(s16 *)(a0 + 0xA);\n pos.vz = *(s16 *)(a0 + 0xE);\n ((void (*)(void *, void *))func_8012EFB8)(&pos, &out);\n lvl = 7;\n\n t = out.vx;\n if (t < 0) { t = -t; }\n if (t >= 0xC9) { return 0; }\n\n if (out.vy >= 0) {\n if (out.vy >= 0xA1) { return 0; }\n __asm__ __volatile__(\"\"); // !FAKE: barrier \u2014 NEEDED DIFFERS (P36 rung B tus9)\n } else {\n if (-out.vy >= 0xA1) { return 0; }\n }\n\n val -= ((((s32 (*)(s32))func_8012BD14)(a0) - 0x1000) * 0x7F) / 0xFF000;\n x = out.vx;\n n = lvl + x / 0x19;\n lvl = n + zr;\n if ((s16)n < 0) { lvl = 0; }\n else if ((s16)n > 0xF) { lvl = 0xF; }\n y = (lvl << 8) | 0x3000;\n func_8002D4C8(arg & 0xFFFF, (val | y) & 0xFFFF);\n return 1;\n}\n", "after_text": "s32 func_80181DE4(s32 a0, s32 a1) {\n SVec_80181CDC_80181DE4 pos;\n SVec_80181CDC_80181DE4 out;\n s32 val;\n s16 lvl;\n s32 t;\n s32 arg;\n\n val = 0x7F;\n lvl = 7;\n arg = a1;\n pos.vx = *(s16 *)(a0 + 0x6);\n pos.vy = *(s16 *)(a0 + 0xA);\n pos.vz = *(s16 *)(a0 + 0xE);\n ((void (*)(void *, void *))func_8012EFB8)(&pos, &out);\n\n t = out.vx;\n if (t < 0) { t = -t; }\n if (t >= 0xC9) { return 0; }\n\n if (out.vy >= 0 ? out.vy >= 0xA1 : -out.vy >= 0xA1) { return 0; }\n\n val -= ((((s32 (*)(s32))func_8012BD14)(a0) - 0x1000) * 0x7F) / 0xFF000;\n lvl += out.vx / 0x19;\n if (lvl < 0) { lvl = 0; }\n else if (lvl > 0xF) { lvl = 0xF; }\n func_8002D4C8(arg & 0xFFFF, (u16)(val | ((lvl << 8) | 0x3000)));\n return 1;\n}\n"}
|
||||
{"ts": "2026-09-11 05:43:04", "label": "s104_e36", "rung": "E", "calib": {"head": "046e84600", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_091/ov_SC03_091_jr_8018326C.c", "fn": "func_8018632C", "addr": 2149081900, "aliases": null, "header": false, "includers": 0, "nhash_before": "15275ab79776f0e50500ca2b116fb7d4e7669d01", "nhash_after": "a3df056d55dd9c7b2219b849aa94e610176eb6bc", "source": ".run/P36/agents/ov_SC03_091__func_8018632C/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.152, "objects": ["build/src/ov_SC03_091/ov_SC03_091_jr_8018326C.o"], "before_text": "s32 aF8018632C(s32 a0) {\n extern void func_8012BE54(s32 a0);\n extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);\n extern u16 D_80126B62;\n extern u8 D_801A61DC[];\n\n s32 ent;\n s32 p;\n s32 h;\n s32 h2;\n s32 ret;\n s32 s0;\n s32 r;\n s32 v;\n s32 g;\n s32 d;\n u16 arr[3];\n\n ent = a0;\n p = *(s32 *)(ent + 0x20);\n h = *(s16 *)(p + 0x18);\n __asm__(\"\" : \"=r\"(h) : \"0\"(h)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n ret = ((s32 (*)(s32))func_8012BE54)(ent);\n s0 = h >> 8;\n if (ret > s0 * s0) {\n return 0;\n }\n v = *(s16 *)(ent + 0xA);\n h2 = *(s16 *)(*(s32 *)(ent + 0x20) + 0x1A);\n __asm__ __volatile__(\"\" : \"=r\"(h2) : \"0\"(h2)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n g = *(s16 *)&D_80126B62;\n r = h2 >> 6;\n d = v - g;\n if (d >= 0 ? r < d : r < g - v) {\n return 0;\n }\n a0 = 1;\n arr[0] = *(u16 *)(ent + 0x6);\n arr[1] = *(u16 *)(ent + 0xA);\n arr[2] = *(u16 *)(ent + 0xE);\n func_8012F568(1, 0x4201, 0, 0x1C, (s32)arr, (s32)D_801A61DC);\n}\n", "after_text": "s32 aF8018632C(s32 a0) {\n extern void func_8012BE54(s32 a0);\n extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);\n extern u16 D_80126B62;\n extern u8 D_801A61DC[];\n\n s32 h;\n s32 h2;\n s32 ret;\n s32 s0;\n s32 r;\n s32 v;\n s32 g;\n s32 d;\n u16 arr[3];\n\n h = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x18);\n ret = ((s32 (*)(s32))func_8012BE54)(a0);\n s0 = (s16)h >> 8;\n if (ret > s0 * s0) {\n return 0;\n }\n v = *(s16 *)(a0 + 0xA);\n h2 = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x1A);\n g = *(s16 *)&D_80126B62;\n r = (s16)h2 >> 6;\n d = v - g;\n if (d >= 0 ? r < d : r < g - v) {\n return 0;\n }\n arr[0] = *(u16 *)(a0 + 0x6);\n arr[1] = *(u16 *)(a0 + 0xA);\n arr[2] = *(u16 *)(a0 + 0xE);\n func_8012F568(1, 0x4201, 0, 0x1C, (s32)arr, (s32)D_801A61DC);\n}\n"}
|
||||
{"ts": "2026-09-11 05:47:34", "label": "s104_e36", "rung": "E", "calib": {"head": "26c19c6f1", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_091/ov_SC03_091_jr_8018326C.c", "fn": "func_80185730", "addr": 2149078832, "aliases": null, "header": false, "includers": 0, "nhash_before": "bd1a45e2c3808c86d0f93a5b9d75def647597f69", "nhash_after": "7b9109bcfdcc2c56282097d91dbe64f6bfd72084", "source": ".run/P36/agents/ov_SC03_091__func_80185730/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.15, "objects": ["build/src/ov_SC03_091/ov_SC03_091_jr_8018326C.o"], "before_text": "void func_80185730(s32 *a0, s32 a1, s32 a2) {\n s32 sp10[4];\n s32 sp20;\n s16 *q;\n u16 *p;\n s16 t;\n register s32 dst __asm__(\"$2\"); // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n\n q = &D_80126CBA;\n if (*q == 0) {\n if (func_801858AC(a1)) {\n p = (u16 *)(a1 + 0x88);\n *(s32 *)(a1 + 0xDC) = 1;\n } else {\n p = (u16 *)(q - 3);\n *(s32 *)(a1 + 0xDC) = 0;\n }\n } else {\n p = (u16 *)(a1 + 0x88);\n *(s32 *)(a1 + 0xDC) = 1;\n }\n *(s16 *)((s32)sp10 + 0x2) = p[0] + *(u16 *)a2;\n t = p[1] + *(u16 *)(a2 + 2);\n *(s16 *)((s32)sp10 + 0x6) = t;\n *(s16 *)(a1 + 0x100) = t;\n *(s16 *)((s32)sp10 + 0xA) = p[2] + *(u16 *)(a2 + 4);\n func_8012B77C((s32)&sp20, a1 + 4, (s32)sp10);\n dst = (s32)a0;\n *(s32 *)dst = sp20;\n __asm__ __volatile__(\"\" : : \"r\" (dst)); // !FAKE: keepalive \u2014 NEEDED DIFFERS (P36 rung B tus9)\n}\n", "after_text": "s32 *aF80185730(s32 *a0, s32 a1, s32 a2) __asm__(\"func_80185730\");\n\ns32 *aF80185730(s32 *a0, s32 a1, s32 a2) {\n s32 sp10[4];\n s32 sp20;\n s16 *q;\n u16 *p;\n s16 t;\n\n q = &D_80126CBA;\n if (*q == 0) {\n if (func_801858AC(a1)) {\n p = (u16 *)(a1 + 0x88);\n *(s32 *)(a1 + 0xDC) = 1;\n } else {\n p = (u16 *)(q - 3);\n *(s32 *)(a1 + 0xDC) = 0;\n }\n } else {\n p = (u16 *)(a1 + 0x88);\n *(s32 *)(a1 + 0xDC) = 1;\n }\n *(s16 *)((s32)sp10 + 0x2) = p[0] + *(u16 *)a2;\n t = p[1] + *(u16 *)(a2 + 2);\n *(s16 *)((s32)sp10 + 0x6) = t;\n *(s16 *)(a1 + 0x100) = t;\n *(s16 *)((s32)sp10 + 0xA) = p[2] + *(u16 *)(a2 + 4);\n func_8012B77C((s32)&sp20, a1 + 4, (s32)sp10);\n *a0 = sp20;\n return a0;\n}\n"}
|
||||
{"ts": "2026-09-11 05:51:43", "label": "s104_e36", "rung": "E", "calib": {"head": "e69218dc5", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC03_091/ov_SC03_091_jr_8018326C.c", "fn": "func_801880E8", "addr": 2149089512, "aliases": null, "header": false, "includers": 0, "nhash_before": "87e8bfe48b7bef29a55cbe9ec4844738e9d12448", "nhash_after": "4a702f224bcef30244e322a07a06494f335d4004", "source": ".run/P36/agents/ov_SC03_091__func_801880E8/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.15, "objects": ["build/src/ov_SC03_091/ov_SC03_091_jr_8018326C.o"], "before_text": "s32 func_801880E8(s32 param_1, s32 arg1)\n{\n s32 hole[4];\n Blk20 m;\n s32 vec[3];\n s16 *spt;\n\n spt = *(s16 **)(param_1 + 0x2C);\n if (*(u16 *)spt == 0)\n return 0;\n {\n Blk20 *s = &D_800AE620;\n register s32 t0 __asm__(\"$2\"), t1 __asm__(\"$3\"), t2 __asm__(\"$4\"); // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n __asm__(\"\" : \"=r\"(s) : \"0\"(s)); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n t0 = s->w[0]; t1 = s->w[1]; t2 = s->w[2];\n m.w[0] = t0; m.w[1] = t1; m.w[2] = t2;\n t0 = s->w[3]; t1 = s->w[4]; t2 = s->w[5];\n m.w[3] = t0; m.w[4] = t1; m.w[5] = t2;\n t0 = s->w[6]; t1 = s->w[7];\n m.w[6] = t0; m.w[7] = t1;\n __asm__ __volatile__(\"\" : : \"r\"(t0), \"r\"(t1)); // !FAKE: keepalive \u2014 NEEDED DIFFERS (P36 rung B tus9)\n }\n RotMatrixY(func_8012B6D4((s16 *)(param_1 + 4), spt + 2), &m);\n vec[1] = 0;\n vec[0] = 0;\n vec[2] = arg1;\n func_800484EC((s32)&m, (s32)vec, param_1 + 0x10);\n return 1;\n}\n", "after_text": "s32 func_801880E8(s32 param_1, s32 arg1)\n{\n s32 hole[4];\n Blk20 m;\n s32 vec[3];\n s16 *spt;\n\n spt = *(s16 **)(param_1 + 0x2C);\n if (*(u16 *)spt == 0) {\n return 0;\n }\n m = D_800AE620;\n RotMatrixY(func_8012B6D4((s16 *)(param_1 + 4), spt + 2), &m);\n vec[1] = 0;\n vec[0] = 0;\n vec[2] = arg1;\n func_800484EC((s32)&m, (s32)vec, param_1 + 0x10);\n return 1;\n}\n"}
|
||||
|
||||
@@ -6010,20 +6010,10 @@ s32 func_801880E8(s32 param_1, s32 arg1)
|
||||
s16 *spt;
|
||||
|
||||
spt = *(s16 **)(param_1 + 0x2C);
|
||||
if (*(u16 *)spt == 0)
|
||||
if (*(u16 *)spt == 0) {
|
||||
return 0;
|
||||
{
|
||||
Blk20 *s = &D_800AE620;
|
||||
register s32 t0 __asm__("$2"), t1 __asm__("$3"), t2 __asm__("$4"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
|
||||
__asm__("" : "=r"(s) : "0"(s)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
|
||||
t0 = s->w[0]; t1 = s->w[1]; t2 = s->w[2];
|
||||
m.w[0] = t0; m.w[1] = t1; m.w[2] = t2;
|
||||
t0 = s->w[3]; t1 = s->w[4]; t2 = s->w[5];
|
||||
m.w[3] = t0; m.w[4] = t1; m.w[5] = t2;
|
||||
t0 = s->w[6]; t1 = s->w[7];
|
||||
m.w[6] = t0; m.w[7] = t1;
|
||||
__asm__ __volatile__("" : : "r"(t0), "r"(t1)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus9)
|
||||
}
|
||||
m = D_800AE620;
|
||||
RotMatrixY(func_8012B6D4((s16 *)(param_1 + 4), spt + 2), &m);
|
||||
vec[1] = 0;
|
||||
vec[0] = 0;
|
||||
|
||||
Reference in New Issue
Block a user