phase-36: S104 s104_e36 — func_8018632C banked at 0 through the whole-object gate + propagated — → 0: d39's (s16) casts at both shifts, ported (the TU's aF8018632C alias)

This commit is contained in:
Drew T
2026-09-11 05:43:05 -06:00
parent 046e846007
commit cc3cbcf55e
7 changed files with 364 additions and 193 deletions
@@ -0,0 +1,31 @@
s32 *aF80185730(s32 *a0, s32 a1, s32 a2) __asm__("func_80185730");
s32 *aF80185730(s32 *a0, s32 a1, s32 a2) {
s32 sp10[4];
s32 sp20;
s16 *q;
u16 *p;
s16 t;
q = &D_80126CBA;
if (*q == 0) {
if (func_801858AC(a1)) {
p = (u16 *)(a1 + 0x88);
*(s32 *)(a1 + 0xDC) = 1;
} else {
p = (u16 *)(q - 3);
*(s32 *)(a1 + 0xDC) = 0;
}
} else {
p = (u16 *)(a1 + 0x88);
*(s32 *)(a1 + 0xDC) = 1;
}
*(s16 *)((s32)sp10 + 0x2) = p[0] + *(u16 *)a2;
t = p[1] + *(u16 *)(a2 + 2);
*(s16 *)((s32)sp10 + 0x6) = t;
*(s16 *)(a1 + 0x100) = t;
*(s16 *)((s32)sp10 + 0xA) = p[2] + *(u16 *)(a2 + 4);
func_8012B77C((s32)&sp20, a1 + 4, (s32)sp10);
*a0 = sp20;
return a0;
}
@@ -0,0 +1,74 @@
# func_80185730 (ov_SC03_091_jr_8018326C.c) — P36 S104 agent e36
**Result: score 0, ZERO levers, plain C — but it needs a SIGNATURE change (return type), so: PARKED per S104 (d29).**
Levers 2 → 0 (the `$2` pin and the end-of-function keepalive, both NEEDED). 52/52 ins. The WHOLE object is identical to the
baseline snapshot (`objdump -s -r` md5 `12d084b9…` both for `scratch/s1.o` and `scratch/s2.o`; `nm` identical).
The function RETURNS its first argument (the out-buffer pointer) in `$v0`. The tree declared it `void`, so a `$2`-pinned
`dst = a0` plus a keepalive faked `return a0;`. Two byte-proven spellings, both 0, both done with the TU's existing
DEF-SIDE ALIAS idiom (§37/§124, the same one `aF8018632C` uses 500 lines below) so that the three file-scope/body-local
`extern void func_80185730();` K&R prototypes (TU:3699, :3769, :3838) and their callers stay untouched:
- `PACK/body.c` (= `scratch/s2.c`): `s32 *aF80185730(s32 *a0, s32 a1, s32 a2) __asm__("func_80185730");` — the body is
`body_free.c` with `dst` deleted and the tail `*a0 = sp20; return a0;`. Parameter list unchanged.
- `scratch/s1.c`: a small struct returned BY VALUE — `struct R4 { s32 w; }; struct R4 aF80185730(s32 a1, s32 a2)`,
`struct R4 sp20;` and `return sp20;`. With gcc's pcc struct return the caller passes the result address in `$a0` and the
callee returns it in `$v0` (`function.c` expand_function_end), which is byte-for-byte the same function. This reading
explains WHY the callers pass a buffer first and never read `$v0`; which one the original was cannot be told from this
function's bytes (the callers are the same either way).
## (a) The residual
Same 52 ins; the tail. Mine `lw v0,32(sp); nop; sw v0,0(s3)`, target `lw v1,32(sp); move v0,s3; sw v1,0(v0)`: the target
copies `a0` into `$v0` and stores THROUGH `$v0`. In a `void` function nothing is live in `$v0` at the exit, so the copy is dead.
## (b) The pass and the decision (read in `scratch/dumps_s2/s2.i.{rtl,sched,lreg,greg}`; free body in `scratch/dumps_free/`)
1. `return a0;` expands to `(set (reg/i:SI 2) (reg/v:SI 72))` + `(use (reg 2))` (insns 123/124, `.rtl`) — `$v0` live to the end.
2. sched1 (`.sched`) puts insn 123 ABOVE the store 120: the store waits on the `lw` 118 (load latency), the copy is ready at
once (`rank_for_schedule`, sched.c). Order becomes `lw; $v0 = a0; sw`.
3. local-alloc's `update_equiv_regs` calls `optimize_reg_copy_1` (`local-alloc.c:1003-1007` → `:700-760`) for the copy
`$v0 = r72` whose source does not die there: r72 dies in the very next insn (the store), so its use is replaced by the
DESTINATION — `(set (mem:SI (reg/i:SI 2)) (reg 96))` in `.lreg`. MIPS has no SMALL_REGISTER_CLASSES (`local-alloc.c:710`),
so the hard-reg destination is accepted. That is exactly the target's `move v0,s3; sw v1,0(v0)`.
The pin + keepalive reproduced step 1 by hand. All three steps are read in the dumps; the close is proven on bytes.
## (c) The moves
1. Return type `void` → `s32 *` (or the struct-by-value return), via a def-side alias `aF80185730 __asm__("func_80185730")`.
2. `dst = (s32)a0; *(s32 *)dst = sp20; asm keepalive` → `*a0 = sp20; return a0;` (delete `dst` and its pin).
## (d) Generator proposal
When a `void` function ends `register … x __asm__("$2"); x = <param or value>; …; __asm__ volatile("" : : "r"(x));`, the
function returns x: emit `return x;` with the return type widened, and — when the TU carries a conflicting `extern void`
prototype for it — spell the definition with the def-side alias (`T aF<addr>(…) __asm__("func_<addr>");`) so `--body`
scores it without any prototype edit; for a `$2` = first-parameter return also try the struct-by-value spelling (drop
`a0`, return the struct). This is d29's keepalive rule generalised from "last statement is `asm "r"(v0)`" to "a `$2` pin +
a keepalive of it".
## (e) What did not work / notes
- The sweep's best (R12 `dst` → u16, score 1) was a width accident, not the mechanism.
- The SIBLING family `func_80180200` (ov_SC03_099, 10 members; no `func_801858AC` call, `rv = sp20; *a0 = rv; rv = a0;`)
does NOT close with either spelling: `scratch/sib_a.c` (struct) and `sib_b.c` (`s32 *`) both score 4 — its target stores
through `s0` and copies `move v0,s0` AFTER the store (`lw v0; nop; sw v0,0(s0); … move v0,s0`), the shape a plain return
gives here. Its tree comment (4) records that the unpinned return gives this function's shape. Not pursued (other class).
## (f) Where the method fell short
Nothing; d29's rule (step 15) pointed straight at it. The pack builder's `body_free.c` stripped the pin and the keepalive
but kept `void`, so every generator family scored the dead-store shape. A pin on `$2` + a keepalive at the end is the
second spelling of "this function returns a value" (d29 met the first: a keepalive of an assigned `v0`).
## (g) Structs
Here the struct question has a concrete answer: the struct-by-value spelling (`scratch/s1.c`) closes at 0 and would explain
the hidden-pointer calling convention (callers pass a buffer first and ignore `$v0`). It does not change any pass decision
against the `s32 *` spelling (same RTL tail), so it is a naming/type choice for the STRUCTS phase, not a byte lever. The
field records: `a1` is an actor (`+0x4` position record passed to `func_8012B77C`, `+0x88` s16[3] home position,
`+0xDC` s32 flag, `+0x100` s16), `sp10` is a 16-byte record with s16 fields at +2/+6/+0xA (func_8012B77C's "to"),
`D_80126CBA - 6` = `D_80126CB4` is a global s16[3] position.
## Copies (same class; each `--try` 0 with this text, callee and names swapped)
| function | TU | file (`s32 *` return) | struct-return file |
|---|---|---|---|
| func_80185730 | src/ov_SC03_091/ov_SC03_091_jr_8018326C.c | PACK/body.c | scratch/s1.c |
| func_80184BAC | src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c | scratch/copyp_func_80184BAC.c | scratch/copy_func_80184BAC.c |
| func_80184888 | src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c | scratch/copyp_func_80184888.c | scratch/copy_func_80184888.c |
| func_8018271C | src/ov_SC03_104/ov_SC03_104_jr_80182038.c | scratch/copyp_func_8018271C.c | scratch/copy_func_8018271C.c |
The copies carry body-local `extern`s for their callee, `D_80126CBA` and `func_8012B77C` (compatible with any file-scope ones).
Only this TU's copy was checked whole-object.
@@ -0,0 +1,35 @@
s32 aF8018632C(s32 a0) {
extern void func_8012BE54(s32 a0);
extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);
extern u16 D_80126B62;
extern u8 D_801A61DC[];
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_801A61DC);
}
@@ -0,0 +1,37 @@
# func_8018632C (ov_SC03_091_jr_8018326C.c; C name `aF8018632C`) — P36 S104 agent e36
**Result: score 0 in plain C, zero levers** (2 NEEDED `launder`s → 0; the `$17` pin was already REMOVED). 54/54 ins, MATCH.
Closed on the FIRST `--try` with d39's port (`.run/P36/agents/ov_SC03_090__func_80185484/scratch/copy_func_8018632C.c`),
copied verbatim to `PACK/body.c` (= `scratch/c1.c`).
## (a) The residual
COUNT +2 (56 vs 54): both s16 field loads came out `lhu; sll 16; sra 16+N` where the target has `lh; sra N`
(`+0x18` → `>> 8`, `+0x1A` → `>> 6`). The two launders were exactly on the two shifted values.
## (b) The pass and the decision (d39's reading, `ov_SC03_090__func_80185484/mechanism.md` (b)/(c); not re-traced here)
cse1 `fold_rtx`'s associative-shift fold (`cse.c:5577-5667`) folds `h >> 8` into `(ashiftrt (ashift x 16) 24)` built on the
load's own extension temp, so combine never re-forms `lh`. `(s16)h >> N` makes `short_shift` (`c-typeck.c:2418-2450`) re-extend
on h's own pseudo; cse folds that pair instead, combine forms `lh` and `simplify_shift_const` (`combine.c:7930-7944`) collapses
the rest to `sra N`.
## (c) The moves
1. `s0 = h >> 8;` → `s0 = (s16)h >> 8;`
2. `r = h2 >> 6;` → `r = (s16)h2 >> 6;` (both needed — d39: 5 and 4 alone)
3. readability, each checked by d39 at 0: `ent = a0` copy and the `p` temp inlined, the dead `a0 = 1;` deleted.
## (d) Generator proposal
When the residual shows `lhu; sll 16; sra 16+N` against the target's `lh; sra N`, rewrite every constant right shift `v >> N`
of an s16-loaded `v` as `(s16)v >> N`, enumerating the subsets of the sites (d13 needed one, this class needs both).
## (e) What did not work
Nothing tried beyond the port; the port closed first time.
## (f) Where the method fell short
Nothing: step 13 (d13) + "copies close with the same text" (d39 already had this TU's copy ready).
## (g) Structs
Neutral (d39 did not need one; the channel here is cse's shift fold on a narrowing extension, not aggregate-vs-scalar MEM flags).
A struct for the sub-object at `+0x20` (s16 +0x18 radius, s16 +0x1A range) would read better but does not touch the fold.
## Copies (all closed by d39 at 0 with this same text)
func_80185484 (ov_SC03_090), func_801857A8 (ov_SC03_089), func_80183318 (ov_SC03_104), func_8018632C (this TU).
+177 -177
View File
@@ -1,7 +1,7 @@
{
"head": "55a84c4fd",
"head": "046e84600",
"stamp": "15956e4a96c4",
"generated": "2026-09-11 04:52",
"generated": "2026-09-11 05:42",
"aliases": [
"main",
"ov_SC03_014",
@@ -21,207 +21,207 @@
"main": {
"objects": 85,
"identical": 85,
"seconds": 6.3100000000000005,
"mean_s": 0.074
"seconds": 6.530000000000003,
"mean_s": 0.077
},
"ov_SC03_014": {
"objects": 32,
"identical": 32,
"seconds": 4.386,
"mean_s": 0.137
"seconds": 4.618000000000001,
"mean_s": 0.144
},
"ov_SC03_015": {
"objects": 32,
"identical": 32,
"seconds": 4.152000000000001,
"mean_s": 0.13
"seconds": 4.332,
"mean_s": 0.135
},
"ov_SC04_011": {
"objects": 28,
"identical": 28,
"seconds": 3.7299999999999995,
"mean_s": 0.133
"seconds": 3.707,
"mean_s": 0.132
}
},
"per_object_seconds": {
"build/src/800.o": 0.655,
"build/src/800_b.o": 0.071,
"build/src/800_b_2.o": 0.279,
"build/src/800_b_o0a.o": 0.06,
"build/src/800_c.o": 0.196,
"build/src/800b2.o": 0.069,
"build/src/apicard1.o": 0.063,
"build/src/apicard2.o": 0.07,
"build/src/apicard3.o": 0.063,
"build/src/apicard4.o": 0.083,
"build/src/apicard5.o": 0.075,
"build/src/apicard6.o": 0.082,
"build/src/apicard7.o": 0.091,
"build/src/boot.o": 0.103,
"build/src/gap.o": 0.066,
"build/src/libapi1.o": 0.076,
"build/src/libapi2.o": 0.055,
"build/src/libc2_1.o": 0.062,
"build/src/libc2_2.o": 0.053,
"build/src/libcd1.o": 0.061,
"build/src/libcd2.o": 0.068,
"build/src/libetc.o": 0.062,
"build/src/libgpu.o": 0.06,
"build/src/libgpu2.o": 0.063,
"build/src/libgs1.o": 0.061,
"build/src/libgs2.o": 0.056,
"build/src/libgs3.o": 0.061,
"build/src/libgs4.o": 0.062,
"build/src/libgs5.o": 0.051,
"build/src/libgs6.o": 0.078,
"build/src/libgs7.o": 0.053,
"build/src/libgs8.o": 0.058,
"build/src/libgte1.o": 0.055,
"build/src/libgte10.o": 0.063,
"build/src/libgte11.o": 0.061,
"build/src/libgte12.o": 0.058,
"build/src/800.o": 0.729,
"build/src/800_b.o": 0.086,
"build/src/800_b_2.o": 0.302,
"build/src/800_b_o0a.o": 0.057,
"build/src/800_c.o": 0.225,
"build/src/800b2.o": 0.064,
"build/src/apicard1.o": 0.088,
"build/src/apicard2.o": 0.057,
"build/src/apicard3.o": 0.066,
"build/src/apicard4.o": 0.077,
"build/src/apicard5.o": 0.059,
"build/src/apicard6.o": 0.07,
"build/src/apicard7.o": 0.066,
"build/src/boot.o": 0.066,
"build/src/gap.o": 0.098,
"build/src/libapi1.o": 0.059,
"build/src/libapi2.o": 0.057,
"build/src/libc2_1.o": 0.074,
"build/src/libc2_2.o": 0.056,
"build/src/libcd1.o": 0.081,
"build/src/libcd2.o": 0.059,
"build/src/libetc.o": 0.061,
"build/src/libgpu.o": 0.063,
"build/src/libgpu2.o": 0.083,
"build/src/libgs1.o": 0.057,
"build/src/libgs2.o": 0.059,
"build/src/libgs3.o": 0.057,
"build/src/libgs4.o": 0.063,
"build/src/libgs5.o": 0.055,
"build/src/libgs6.o": 0.103,
"build/src/libgs7.o": 0.052,
"build/src/libgs8.o": 0.056,
"build/src/libgte1.o": 0.061,
"build/src/libgte10.o": 0.053,
"build/src/libgte11.o": 0.057,
"build/src/libgte12.o": 0.055,
"build/src/libgte13.o": 0.065,
"build/src/libgte14.o": 0.063,
"build/src/libgte15.o": 0.055,
"build/src/libgte16.o": 0.056,
"build/src/libgte17.o": 0.063,
"build/src/libgte18.o": 0.046,
"build/src/libgte19.o": 0.053,
"build/src/libgte2.o": 0.052,
"build/src/libgte14.o": 0.054,
"build/src/libgte15.o": 0.058,
"build/src/libgte16.o": 0.057,
"build/src/libgte17.o": 0.049,
"build/src/libgte18.o": 0.061,
"build/src/libgte19.o": 0.06,
"build/src/libgte2.o": 0.059,
"build/src/libgte20.o": 0.059,
"build/src/libgte21.o": 0.057,
"build/src/libgte22.o": 0.059,
"build/src/libgte23.o": 0.06,
"build/src/libgte24.o": 0.061,
"build/src/libgte25.o": 0.062,
"build/src/libgte26.o": 0.069,
"build/src/libgte27.o": 0.053,
"build/src/libgte28.o": 0.05,
"build/src/libgte29.o": 0.059,
"build/src/libgte3.o": 0.065,
"build/src/libgte30.o": 0.063,
"build/src/libgte4.o": 0.069,
"build/src/libgte5.o": 0.058,
"build/src/libgte6.o": 0.062,
"build/src/libgte7.o": 0.059,
"build/src/libgte8.o": 0.059,
"build/src/libgte21.o": 0.065,
"build/src/libgte22.o": 0.06,
"build/src/libgte23.o": 0.057,
"build/src/libgte24.o": 0.062,
"build/src/libgte25.o": 0.06,
"build/src/libgte26.o": 0.057,
"build/src/libgte27.o": 0.058,
"build/src/libgte28.o": 0.062,
"build/src/libgte29.o": 0.062,
"build/src/libgte3.o": 0.064,
"build/src/libgte30.o": 0.066,
"build/src/libgte4.o": 0.06,
"build/src/libgte5.o": 0.057,
"build/src/libgte6.o": 0.055,
"build/src/libgte7.o": 0.065,
"build/src/libgte8.o": 0.07,
"build/src/libgte9.o": 0.06,
"build/src/libmcrd1.o": 0.065,
"build/src/libmcrd1.o": 0.098,
"build/src/libmcrd2.o": 0.062,
"build/src/libpad1.o": 0.063,
"build/src/libpad2.o": 0.071,
"build/src/sgap.o": 0.055,
"build/src/sgap_2.o": 0.06,
"build/src/sgap_3.o": 0.062,
"build/src/sgap_4.o": 0.067,
"build/src/sgap_5.o": 0.072,
"build/src/sgap_6.o": 0.053,
"build/src/sgap_8.o": 0.072,
"build/src/snd1.o": 0.069,
"build/src/snd10.o": 0.064,
"build/src/snd11.o": 0.058,
"build/src/snd12.o": 0.062,
"build/src/snd2.o": 0.06,
"build/src/snd3.o": 0.057,
"build/src/snd4.o": 0.066,
"build/src/snd5.o": 0.068,
"build/src/snd6.o": 0.079,
"build/src/libpad1.o": 0.067,
"build/src/libpad2.o": 0.079,
"build/src/sgap.o": 0.06,
"build/src/sgap_2.o": 0.057,
"build/src/sgap_3.o": 0.06,
"build/src/sgap_4.o": 0.066,
"build/src/sgap_5.o": 0.054,
"build/src/sgap_6.o": 0.065,
"build/src/sgap_8.o": 0.064,
"build/src/snd1.o": 0.079,
"build/src/snd10.o": 0.061,
"build/src/snd11.o": 0.057,
"build/src/snd12.o": 0.064,
"build/src/snd2.o": 0.088,
"build/src/snd3.o": 0.065,
"build/src/snd4.o": 0.065,
"build/src/snd5.o": 0.056,
"build/src/snd6.o": 0.075,
"build/src/snd7.o": 0.061,
"build/src/snd8.o": 0.059,
"build/src/snd9.o": 0.065,
"build/src/ov_SC03_014/ov_SC03_014.o": 0.116,
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.484,
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.347,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.066,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.06,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.116,
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.156,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.108,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.074,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.064,
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.167,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.085,
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.162,
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.081,
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.061,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.059,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.09,
"build/src/snd8.o": 0.056,
"build/src/snd9.o": 0.078,
"build/src/ov_SC03_014/ov_SC03_014.o": 0.125,
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.506,
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.376,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.064,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.077,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.136,
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.163,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.131,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.083,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.075,
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.174,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.099,
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.172,
"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.063,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.066,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.096,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.483,
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.226,
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.081,
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.189,
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.055,
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.103,
"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.165,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.182,
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.051,
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.256,
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.063,
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.055,
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.051,
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.069,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.098,
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.25,
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.096,
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.192,
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.051,
"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.07,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.157,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.174,
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.05,
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.26,
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.06,
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.064,
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.056,
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.057,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.115,
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.467,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.373,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.051,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.384,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.048,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.048,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.115,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.144,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.096,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.069,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.061,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.157,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.066,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.149,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.078,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.054,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.104,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.14,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.108,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.071,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.064,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.172,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.068,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.154,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.077,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.064,
"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.075,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.429,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.247,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.096,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.19,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.054,
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.093,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.053,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.141,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.168,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.047,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.25,
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.051,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.056,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.049,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.065,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.124,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.403,
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.347,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.049,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.049,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.102,
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.148,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.113,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.066,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.089,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.44,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.258,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.095,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.199,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.052,
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.095,
"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.162,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.193,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.045,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.266,
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.057,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.059,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.05,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.063,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.115,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.393,
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.328,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.052,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.046,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.105,
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.143,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.108,
"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.057,
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.163,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.061,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.145,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.081,
"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.063,
"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.344,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.21,
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.168,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.069,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.163,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.086,
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.066,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.066,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.088,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.332,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.206,
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.082,
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.157,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.056,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.092,
"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.09,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.417,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.044,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.059
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.158,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.061,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.08,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.06,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.094,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.421,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.039,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.047
},
"ok": true,
"seconds": 2.1
"seconds": 2.2
}
File diff suppressed because one or more lines are too long
+9 -16
View File
@@ -4719,8 +4719,6 @@ s32 aF8018632C(s32 a0) {
extern u16 D_80126B62;
extern u8 D_801A61DC[];
s32 ent;
s32 p;
s32 h;
s32 h2;
s32 ret;
@@ -4731,28 +4729,23 @@ s32 aF8018632C(s32 a0) {
s32 d;
u16 arr[3];
ent = a0;
p = *(s32 *)(ent + 0x20);
h = *(s16 *)(p + 0x18);
__asm__("" : "=r"(h) : "0"(h)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
ret = ((s32 (*)(s32))func_8012BE54)(ent);
s0 = h >> 8;
h = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x18);
ret = ((s32 (*)(s32))func_8012BE54)(a0);
s0 = (s16)h >> 8;
if (ret > s0 * s0) {
return 0;
}
v = *(s16 *)(ent + 0xA);
h2 = *(s16 *)(*(s32 *)(ent + 0x20) + 0x1A);
__asm__ __volatile__("" : "=r"(h2) : "0"(h2)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
v = *(s16 *)(a0 + 0xA);
h2 = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x1A);
g = *(s16 *)&D_80126B62;
r = h2 >> 6;
r = (s16)h2 >> 6;
d = v - g;
if (d >= 0 ? r < d : r < g - v) {
return 0;
}
a0 = 1;
arr[0] = *(u16 *)(ent + 0x6);
arr[1] = *(u16 *)(ent + 0xA);
arr[2] = *(u16 *)(ent + 0xE);
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_801A61DC);
}