From f308b46a7b8bb7b4eb2f2b33ccc4a14778256ead Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 11 Sep 2026 05:51:44 -0600 Subject: [PATCH] =?UTF-8?q?phase-36:=20S104=20s104=5Fe36=20=E2=80=94=20fun?= =?UTF-8?q?c=5F801880E8=20banked=20at=200=20through=20the=20whole-object?= =?UTF-8?q?=20gate=20+=20propagated=20=E2=80=94=203=20levers=20=E2=86=92?= =?UTF-8?q?=200:=20the=20pinned=20word=20copies=20as=20ONE=20struct=20assi?= =?UTF-8?q?gnment=20(expand=5Fblock=5Fmove=20mips.c:2331)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agents/ov_SC03_091__func_801880E8/body.c | 19 + .../ov_SC03_091__func_801880E8/mechanism.md | 46 +++ .../agents/ov_SC03_091__func_80188B64/body.c | 17 + .../ov_SC03_091__func_80188B64/mechanism.md | 52 +++ .run/P36/delever/calibration.json | 350 +++++++++--------- .run/P36/delever/ledger.jsonl | 1 + src/ov_SC03_091/ov_SC03_091_jr_8018326C.c | 14 +- 7 files changed, 312 insertions(+), 187 deletions(-) create mode 100644 .run/P36/agents/ov_SC03_091__func_801880E8/body.c create mode 100644 .run/P36/agents/ov_SC03_091__func_801880E8/mechanism.md create mode 100644 .run/P36/agents/ov_SC03_091__func_80188B64/body.c create mode 100644 .run/P36/agents/ov_SC03_091__func_80188B64/mechanism.md diff --git a/.run/P36/agents/ov_SC03_091__func_801880E8/body.c b/.run/P36/agents/ov_SC03_091__func_801880E8/body.c new file mode 100644 index 000000000..4236a1941 --- /dev/null +++ b/.run/P36/agents/ov_SC03_091__func_801880E8/body.c @@ -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; +} diff --git a/.run/P36/agents/ov_SC03_091__func_801880E8/mechanism.md b/.run/P36/agents/ov_SC03_091__func_801880E8/mechanism.md new file mode 100644 index 000000000..81970616a --- /dev/null +++ b/.run/P36/agents/ov_SC03_091__func_801880E8/mechanism.md @@ -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). diff --git a/.run/P36/agents/ov_SC03_091__func_80188B64/body.c b/.run/P36/agents/ov_SC03_091__func_80188B64/body.c new file mode 100644 index 000000000..2e8c7aa05 --- /dev/null +++ b/.run/P36/agents/ov_SC03_091__func_80188B64/body.c @@ -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; +} diff --git a/.run/P36/agents/ov_SC03_091__func_80188B64/mechanism.md b/.run/P36/agents/ov_SC03_091__func_80188B64/mechanism.md new file mode 100644 index 000000000..287461808 --- /dev/null +++ b/.run/P36/agents/ov_SC03_091__func_80188B64/mechanism.md @@ -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 ; 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 ;` (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) | diff --git a/.run/P36/delever/calibration.json b/.run/P36/delever/calibration.json index 65f6bf28e..a7e339220 100644 --- a/.run/P36/delever/calibration.json +++ b/.run/P36/delever/calibration.json @@ -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 } diff --git a/.run/P36/delever/ledger.jsonl b/.run/P36/delever/ledger.jsonl index 0bb87243c..76eb7930c 100644 --- a/.run/P36/delever/ledger.jsonl +++ b/.run/P36/delever/ledger.jsonl @@ -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"} diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c b/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c index 375cb0d64..b1da4222c 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c @@ -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;