mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 07:40:42 -04:00
phase-36: S104 s104_d17 — func_80181DAC banked at 0 through the whole-object gate + propagated — $0 pin + keepalive → 0: the goto chain as a switch, the do-while as a for with continue (a LOOP_VTOP note flips mostly_true_jump, reorg.c:1364-1372), the hoisted copy deleted (cse.c:846-862)
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
s32 func_80181DAC(s32 arg0) {
|
||||
extern u8 D_801202A0[];
|
||||
u8 *pe;
|
||||
u16 t;
|
||||
s32 count;
|
||||
|
||||
pe = D_801202A0;
|
||||
for (count = 0; count < 0x60; count++, pe += 0x10C) {
|
||||
if ((s32)pe == arg0) {
|
||||
continue;
|
||||
}
|
||||
switch (*(u16 *)pe) {
|
||||
case 0x1FC:
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
if (func_80181E90((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
case 0x239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(pe + 0x20) + 0x18)) >> 6;
|
||||
if (func_80181E90((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
s32 func_80181DAC(s32 arg0) {
|
||||
extern u8 D_801202A0[];
|
||||
u8 *pe;
|
||||
u8 *ps;
|
||||
s16 *ca;
|
||||
s16 *cb;
|
||||
u16 state;
|
||||
u16 t;
|
||||
s32 count;
|
||||
|
||||
pe = D_801202A0;
|
||||
count = 0;
|
||||
ps = pe + 4;
|
||||
do {
|
||||
if ((s32)pe == arg0) {
|
||||
goto next;
|
||||
}
|
||||
state = *(u16 *)pe;
|
||||
ca = (s16 *)((s32)arg0 + 0);
|
||||
if (state == 0x1FC) {
|
||||
goto b1fc;
|
||||
}
|
||||
cb = (s16 *)((s32)ps + 0);
|
||||
if (state == 0x239) {
|
||||
goto b239;
|
||||
}
|
||||
goto next;
|
||||
|
||||
b1fc:
|
||||
cb = (s16 *)((s32)ps + 0);
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
goto call;
|
||||
|
||||
b239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(ps + 0x1C) + 0x18)) >> 6;
|
||||
/* fall through */
|
||||
call:
|
||||
if (func_80181E90(ca, cb, t) == 0) {
|
||||
goto next;
|
||||
}
|
||||
return (s32)pe;
|
||||
|
||||
next:
|
||||
count++;
|
||||
ps += 0x10C;
|
||||
pe += 0x10C;
|
||||
} while (count < 0x60);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
s32 func_80181DAC(s32 arg0) {
|
||||
extern u8 D_801202A0[];
|
||||
register s32 zr __asm__("$0"); // !FAKE: pin $0 — NEEDED DIFFERS (P36 rung B tus7)
|
||||
u8 *pe;
|
||||
u8 *ps;
|
||||
s16 *ca;
|
||||
s16 *cb;
|
||||
u16 state;
|
||||
u16 t;
|
||||
s32 count;
|
||||
|
||||
pe = D_801202A0;
|
||||
count = 0;
|
||||
ps = pe + 4;
|
||||
do {
|
||||
if ((s32)pe == arg0) {
|
||||
goto next;
|
||||
}
|
||||
state = *(u16 *)pe;
|
||||
ca = (s16 *)((s32)arg0 + zr);
|
||||
if (state == 0x1FC) {
|
||||
goto b1fc;
|
||||
}
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
if (state == 0x239) {
|
||||
goto b239;
|
||||
}
|
||||
goto next;
|
||||
|
||||
b1fc:
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
goto call;
|
||||
|
||||
b239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(ps + 0x1C) + 0x18)) >> 6;
|
||||
/* fall through */
|
||||
call:
|
||||
if (func_80181E90(ca, cb, t) == 0) {
|
||||
goto next;
|
||||
}
|
||||
__asm__ __volatile__("" :: "r"(pe)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus7)
|
||||
return (s32)pe;
|
||||
|
||||
next:
|
||||
count++;
|
||||
ps += 0x10C;
|
||||
pe += 0x10C;
|
||||
} while (count < 0x60);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
g6: verdict NO-MATCH start 16 best 16 compiles 322 path
|
||||
best-scoring single candidates of the last trace (move -> score [residual class]):
|
||||
R12 width state u16->s32 @6988 -> 16 [COUNT] (from 16)
|
||||
R8 temp tmp0 @7016 -> 16 [COUNT] (from 16)
|
||||
R7 block @7016 -> 16 [COUNT] (from 16)
|
||||
R10 param-copy arg0 @6991 -> 16 [COUNT] (from 16)
|
||||
R8 base tmp0 @7016 -> 16 [COUNT] (from 16)
|
||||
R9 swap-stmts @6999 -> 16 [COUNT] (from 16)
|
||||
R7 block @7000 -> 16 [COUNT] (from 16)
|
||||
R8 temp tmp0 @6999 -> 16 [COUNT] (from 16)
|
||||
R7 do-while @7000 -> 16 [COUNT] (from 16)
|
||||
R9 swap-stmts @7011 -> 16 [COUNT] (from 16)
|
||||
R7 block @6992 -> 16 [COUNT] (from 16)
|
||||
R8 temp tmp0 @7012 -> 16 [COUNT] (from 16)
|
||||
@@ -0,0 +1,110 @@
|
||||
# func_80181DAC (ov_SC04_004_jr_8017AE2C.c) — d17, P36 T7 S104
|
||||
|
||||
**Result: score 0, plain C, zero levers.** It started at 16 (lever-free) with 2 levers in the tree: a `$0` pin and a keepalive.
|
||||
The same text also closes the class's three other copies (table at the end).
|
||||
|
||||
## (a) The residual (16, COUNT 55 vs 57)
|
||||
The residual had two separate defects, and neither one is a register lever at heart:
|
||||
1. **arg0/count swapped between s2 and s3, and the b1fc/b239 reads went through `a0`.** The target is `lw v0,32(s2)` and
|
||||
mine was `lw v0,32(a0)`. cse rewrote the arms' `arg0 + 0x20` reads to use the hoisted copy `ca = arg0`, which is the
|
||||
pseudo that lands in `a0`. That took refs off arg0, and arg0 then lost its callee-saved slot to count.
|
||||
2. **Two missing instructions at the return.** The target has `beqz v0,<after count++>` with `addiu s3,s3,1` in the
|
||||
delay slot, then `j epilogue; move v0,s0`. Mine had `bnez v0,epilogue; move v0,s0`. reorg took the `move` from the
|
||||
fall-through thread and inverted the branch around the jump.
|
||||
|
||||
## (b) The passes and decisions (read in tools/reference/gcc-2.7.2)
|
||||
- Defect 1: `cse.c:846-862` `make_regs_eqv`. The new register (`ca`) becomes the class head when it lives past the cse
|
||||
block and its last use comes after the old register's (`arg0`'s last use is the b239 read; `ca`'s is the call, which
|
||||
sits in a later block). The cse path follows the jumps into b1fc and b239 (`cse_end_of_basic_block`: the label has one
|
||||
use and a barrier before it), so `canon_reg` rewrites those reads to `ca`. **Proved**: in the free body's `.rtl`, insn 36
|
||||
is `(set 75 72)`, and a1.c (no `ca`) fixes every register and scores 8.
|
||||
- Defect 2: `reorg.c:1364-1372` `mostly_true_jump`. A branch whose target label is immediately followed by
|
||||
`NOTE_INSN_LOOP_VTOP` is predicted taken (returns 1). `fill_eager_delay_slots` (`reorg.c:3688-3700`) then fills from the
|
||||
**target** thread first and steals `count++`. The `j epilogue` keeps its backward-filled `move v0,s0`
|
||||
(`fill_simple_delay_slots`), and relax finds no branch-around-a-jump to invert. `NOTE_INSN_LOOP_VTOP` is only emitted by
|
||||
`duplicate_loop_exit_test` (`jump.c:2306`), which runs only on a rotated `for`/`while` loop, never on a `do-while`.
|
||||
A do-while's `next:` label is followed by `NOTE_INSN_LOOP_CONT`, the EQ test predicts not-taken (`reorg.c:1405`), the
|
||||
fall-through steal succeeds (`steal_delay_list_from_fallthrough`, `reorg.c:1699`), and the branch gets inverted. **Proved** from the
|
||||
`.jump2` dumps:
|
||||
- r12 (the `for` loop): `(code_label 145) (note NOTE_INSN_LOOP_VTOP)`.
|
||||
- a3 (the do-while): `(code_label "next") (note NOTE_INSN_LOOP_CONT)`.
|
||||
- r11 (the switch body with a do-while) keeps exactly this 6-point residual.
|
||||
- The tree's keepalive `asm volatile` got the same result another way: an asm insn stops the fall-through search
|
||||
(`stop_search_p`, `reorg.c:698`).
|
||||
- Why a call per case costs 0 bytes: **post-reload cross-jump** (`toplev.c:3142` jump2, `find_cross_jump` `jump.c:2371`)
|
||||
merges the two call tails from the `a2 = zext(t)` insn down (`.jump2` label 198). That produces the target's single
|
||||
`jal` and b1fc's `j 7014`. Each arm's own `a0 = arg0` / `a1 = pe+4` copies stay at the arm heads (sched2), and reorg
|
||||
moves them into the dispatch branches' delay slots.
|
||||
|
||||
## (c) The moves that closed it (joint; each alone scores 6 or 8)
|
||||
1. Delete the decompiler's hoisted argument copies `ca`/`cb` and the shared `call:` label. Write a `switch` on the
|
||||
state with one call per case: `if (func_80181E90(arg0, pe + 4, t) != 0) return pe; break;`. This fixes defect 1.
|
||||
2. Rewrite `do { … goto next; … next: count++; pe += 0x10C; } while (count < 0x60)` as
|
||||
`for (count = 0; count < 0x60; count++, pe += 0x10C)` with `continue`. This fixes defect 2.
|
||||
3. Delete the second walked pointer `ps = pe + 4` too, since loop.c's strength reduction rebuilds the `pe+4` giv in `s1`
|
||||
(r12 = 0). `t` has to stay a `u16` temp: r9, with `t` inlined into the argument, scores 19 because the HImode
|
||||
pseudo's `zero_extend` at the shared tail sets the cross-jump merge point.
|
||||
|
||||
Also at 0: r3/r5-r8/r10 (with or without `ca`/`cb` once it is a switch), v4/v5 (the goto body inside a `for`), and s1.c
|
||||
(struct form).
|
||||
|
||||
## (d) Generator proposal
|
||||
When a lever-free do-while's return path shows `bnez vX,<epilogue>; move v0,<ret>` where the target has
|
||||
`beqz vX,<after the increment>; <increment>` followed by `j <epilogue>; move v0,<ret>`, and the tree needs a keepalive
|
||||
asm before the `return`: rewrite `do { … goto next; … next: <incs>; } while (c);` as `for (; c; <incs>) { … continue; … }`
|
||||
(VTOP prediction, `reorg.c:1364`). And when goto arms feed a shared `call:` label through copies hoisted before the
|
||||
dispatch (`ca = arg0;` before the `==` tests, a `$0`-pinned `x + zr` in the tree), rewrite them as a `switch` with one
|
||||
call per case and delete the copies: cross-jump re-merges the calls for free (`jump.c:2371`).
|
||||
|
||||
## (e) What did not work (byte evidence)
|
||||
- a1 (a switch-like goto chain with a single call and no `ca`): 8. Registers right, the a0/a1 delay-slot hoists and the
|
||||
return missing.
|
||||
- a2 (the argument computed straight into the call per case): 21. `t` lands in `a2`.
|
||||
- a3 (the goto body with per-arm calls, in a do-while): 6. Only the return reorg is left.
|
||||
- v1 (a positive test) and v2 (a `while` loop): 6. v3 (the `for` with `count = 0` in the init after `ps`): 4, prologue
|
||||
order only.
|
||||
- r1/r2/r4 (structured if/else instead of a switch): 13. The if/else keeps a single shared-call shape that cse and reorg
|
||||
treat differently.
|
||||
- r9 (`t` inlined as a `(u16)` argument): 19.
|
||||
|
||||
## (f) Where the method fell short
|
||||
- Step 1's "count first" was right (55 vs 57), but neither missing instruction was an allocation question.
|
||||
`alloc_table.py` would have been a detour. The register swap was a consequence of cse's head choice, and the count gap
|
||||
was a reorg prediction. The METHOD list has no "reorg thread-choice" entry. Add one: *a delay slot filled from the other
|
||||
thread = `mostly_true_jump` (`reorg.c:1335`); a loop note (VTOP/LOOP_BEG) next to the target label flips it; a
|
||||
do-while has none*.
|
||||
- The decompiler's goto spelling (a shared `call:` label, hoisted copies, a `+ zr` pin) hid a plain `switch`. No generator
|
||||
family reaches a switch from goto text (the same lesson as S104 d3/d9). The 16 from the free sweep was a structural
|
||||
ceiling, not a search failure.
|
||||
|
||||
## (g) The structs question
|
||||
Structs were **not** the missing piece here. s1.c uses a body-local `Ent { u16 kind; u16 unk2; s16 pos[14]; Sub *sub
|
||||
/*0x20*/; … }` (size 0x10C) and `Sub { u8 pad[0x18]; s16 v; }`, and scores **0**, byte-identical to the cast form.
|
||||
Neither lever lived in an alias or scheduling decision, because the loop has no stores for `expr.c:4568`'s aggregate
|
||||
channel to matter. Both lived in the control-flow shape (cse's copy head, reorg's loop-note prediction). A struct type for
|
||||
`D_801202A0` (the 0x10C-byte entity table: `+0` kind, `+4` position, `+0x20` pointer to a sub-object with `s16` at
|
||||
`+0x18`) is still the right long-term spelling and is byte-neutral.
|
||||
|
||||
## Copies of this class (the same text; each `--try` = 0)
|
||||
| function | TU | file |
|
||||
|---|---|---|
|
||||
| func_80181DAC | src/ov_SC04_004/ov_SC04_004_jr_8017AE2C.c | PACK/body.c (= scratch/copies/func_80181DAC_cast.c) |
|
||||
| func_801872E0 | src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c | PACK/scratch/copies/func_801872E0.c (callee func_801873C4, prototyped) |
|
||||
| func_80180D50 | src/ov_SC04_003/ov_SC04_003_jr_8017BEBC.c | PACK/scratch/copies/func_80180D50.c (keeps the tree's cast call `((s32 (*)(s16 *, s16 *, s32))func_80180E34)`) |
|
||||
| func_80183820 | src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c | PACK/scratch/copies/func_80183820.c (callee func_80183904) |
|
||||
|
||||
That is 4 bodies and 8 levers removed.
|
||||
|
||||
## func_80181D1C (the neighbouring class, 4 copies): NOT closed by this mechanism
|
||||
Its best lever-free text is PACK/scratch/d1c.c, at 15 (COUNT 34 vs 36). Two defects, both different from DAC's:
|
||||
- **The early `return 0`** has the same reorg symptom (fall-through steal and inversion; the tree fixes it with
|
||||
`asm volatile("")`), but there is no loop, so the VTOP prediction cannot apply. It would need `mostly_true_jump` > 0
|
||||
through rarity (`reorg.c:1375-1390`) or an own-fallthrough failure (a live label after the branch). No plain-C shape
|
||||
was found.
|
||||
- **The return value lives in the hard register v0 across the `x < t` test**, and the call result `r` is copied to `v1`
|
||||
(`move v1,v0`). The tree pins `rr`→$3 and `z`→$2. Local-alloc gives the block-local `r` its `v0` suggestion before
|
||||
global runs (`local-alloc.c:1797+`, qty_phys_sugg), and every `ret` variable shape tried (d1-d11) ends up with `ret` in
|
||||
`v1` and a final `move v0,v1`. The target behaves as if `(set (reg:SI 2) 0)` were already live (a hard-register
|
||||
return-value store hoisted before the test). jump.c's if-conversion (`jump.c:700-830`, allowed on MIPS hard registers)
|
||||
is the only pass seen that does that, and its single-insn arm shape does not fit this body.
|
||||
Candidates for the STRUCTS phase or a dedicated agent.
|
||||
@@ -0,0 +1,47 @@
|
||||
--- every @class/@stuck/@crack note in this translation unit ---
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH
|
||||
// @class: regalloc-order — simplified sibling of matched func_8017B614.
|
||||
// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH (74 ins)
|
||||
// @class: regalloc-order + T1 memcpy-builtin→call re-crack
|
||||
// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH
|
||||
// @class: schedule
|
||||
// @stuck: none — MATCH
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH (63 ins)
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH (62 ins)
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH (65 ins)
|
||||
// @class: regalloc-order
|
||||
// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH expected (simple short-increment + guarded call)
|
||||
// @class: regalloc-order
|
||||
// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm)
|
||||
// @class: plumbing
|
||||
// @stuck: none — signed s32 counter at 0x1C, delay-slot store is the unconditional bump
|
||||
// @class: schedule
|
||||
// @stuck: none — MATCH (102 ins). MATRIX(0x20:m@0,t@0x14)+SVECTOR in/out stack layout; the only
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH (94 ins). Keys: (1) cache out[0] in a local `o` before the switch so gcc
|
||||
// @class: schedule
|
||||
// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh).
|
||||
// @class: other
|
||||
// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH (18 ins): if((b&1) && p!=&sym) call(param,&sym); $a0 live, $a1=&sym fall out
|
||||
// @class: schedule
|
||||
// @stuck: none — MATCH (44 ins). Two §3-T4 branch-polarity inversions: outer if(param_2>=iVar2) makes the func_8018352C else-block fall-through; inner if(param_3>=iVar2) return 0 makes the func_8012A828 body fall-through. No pins needed — natural $s1/$s0/$s2 alloc matched.
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH (straightforward; callee sigs canonical from overlay)
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH expected (single call-crossing local pins to $s0 naturally; lhu via unsigned short)
|
||||
@@ -0,0 +1,83 @@
|
||||
=== lever-free bodies in ov_SC04_004 sharing a callee or global with func_80181DAC (41 found; top 6 by shared symbols) — read them for the SHAPE ===
|
||||
--- func_8012A908 (src/shared/ov/func_8012A908.h:6) shares 1: D_801202A0 ---
|
||||
void func_8012A908(void) {
|
||||
u8 *p = D_801202A0;
|
||||
s32 i;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (((s16)D_801270C0 == 1) || (*(u16 *)(p + 0x72) & 0x1000)) {
|
||||
func_8012A988(p);
|
||||
}
|
||||
p += 0x10C;
|
||||
}
|
||||
}
|
||||
|
||||
--- func_801787D4 (src/shared/ov/func_801787D4.h:5) shares 1: D_801202A0 ---
|
||||
void func_801787D4(void) {
|
||||
u8 *p = D_801202A0;
|
||||
s32 i;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (*(u16 *)(p + 0) != 0 && p[0xC0] != 0) {
|
||||
func_80178840(p);
|
||||
}
|
||||
p += 0x10C;
|
||||
}
|
||||
}
|
||||
|
||||
--- func_8013E410 (src/shared/ov/func_8013E410.h:4) shares 1: D_801202A0 ---
|
||||
s32 func_8013E410(void) {
|
||||
s32 a0;
|
||||
s32 v1;
|
||||
v1 = (s32)D_801202A0;
|
||||
for (a0 = 0; a0 < 0x60; a0++, v1 += 0x10C) {
|
||||
if (*(u16 *)v1 == 0) {
|
||||
return v1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
--- func_80149E94 (src/shared/ov/func_80149E94.h:6) shares 1: D_801202A0 ---
|
||||
s32 func_80149E94(s32 arg0) {
|
||||
u8 *p;
|
||||
if ((func_8016F1AC() == 0) && (*(u8 *)(arg0 + 0x1C5) != 0)) {
|
||||
*(u8 *)(arg0 + 0x1C5) = 0;
|
||||
for (p = D_801202A0; p < D_801202A0 + 0x6480; p += 0x10C) {
|
||||
if (func_80149F2C(arg0, (s32)p) != 0) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
--- func_8014A238 (src/shared/ov/func_8014A238.h:6) shares 1: D_801202A0 ---
|
||||
s32 func_8014A238(s32 arg0) {
|
||||
u32 i;
|
||||
Entry8014A238 *p;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
p = &((Entry8014A238 *)D_801202A0)[i];
|
||||
if ((p->f_0 != 0) && (p->f_AA != 0) &&
|
||||
(func_8014C278(arg0, (s32)p, 0x30) != 0) &&
|
||||
(func_8014C2B0((void *)arg0, (void *)p, 0x200) != 0)) {
|
||||
return (s32)p;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
--- func_8012E504 (src/shared/ov/func_8012E504.h:4) shares 1: D_801202A0 ---
|
||||
s32 func_8012E504(s32 a0, s32 a1) {
|
||||
s32 p;
|
||||
s32 end;
|
||||
p = (s32)D_801202A0;
|
||||
end = (s32)D_801202A0 + 0x6480;
|
||||
for (; p != end; p += 0x10C) {
|
||||
if (p != a0) {
|
||||
if (*(u16*)p == a1) {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
src/ov_SC04_004/ov_SC04_004_jr_8017AE2C.c:func_80181DAC: score 16 (COUNT; mine 55 ins, target 57) — not yet
|
||||
register pairs (mine -> target, count): s2->s3 x6, s3->s2 x2, a0->s2 x2
|
||||
replace mine[1:3] target[1:3]
|
||||
1 sw s3,28(sp) | sw s2,24(sp)
|
||||
2 move s3,a0 | move s2,a0
|
||||
replace mine[6:8] target[6:8]
|
||||
6 sw s2,24(sp) | sw s3,28(sp)
|
||||
7 move s2,zero | move s3,zero
|
||||
replace mine[11:12] target[11:12]
|
||||
11 beq s0,s3,7024 <func_80181DAC+0xa4> | beq s0,s2,702c <func_80181DAC+0xac>
|
||||
replace mine[16:17] target[16:17]
|
||||
16 move a0,s3 | move a0,s2
|
||||
replace mine[20:23] target[20:23]
|
||||
20 j 7028 <func_80181DAC+0xa8> | j 7030 <func_80181DAC+0xb0>
|
||||
21 addiu s2,s2,1 | addiu s3,s3,1
|
||||
22 lw v0,32(a0) | lw v0,32(s2)
|
||||
replace mine[30:31] target[30:31]
|
||||
30 lw v0,32(a0) | lw v0,32(s2)
|
||||
replace mine[39:40] target[39:42]
|
||||
39 bnez v0,703c <func_80181DAC+0xbc> | beqz v0,7030 <func_80181DAC+0xb0>
|
||||
40 -- | addiu s3,s3,1
|
||||
41 -- | j 7044 <func_80181DAC+0xc4>
|
||||
replace mine[41:42] target[43:44]
|
||||
41 addiu s2,s2,1 | addiu s3,s3,1
|
||||
replace mine[43:45] target[45:47]
|
||||
43 slti v0,s2,96 | slti v0,s3,96
|
||||
44 bnez v0,6fac <func_80181DAC+0x2c> | bnez v0,6fac <func_80181DAC+0x2c>
|
||||
@@ -0,0 +1,2 @@
|
||||
NEEDED pin $0 line 7085
|
||||
NEEDED keepalive line 7124
|
||||
@@ -0,0 +1,2 @@
|
||||
src/ov_SC04_004/ov_SC04_004_jr_8017AE2C.c
|
||||
func_80181DAC
|
||||
+186
-186
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"head": "91ae94a64",
|
||||
"head": "c48582300",
|
||||
"stamp": "15956e4a96c4",
|
||||
"generated": "2026-09-10 22:32",
|
||||
"generated": "2026-09-10 22:36",
|
||||
"aliases": [
|
||||
"main",
|
||||
"ov_SC03_014",
|
||||
@@ -21,207 +21,207 @@
|
||||
"main": {
|
||||
"objects": 85,
|
||||
"identical": 85,
|
||||
"seconds": 12.038000000000002,
|
||||
"mean_s": 0.142
|
||||
"seconds": 11.349,
|
||||
"mean_s": 0.134
|
||||
},
|
||||
"ov_SC03_014": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 7.829999999999999,
|
||||
"mean_s": 0.245
|
||||
"seconds": 6.984999999999998,
|
||||
"mean_s": 0.218
|
||||
},
|
||||
"ov_SC03_015": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 7.966999999999998,
|
||||
"mean_s": 0.249
|
||||
"seconds": 6.996000000000001,
|
||||
"mean_s": 0.219
|
||||
},
|
||||
"ov_SC04_011": {
|
||||
"objects": 28,
|
||||
"identical": 28,
|
||||
"seconds": 7.036,
|
||||
"mean_s": 0.251
|
||||
"seconds": 6.391000000000001,
|
||||
"mean_s": 0.228
|
||||
}
|
||||
},
|
||||
"per_object_seconds": {
|
||||
"build/src/800.o": 1.243,
|
||||
"build/src/800_b.o": 0.168,
|
||||
"build/src/800_b_2.o": 0.531,
|
||||
"build/src/800_b_o0a.o": 0.164,
|
||||
"build/src/800_c.o": 0.323,
|
||||
"build/src/800b2.o": 0.165,
|
||||
"build/src/apicard1.o": 0.102,
|
||||
"build/src/apicard2.o": 0.106,
|
||||
"build/src/apicard3.o": 0.118,
|
||||
"build/src/apicard4.o": 0.147,
|
||||
"build/src/apicard5.o": 0.096,
|
||||
"build/src/apicard6.o": 0.158,
|
||||
"build/src/apicard7.o": 0.078,
|
||||
"build/src/boot.o": 0.121,
|
||||
"build/src/gap.o": 0.123,
|
||||
"build/src/libapi1.o": 0.136,
|
||||
"build/src/libapi2.o": 0.083,
|
||||
"build/src/libc2_1.o": 0.116,
|
||||
"build/src/libc2_2.o": 0.145,
|
||||
"build/src/libcd1.o": 0.159,
|
||||
"build/src/libcd2.o": 0.095,
|
||||
"build/src/libetc.o": 0.096,
|
||||
"build/src/libgpu.o": 0.091,
|
||||
"build/src/libgpu2.o": 0.136,
|
||||
"build/src/libgs1.o": 0.131,
|
||||
"build/src/libgs2.o": 0.111,
|
||||
"build/src/libgs3.o": 0.124,
|
||||
"build/src/libgs4.o": 0.084,
|
||||
"build/src/libgs5.o": 0.106,
|
||||
"build/src/libgs6.o": 0.176,
|
||||
"build/src/libgs7.o": 0.099,
|
||||
"build/src/libgs8.o": 0.152,
|
||||
"build/src/libgte1.o": 0.13,
|
||||
"build/src/libgte10.o": 0.141,
|
||||
"build/src/libgte11.o": 0.113,
|
||||
"build/src/libgte12.o": 0.149,
|
||||
"build/src/libgte13.o": 0.129,
|
||||
"build/src/800.o": 1.114,
|
||||
"build/src/800_b.o": 0.193,
|
||||
"build/src/800_b_2.o": 0.551,
|
||||
"build/src/800_b_o0a.o": 0.192,
|
||||
"build/src/800_c.o": 0.327,
|
||||
"build/src/800b2.o": 0.152,
|
||||
"build/src/apicard1.o": 0.11,
|
||||
"build/src/apicard2.o": 0.074,
|
||||
"build/src/apicard3.o": 0.123,
|
||||
"build/src/apicard4.o": 0.086,
|
||||
"build/src/apicard5.o": 0.116,
|
||||
"build/src/apicard6.o": 0.095,
|
||||
"build/src/apicard7.o": 0.1,
|
||||
"build/src/boot.o": 0.148,
|
||||
"build/src/gap.o": 0.083,
|
||||
"build/src/libapi1.o": 0.096,
|
||||
"build/src/libapi2.o": 0.098,
|
||||
"build/src/libc2_1.o": 0.114,
|
||||
"build/src/libc2_2.o": 0.141,
|
||||
"build/src/libcd1.o": 0.127,
|
||||
"build/src/libcd2.o": 0.128,
|
||||
"build/src/libetc.o": 0.092,
|
||||
"build/src/libgpu.o": 0.098,
|
||||
"build/src/libgpu2.o": 0.085,
|
||||
"build/src/libgs1.o": 0.079,
|
||||
"build/src/libgs2.o": 0.099,
|
||||
"build/src/libgs3.o": 0.084,
|
||||
"build/src/libgs4.o": 0.138,
|
||||
"build/src/libgs5.o": 0.079,
|
||||
"build/src/libgs6.o": 0.145,
|
||||
"build/src/libgs7.o": 0.1,
|
||||
"build/src/libgs8.o": 0.132,
|
||||
"build/src/libgte1.o": 0.108,
|
||||
"build/src/libgte10.o": 0.14,
|
||||
"build/src/libgte11.o": 0.144,
|
||||
"build/src/libgte12.o": 0.076,
|
||||
"build/src/libgte13.o": 0.107,
|
||||
"build/src/libgte14.o": 0.115,
|
||||
"build/src/libgte15.o": 0.144,
|
||||
"build/src/libgte16.o": 0.089,
|
||||
"build/src/libgte17.o": 0.085,
|
||||
"build/src/libgte18.o": 0.106,
|
||||
"build/src/libgte19.o": 0.101,
|
||||
"build/src/libgte2.o": 0.125,
|
||||
"build/src/libgte20.o": 0.143,
|
||||
"build/src/libgte21.o": 0.107,
|
||||
"build/src/libgte22.o": 0.128,
|
||||
"build/src/libgte23.o": 0.158,
|
||||
"build/src/libgte24.o": 0.089,
|
||||
"build/src/libgte25.o": 0.14,
|
||||
"build/src/libgte26.o": 0.114,
|
||||
"build/src/libgte27.o": 0.16,
|
||||
"build/src/libgte28.o": 0.154,
|
||||
"build/src/libgte29.o": 0.146,
|
||||
"build/src/libgte3.o": 0.112,
|
||||
"build/src/libgte30.o": 0.107,
|
||||
"build/src/libgte4.o": 0.089,
|
||||
"build/src/libgte5.o": 0.089,
|
||||
"build/src/libgte15.o": 0.117,
|
||||
"build/src/libgte16.o": 0.078,
|
||||
"build/src/libgte17.o": 0.089,
|
||||
"build/src/libgte18.o": 0.092,
|
||||
"build/src/libgte19.o": 0.098,
|
||||
"build/src/libgte2.o": 0.156,
|
||||
"build/src/libgte20.o": 0.157,
|
||||
"build/src/libgte21.o": 0.121,
|
||||
"build/src/libgte22.o": 0.137,
|
||||
"build/src/libgte23.o": 0.124,
|
||||
"build/src/libgte24.o": 0.08,
|
||||
"build/src/libgte25.o": 0.152,
|
||||
"build/src/libgte26.o": 0.073,
|
||||
"build/src/libgte27.o": 0.099,
|
||||
"build/src/libgte28.o": 0.129,
|
||||
"build/src/libgte29.o": 0.11,
|
||||
"build/src/libgte3.o": 0.118,
|
||||
"build/src/libgte30.o": 0.126,
|
||||
"build/src/libgte4.o": 0.149,
|
||||
"build/src/libgte5.o": 0.1,
|
||||
"build/src/libgte6.o": 0.083,
|
||||
"build/src/libgte7.o": 0.1,
|
||||
"build/src/libgte8.o": 0.126,
|
||||
"build/src/libgte9.o": 0.114,
|
||||
"build/src/libmcrd1.o": 0.093,
|
||||
"build/src/libmcrd2.o": 0.139,
|
||||
"build/src/libpad1.o": 0.139,
|
||||
"build/src/libpad2.o": 0.116,
|
||||
"build/src/sgap.o": 0.16,
|
||||
"build/src/sgap_2.o": 0.123,
|
||||
"build/src/sgap_3.o": 0.106,
|
||||
"build/src/sgap_4.o": 0.086,
|
||||
"build/src/sgap_5.o": 0.09,
|
||||
"build/src/sgap_6.o": 0.109,
|
||||
"build/src/sgap_8.o": 0.102,
|
||||
"build/src/snd1.o": 0.086,
|
||||
"build/src/snd10.o": 0.169,
|
||||
"build/src/snd11.o": 0.144,
|
||||
"build/src/snd12.o": 0.129,
|
||||
"build/src/snd2.o": 0.151,
|
||||
"build/src/snd3.o": 0.091,
|
||||
"build/src/snd4.o": 0.121,
|
||||
"build/src/snd5.o": 0.118,
|
||||
"build/src/snd6.o": 0.095,
|
||||
"build/src/snd7.o": 0.159,
|
||||
"build/src/snd8.o": 0.083,
|
||||
"build/src/snd9.o": 0.16,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.201,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.804,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.648,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.136,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.1,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.223,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.343,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.196,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.18,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.145,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.27,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.116,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.293,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.169,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.143,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.107,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.18,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.704,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.436,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.147,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.307,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.117,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.17,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.127,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.22,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.355,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.112,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.443,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.088,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.083,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.122,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.145,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.185,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.758,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.681,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.138,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.145,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.199,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.284,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.172,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.166,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.104,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.247,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.148,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.237,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.143,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.134,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.137,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.205,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.806,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.395,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.163,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.295,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.148,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.177,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.153,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.34,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.404,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.104,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.481,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.099,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.114,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.089,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.116,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.208,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.691,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.603,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.091,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.102,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.204,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.225,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.187,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.157,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.124,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.255,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.119,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.314,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.158,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.091,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.102,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.167,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.642,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.438,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.205,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.268,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.156,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.171,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.131,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.176,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.813,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.115,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.123
|
||||
"build/src/libgte7.o": 0.089,
|
||||
"build/src/libgte8.o": 0.102,
|
||||
"build/src/libgte9.o": 0.136,
|
||||
"build/src/libmcrd1.o": 0.176,
|
||||
"build/src/libmcrd2.o": 0.138,
|
||||
"build/src/libpad1.o": 0.111,
|
||||
"build/src/libpad2.o": 0.134,
|
||||
"build/src/sgap.o": 0.102,
|
||||
"build/src/sgap_2.o": 0.087,
|
||||
"build/src/sgap_3.o": 0.079,
|
||||
"build/src/sgap_4.o": 0.095,
|
||||
"build/src/sgap_5.o": 0.123,
|
||||
"build/src/sgap_6.o": 0.084,
|
||||
"build/src/sgap_8.o": 0.099,
|
||||
"build/src/snd1.o": 0.145,
|
||||
"build/src/snd10.o": 0.101,
|
||||
"build/src/snd11.o": 0.105,
|
||||
"build/src/snd12.o": 0.09,
|
||||
"build/src/snd2.o": 0.14,
|
||||
"build/src/snd3.o": 0.077,
|
||||
"build/src/snd4.o": 0.177,
|
||||
"build/src/snd5.o": 0.172,
|
||||
"build/src/snd6.o": 0.091,
|
||||
"build/src/snd7.o": 0.106,
|
||||
"build/src/snd8.o": 0.107,
|
||||
"build/src/snd9.o": 0.106,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.181,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.695,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.508,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.114,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.128,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.16,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.229,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.147,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.131,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.114,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.247,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.119,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.275,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.134,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.119,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.108,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.139,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.629,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.429,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.14,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.287,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.161,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.149,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.122,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.269,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.284,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.079,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.388,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.139,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.13,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.089,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.142,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.276,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.808,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.588,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.082,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.114,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.172,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.21,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.221,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.103,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.086,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.266,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.104,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.25,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.104,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.116,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.092,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.155,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.661,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.403,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.175,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.262,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.111,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.157,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.088,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.23,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.259,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.088,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.403,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.108,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.09,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.107,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.107,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.197,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.657,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.512,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.071,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.113,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.17,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.259,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.15,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.141,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.13,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.218,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.107,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.236,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.132,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.102,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.085,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.163,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.619,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.373,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.193,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.253,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.114,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.166,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.1,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.167,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.756,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.102,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.105
|
||||
},
|
||||
"ok": true,
|
||||
"seconds": 4.3
|
||||
"seconds": 3.9
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -7772,53 +7772,30 @@ extern s32 func_80183904(s16 *a0, s16 *a1, s32 a2);
|
||||
|
||||
s32 func_80183820(s32 arg0) {
|
||||
extern u8 D_801202A0[];
|
||||
register s32 zr __asm__("$0"); // !FAKE: pin $0 — NEEDED DIFFERS (P36 rung B tus8)
|
||||
u8 *pe;
|
||||
u8 *ps;
|
||||
s16 *ca;
|
||||
s16 *cb;
|
||||
u16 state;
|
||||
u16 t;
|
||||
s32 count;
|
||||
|
||||
pe = D_801202A0;
|
||||
count = 0;
|
||||
ps = pe + 4;
|
||||
do {
|
||||
for (count = 0; count < 0x60; count++, pe += 0x10C) {
|
||||
if ((s32)pe == arg0) {
|
||||
goto next;
|
||||
continue;
|
||||
}
|
||||
state = *(u16 *)pe;
|
||||
ca = (s16 *)((s32)arg0 + zr);
|
||||
if (state == 0x1FC) {
|
||||
goto b1fc;
|
||||
switch (*(u16 *)pe) {
|
||||
case 0x1FC:
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
if (func_80183904((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
case 0x239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(pe + 0x20) + 0x18)) >> 6;
|
||||
if (func_80183904((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
if (state == 0x239) {
|
||||
goto b239;
|
||||
}
|
||||
goto next;
|
||||
|
||||
b1fc:
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
goto call;
|
||||
|
||||
b239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(ps + 0x1C) + 0x18)) >> 6;
|
||||
/* fall through */
|
||||
call:
|
||||
if (func_80183904(ca, cb, t) == 0) {
|
||||
goto next;
|
||||
}
|
||||
__asm__ __volatile__("" :: "r"(pe)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus8)
|
||||
return (s32)pe;
|
||||
|
||||
next:
|
||||
count++;
|
||||
ps += 0x10C;
|
||||
pe += 0x10C;
|
||||
} while (count < 0x60);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -6968,53 +6968,30 @@ extern s32 func_80181E90();
|
||||
|
||||
s32 func_80181DAC(s32 arg0) {
|
||||
extern u8 D_801202A0[];
|
||||
register s32 zr __asm__("$0"); // !FAKE: pin $0 — NEEDED DIFFERS (P36 rung B tus7)
|
||||
u8 *pe;
|
||||
u8 *ps;
|
||||
s16 *ca;
|
||||
s16 *cb;
|
||||
u16 state;
|
||||
u16 t;
|
||||
s32 count;
|
||||
|
||||
pe = D_801202A0;
|
||||
count = 0;
|
||||
ps = pe + 4;
|
||||
do {
|
||||
for (count = 0; count < 0x60; count++, pe += 0x10C) {
|
||||
if ((s32)pe == arg0) {
|
||||
goto next;
|
||||
continue;
|
||||
}
|
||||
state = *(u16 *)pe;
|
||||
ca = (s16 *)((s32)arg0 + zr);
|
||||
if (state == 0x1FC) {
|
||||
goto b1fc;
|
||||
switch (*(u16 *)pe) {
|
||||
case 0x1FC:
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
if (func_80181E90((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
case 0x239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(pe + 0x20) + 0x18)) >> 6;
|
||||
if (func_80181E90((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
if (state == 0x239) {
|
||||
goto b239;
|
||||
}
|
||||
goto next;
|
||||
|
||||
b1fc:
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
goto call;
|
||||
|
||||
b239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(ps + 0x1C) + 0x18)) >> 6;
|
||||
/* fall through */
|
||||
call:
|
||||
if (func_80181E90(ca, cb, t) == 0) {
|
||||
goto next;
|
||||
}
|
||||
__asm__ __volatile__("" :: "r"(pe)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus7)
|
||||
return (s32)pe;
|
||||
|
||||
next:
|
||||
count++;
|
||||
ps += 0x10C;
|
||||
pe += 0x10C;
|
||||
} while (count < 0x60);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -10161,53 +10161,30 @@ extern s32 func_801873C4(s16 *a0, s16 *a1, s32 a2);
|
||||
|
||||
s32 func_801872E0(s32 arg0) {
|
||||
extern u8 D_801202A0[];
|
||||
register s32 zr __asm__("$0"); // !FAKE: pin $0 — NEEDED DIFFERS (P36 rung B tus8)
|
||||
u8 *pe;
|
||||
u8 *ps;
|
||||
s16 *ca;
|
||||
s16 *cb;
|
||||
u16 state;
|
||||
u16 t;
|
||||
s32 count;
|
||||
|
||||
pe = D_801202A0;
|
||||
count = 0;
|
||||
ps = pe + 4;
|
||||
do {
|
||||
for (count = 0; count < 0x60; count++, pe += 0x10C) {
|
||||
if ((s32)pe == arg0) {
|
||||
goto next;
|
||||
continue;
|
||||
}
|
||||
state = *(u16 *)pe;
|
||||
ca = (s16 *)((s32)arg0 + zr);
|
||||
if (state == 0x1FC) {
|
||||
goto b1fc;
|
||||
switch (*(u16 *)pe) {
|
||||
case 0x1FC:
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
if (func_801873C4((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
case 0x239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(pe + 0x20) + 0x18)) >> 6;
|
||||
if (func_801873C4((s16 *)arg0, (s16 *)(pe + 4), t) != 0) {
|
||||
return (s32)pe;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
if (state == 0x239) {
|
||||
goto b239;
|
||||
}
|
||||
goto next;
|
||||
|
||||
b1fc:
|
||||
cb = (s16 *)((s32)ps + zr);
|
||||
t = (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9u) >> 9;
|
||||
goto call;
|
||||
|
||||
b239:
|
||||
t = (u32)(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + *(s16 *)(*(s32 *)(ps + 0x1C) + 0x18)) >> 6;
|
||||
/* fall through */
|
||||
call:
|
||||
if (func_801873C4(ca, cb, t) == 0) {
|
||||
goto next;
|
||||
}
|
||||
__asm__ __volatile__("" :: "r"(pe)); // !FAKE: keepalive — NEEDED DIFFERS (P36 rung B tus8)
|
||||
return (s32)pe;
|
||||
|
||||
next:
|
||||
count++;
|
||||
ps += 0x10C;
|
||||
pe += 0x10C;
|
||||
} while (count < 0x60);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user