mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 13:33:34 -04:00
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:
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user