mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-03 16:16:50 -04:00
feat(phase-29): SESSION-21 — func_8012AAAC banked via the §81 carve chain (R22 140/140)
The first jtbl-routed bank of the session, and it validates the whole chain end-to-end:
1. jtbl_carve SPLIT-TABLE repair (this session): jtbl_801D7FB0 28 -> 50 words (112 -> 200 B),
authorized by func_8012AAAC's own `sltiu 0x32`.
2. NEW FIX — SINGLE-TABLE PREDECESSOR: adding a second table to a subseg whose existing carve was
single-table lost the FIRST table's start entirely (new_offs has only the new one;
overlay_jtbl_addrs cannot see the old one because its owner is banked and extract PRUNED the
stub .s; and single-table carves persist no tables= to rebase). The span then failed its own
validator with "first must equal the span start" — the invariant naming the missing entry.
A single-table carve spans exactly its one table, so ITS SPAN START *IS* THAT TABLE'S START:
inference, not persistence, so it also works for spans carved before tables= existed. This is
the RECOVERABLE half of the documented func_8013F350 lesson (that one was a pre-§8e merged
DOUBLE — two tables, no record, genuinely unrecoverable).
Result: ov_SC01_077_a JTBL_PADS := 0,0 tables=+0x0,+0x14. Carve alone byte-gated BYTE-IDENTICAL
BEFORE the bank was attempted (§81 step 2).
3. ARITY axis, all-or-nothing: 1,244 decl sites / 1,240 files `(void)` -> `()` + an R32 completion
assertion (old-form remaining: 0).
4. ONE call-site cast: the definition lands at line 811 and a 0-arg call sits at 822, so gcc sees
the prototype and rejects it — `((void (*)(void))func_8012AAAC)()` (§17a-1; gcc folds the cast
of a known symbol to a direct jal). Only 1 of the 1,386 fleet-wide 0-arg call sites needed it:
the others see only the `extern ()` decl, which permits a 0-arg call.
DIAGNOSIS NOTE: the failure read CC1-FAIL with only a warning visible under make. Running the
pipeline stage-by-stage (cpp | cc1 | maspsx | jtbl_rodata_pads | as) put it on cc1 rc=33, and cc1's
own stderr named it exactly: "too few arguments to function func_8012AAAC" at line 994. Isolating
the stage was what turned an opaque Error 33 into a one-line fix.
R22 clean-fleet: extract-all 139/139, check-all 140 passed / 0 failed.
family_sweep correctly REFUSED this exemplar (§53: a jr-family must route through
jtbl_family_bank.py; "a 0% from this path would be a TOOL artifact, not a wall") — the ×137 member
sweep is the next step and needs a clean tree, which this commit provides.
This commit is contained in:
+2
-1
@@ -21,8 +21,9 @@ ov_SC01_077_ELF := $(ov_SC01_077_OUT).elf
|
||||
ov_SC01_077_MAPFILE := $(ov_SC01_077_OUT).map
|
||||
ov_SC01_077_LD_SCRIPT := $(ov_SC01_077_OUT).ld
|
||||
ov_SC01_077_SPLAT_YAML := config/splat.ov_SC01_077.yaml
|
||||
ov_SC01_077_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_077_a.o,tail2.data.o,ov_SC01_077_jr_8012ACE0.o,tail3.data.o,ov_SC01_077_jr_80135888.o,tail4.data.o,ov_SC01_077_jr_80135A4C.o,tail5.data.o,ov_SC01_077_jr_80135D20.o,tail6.data.o,ov_SC01_077_jr_801380E0.o,tail7.data.o,ov_SC01_077_o0.o,tail8.data.o,ov_SC01_077.o,tail9.data.o,ov_SC01_077_jr_8015444C.o,tail10.data.o,ov_SC01_077_jr_80154C24.o,ov_SC01_077_jr_801588CC.o,tail11.data.o,ov_SC01_077_jr_80159C84.o,tail12.data.o,ov_SC01_077_jr_8015A3C8.o,tail13.data.o,ov_SC01_077_jr_8015AE2C.o,tail14.data.o,ov_SC01_077_jr_8015C32C.o,tail15.data.o,ov_SC01_077_jr_8016AB6C.o,tail16.data.o,ov_SC01_077_jr_801734BC.o,tail17.data.o,ov_SC01_077_jr_80178D40.o,tail18.data.o,ov_SC01_077_jr_8017A4AC.o,tail19.data.o,ov_SC01_077_jr_8017AE2C.o,tail20.data.o,ov_SC01_077_jr_80182268.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC01_077_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_077_a.o,ov_SC01_077_jr_8012ACE0.o,tail2.data.o,ov_SC01_077_jr_80135888.o,tail3.data.o,ov_SC01_077_jr_80135A4C.o,tail4.data.o,ov_SC01_077_jr_80135D20.o,tail5.data.o,ov_SC01_077_jr_801380E0.o,tail6.data.o,ov_SC01_077_o0.o,tail7.data.o,ov_SC01_077.o,tail8.data.o,ov_SC01_077_jr_8015444C.o,tail9.data.o,ov_SC01_077_jr_80154C24.o,ov_SC01_077_jr_801588CC.o,tail10.data.o,ov_SC01_077_jr_80159C84.o,tail11.data.o,ov_SC01_077_jr_8015A3C8.o,tail12.data.o,ov_SC01_077_jr_8015AE2C.o,tail13.data.o,ov_SC01_077_jr_8015C32C.o,tail14.data.o,ov_SC01_077_jr_8016AB6C.o,tail15.data.o,ov_SC01_077_jr_801734BC.o,tail16.data.o,ov_SC01_077_jr_80178D40.o,tail17.data.o,ov_SC01_077_jr_8017A4AC.o,tail18.data.o,ov_SC01_077_jr_8017AE2C.o,tail19.data.o,ov_SC01_077_jr_80182268.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC01_077/ov_SC01_077.o: JTBL_PADS := 0,0,4,0,4,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58,+0x70,+0x90,+0xa8
|
||||
build/src/ov_SC01_077/ov_SC01_077_a.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc
|
||||
build/src/ov_SC01_077/ov_SC01_077_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24
|
||||
build/src/ov_SC01_077/ov_SC01_077_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28
|
||||
|
||||
@@ -96,46 +96,45 @@ segments:
|
||||
# jtbls stay raw .data until matched (each matched fn's jtbl gets its own carve — the ×134 tool).
|
||||
- [0x5e978, data, tail]
|
||||
- [0xafe44, .rodata, ov_SC01_077_a] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xafe58, data, tail2]
|
||||
- [0xaff20, .rodata, ov_SC01_077_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0000, data, tail3]
|
||||
- [0xb0000, data, tail2]
|
||||
- [0xb0018, .rodata, ov_SC01_077_jr_80135888] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb002c, data, tail4]
|
||||
- [0xb002c, data, tail3]
|
||||
- [0xb0030, .rodata, ov_SC01_077_jr_80135A4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0044, data, tail5]
|
||||
- [0xb0044, data, tail4]
|
||||
- [0xb0048, .rodata, ov_SC01_077_jr_80135D20] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb005c, data, tail6]
|
||||
- [0xb005c, data, tail5]
|
||||
- [0xb0098, .rodata, ov_SC01_077_jr_801380E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb00fc, data, tail7]
|
||||
- [0xb00fc, data, tail6]
|
||||
- [0xb01a4, .rodata, ov_SC01_077_o0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0280, data, tail8]
|
||||
- [0xb0280, data, tail7]
|
||||
- [0xb0708, .rodata, ov_SC01_077] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb07c4, data, tail9]
|
||||
- [0xb07c4, data, tail8]
|
||||
- [0xb07dc, .rodata, ov_SC01_077_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0848, data, tail10]
|
||||
- [0xb0848, data, tail9]
|
||||
- [0xb08b8, .rodata, ov_SC01_077_jr_80154C24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb08fc, .rodata, ov_SC01_077_jr_801588CC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0944, data, tail11]
|
||||
- [0xb0944, data, tail10]
|
||||
- [0xb09a4, .rodata, ov_SC01_077_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb09d8, data, tail12]
|
||||
- [0xb09d8, data, tail11]
|
||||
- [0xb09dc, .rodata, ov_SC01_077_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb09f8, data, tail13]
|
||||
- [0xb09f8, data, tail12]
|
||||
- [0xb09fc, .rodata, ov_SC01_077_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0a18, data, tail14]
|
||||
- [0xb0a18, data, tail13]
|
||||
- [0xb0a3c, .rodata, ov_SC01_077_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0a58, data, tail15]
|
||||
- [0xb0a58, data, tail14]
|
||||
- [0xb0a70, .rodata, ov_SC01_077_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0a90, data, tail16]
|
||||
- [0xb0a90, data, tail15]
|
||||
- [0xb0b10, .rodata, ov_SC01_077_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0b24, data, tail17]
|
||||
- [0xb0b24, data, tail16]
|
||||
- [0xb0ccc, .rodata, ov_SC01_077_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0e44, data, tail18]
|
||||
- [0xb0e44, data, tail17]
|
||||
- [0xb0ed4, .rodata, ov_SC01_077_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0f60, data, tail19]
|
||||
- [0xb0f60, data, tail18]
|
||||
- [0xb0f64, .rodata, ov_SC01_077_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0f78, data, tail20]
|
||||
- [0xb0f78, data, tail19]
|
||||
- [0xb1148, .rodata, ov_SC01_077_jr_80182268] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb1168, data, tail21]
|
||||
- [0xb1168, data, tail20]
|
||||
- [0xB29D4, bin, trailing] # final 3 bytes (EOF 0xB29D7 not word-aligned; spimdisasm drops
|
||||
# a trailing partial word and a <4-byte `data` carve emits nothing,
|
||||
# so use `bin` = raw .incbin, byte-exact). Word-aligned overlays omit this.
|
||||
|
||||
+26
-26
@@ -2,11 +2,11 @@
|
||||
|
||||
> Generated by `tools/family_hseq.py` from the 138 overlay sigs + per-overlay src stubs. Ranked by TEMPLATABLE byte-weight (PURE+IMM members × nins × 4). The byte-gate is the arbiter.
|
||||
|
||||
**Fleet (overlays):** 89.8% fn / 82.1% instr / 70.0% distinct-code matched. Unmatched: 36,003 instances / 2,343,811 ins (22,243 distinct classes).
|
||||
**Fleet (overlays):** 89.8% fn / 82.3% instr / 70.0% distinct-code matched. Unmatched: 35,728 instances / 2,320,807 ins (22,242 distinct classes).
|
||||
|
||||
**Tail cross-check (Phase-25 close):** 21,831 tail fns / 1,054,644 ins → 567 h_seq families ≥2, **154 substantial (nins≥80) / 584,966 ins**.
|
||||
**Tail cross-check (Phase-25 close):** 21,830 tail fns / 1,054,519 ins → 567 h_seq families ≥2, **154 substantial (nins≥80) / 584,841 ins**.
|
||||
|
||||
**Full frontier (all unmatched by h_seq):** 2672 target families (≥2 members or a matched sibling) + 3771 singletons (Step-D residue). Substantial: **528 families / 1,175,473 templatable ins**, 63 with a matched sibling (zero-crack). Substantial member classes: 6,775 PURE · 40 IMM · 6 STRUCT-excluded.
|
||||
**Full frontier (all unmatched by h_seq):** 2670 target families (≥2 members or a matched sibling) + 3771 singletons (Step-D residue). Substantial: **526 families / 1,152,469 templatable ins**, 62 with a matched sibling (zero-crack). Substantial member classes: 6,500 PURE · 40 IMM · 6 STRUCT-excluded.
|
||||
|
||||
|
||||
## Top substantial families (by templatable byte-weight)
|
||||
@@ -32,7 +32,7 @@
|
||||
| 17 | 147 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x80177b5c draft-ov077 | 20,286 |
|
||||
| 18 | 136 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x80135260 draft-ov077 | 18,768 |
|
||||
| 19 | 137 | 132 (132/0/0) | 1/132 | per-location | PURE | 6 | · | 0x80133ab0 matched-ov077 | 18,084 |
|
||||
| 20 | 125 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x8012aaac draft-ov077 | 17,250 |
|
||||
| 20 | 125 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | Y | 0x8012aaac matched-ov077 | 17,125 |
|
||||
| 21 | 114 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x8015d1b8 draft-ov077 | 15,732 |
|
||||
| 22 | 111 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x80179b74 draft-ov077 | 15,318 |
|
||||
| 23 | 110 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x801330e0 draft-ov077 | 15,180 |
|
||||
@@ -41,25 +41,25 @@
|
||||
| 26 | 91 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x801789ac draft-ov077 | 12,558 |
|
||||
| 27 | 952 | 13 (7/6/0) | 5/13 | cross-address | IMM | 103 | Y | 0x8017bebc matched | 12,376 |
|
||||
| 28 | 88 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x8016ec0c draft-ov077 | 12,144 |
|
||||
| 29 | 87 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | · | 0x80158638 matched-ov077 | 11,919 |
|
||||
| 30 | 85 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x8016ae5c draft-ov077 | 11,730 |
|
||||
| 31 | 82 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | · | 0x8014cf04 matched | 11,234 |
|
||||
| 32 | 80 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | · | 0x8014d2a0 matched-ov077 | 10,960 |
|
||||
| 33 | 80 | 136 (136/0/0) | 1/136 | per-location | PURE | 2 | · | 0x80143d28 matched-ov077 | 10,880 |
|
||||
| 34 | 195 | 36 (36/0/0) | 11/36 | scattered | PURE | 0 | · | 0x8017c218 modal | 7,020 |
|
||||
| 35 | 299 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | Y | 0x8017fee0 modal | 5,980 |
|
||||
| 36 | 227 | 26 (26/0/0) | 10/26 | scattered | PURE | 0 | · | 0x8017bfec modal | 5,902 |
|
||||
| 37 | 236 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | · | 0x80180520 modal | 4,720 |
|
||||
| 38 | 158 | 26 (26/0/0) | 10/26 | scattered | PURE | 0 | · | 0x8017c378 modal | 4,108 |
|
||||
| 39 | 793 | 5 (5/0/0) | 2/5 | cross-address | PURE | 0 | · | 0x8017d174 modal | 3,965 |
|
||||
| 40 | 246 | 16 (16/0/0) | 6/16 | cross-address | PURE | 0 | · | 0x8017c294 draft-ov077 | 3,936 |
|
||||
| 41 | 766 | 5 (5/0/0) | 3/5 | cross-address | PURE | 0 | · | 0x8017df84 modal | 3,830 |
|
||||
| 42 | 328 | 11 (11/0/0) | 11/11 | scattered | PURE | 0 | · | 0x801833f0 modal | 3,608 |
|
||||
| 43 | 890 | 4 (4/0/0) | 1/4 | per-location | PURE | 134 | Y | 0x80178d40 matched-ov077 | 3,560 |
|
||||
| 44 | 237 | 15 (15/0/0) | 15/15 | scattered | PURE | 0 | · | 0x801832a8 modal | 3,555 |
|
||||
| 45 | 253 | 14 (14/0/0) | 10/14 | scattered | PURE | 0 | · | 0x8017c9bc modal | 3,542 |
|
||||
| 46 | 491 | 7 (7/0/0) | 6/7 | cross-address | PURE | 0 | Y | 0x801863cc modal | 3,437 |
|
||||
| 47 | 166 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | · | 0x8017fac0 modal | 3,320 |
|
||||
| 48 | 92 | 36 (36/0/0) | 11/36 | scattered | PURE | 0 | · | 0x8017c910 modal | 3,312 |
|
||||
| 49 | 90 | 36 (36/0/0) | 11/36 | scattered | PURE | 0 | · | 0x8017c064 modal | 3,240 |
|
||||
| 50 | 293 | 11 (11/0/0) | 4/11 | cross-address | PURE | 0 | · | 0x8017c43c modal | 3,223 |
|
||||
| 29 | 85 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x8016ae5c draft-ov077 | 11,730 |
|
||||
| 30 | 82 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | · | 0x8014cf04 matched | 11,234 |
|
||||
| 31 | 80 | 136 (136/0/0) | 1/136 | per-location | PURE | 2 | · | 0x80143d28 matched-ov077 | 10,880 |
|
||||
| 32 | 195 | 36 (36/0/0) | 11/36 | scattered | PURE | 0 | · | 0x8017c218 modal | 7,020 |
|
||||
| 33 | 299 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | Y | 0x8017fee0 modal | 5,980 |
|
||||
| 34 | 227 | 26 (26/0/0) | 10/26 | scattered | PURE | 0 | · | 0x8017bfec modal | 5,902 |
|
||||
| 35 | 236 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | · | 0x80180520 modal | 4,720 |
|
||||
| 36 | 158 | 26 (26/0/0) | 10/26 | scattered | PURE | 0 | · | 0x8017c378 modal | 4,108 |
|
||||
| 37 | 793 | 5 (5/0/0) | 2/5 | cross-address | PURE | 0 | · | 0x8017d174 modal | 3,965 |
|
||||
| 38 | 246 | 16 (16/0/0) | 6/16 | cross-address | PURE | 0 | · | 0x8017c294 draft-ov077 | 3,936 |
|
||||
| 39 | 766 | 5 (5/0/0) | 3/5 | cross-address | PURE | 0 | · | 0x8017df84 modal | 3,830 |
|
||||
| 40 | 328 | 11 (11/0/0) | 11/11 | scattered | PURE | 0 | · | 0x801833f0 modal | 3,608 |
|
||||
| 41 | 890 | 4 (4/0/0) | 1/4 | per-location | PURE | 134 | Y | 0x80178d40 matched-ov077 | 3,560 |
|
||||
| 42 | 237 | 15 (15/0/0) | 15/15 | scattered | PURE | 0 | · | 0x801832a8 modal | 3,555 |
|
||||
| 43 | 253 | 14 (14/0/0) | 10/14 | scattered | PURE | 0 | · | 0x8017c9bc modal | 3,542 |
|
||||
| 44 | 491 | 7 (7/0/0) | 6/7 | cross-address | PURE | 0 | Y | 0x801863cc modal | 3,437 |
|
||||
| 45 | 166 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | · | 0x8017fac0 modal | 3,320 |
|
||||
| 46 | 92 | 36 (36/0/0) | 11/36 | scattered | PURE | 0 | · | 0x8017c910 modal | 3,312 |
|
||||
| 47 | 90 | 36 (36/0/0) | 11/36 | scattered | PURE | 0 | · | 0x8017c064 modal | 3,240 |
|
||||
| 48 | 293 | 11 (11/0/0) | 4/11 | cross-address | PURE | 0 | · | 0x8017c43c modal | 3,223 |
|
||||
| 49 | 770 | 4 (4/0/0) | 1/4 | per-location | PURE | 134 | · | 0x80144b9c matched-ov077 | 3,080 |
|
||||
| 50 | 611 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | · | 0x80186e24 modal | 3,055 |
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
|
||||
|
||||
# THREE progress metrics (all matter — see the labels):
|
||||
FLEET fn-count byte-ident: 316936 / 353720 = 89.60% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 10759428 / 13141652 = 81.9% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 3902527 / 5634875 = 69.3% (65202/87459 unique fns; the DISTINCT-RE number)
|
||||
FLEET fn-count byte-ident: 316937 / 353720 = 89.60% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 10759553 / 13141652 = 81.9% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 3902652 / 5634875 = 69.3% (65203/87459 unique fns; the DISTINCT-RE number)
|
||||
MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10758992 / 13081451 = 82.2%)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10759117 / 13081451 = 82.2%)
|
||||
|
||||
FLEET REAL substantive : 315081 (of which dedup-shared 239530 via 1886 groups / 239604 instances)
|
||||
FLEET REAL substantive : 315082 (of which dedup-shared 239530 via 1886 groups / 239604 instances)
|
||||
FLEET LINKED PsyQ objs : 959
|
||||
FLEET NON_MATCHING : 7 (0 in any default build — G4)
|
||||
FLEET INCLUDE_ASM stubs : 36777
|
||||
FLEET INCLUDE_ASM stubs : 36776
|
||||
FLEET matchable : 353720
|
||||
|
||||
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|
||||
@@ -28,7 +28,7 @@ FLEET matchable : 353720
|
||||
| ov_SC01_008 | 2252 | 1734 | 0 | 2254 | 2426 | 92.9% |
|
||||
| ov_SC01_009 | 2278 | 1735 | 0 | 2279 | 2507 | 90.9% |
|
||||
| ov_SC01_074 | 2256 | 1735 | 0 | 2258 | 2425 | 93.1% |
|
||||
| ov_SC01_077 | 2436 | 1702 | 0 | 2438 | 2585 | 94.3% |
|
||||
| ov_SC01_077 | 2437 | 1702 | 0 | 2439 | 2585 | 94.4% |
|
||||
| ov_SC01_080 | 2294 | 1738 | 0 | 2294 | 2512 | 91.3% |
|
||||
| ov_SC01_084 | 2301 | 1738 | 0 | 2306 | 2579 | 89.4% |
|
||||
| ov_SC02_000 | 2354 | 1773 | 0 | 2354 | 2683 | 87.7% |
|
||||
|
||||
@@ -715,7 +715,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_8017EF34;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -717,7 +717,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_80183B84;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -723,7 +723,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_8017F548;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -718,7 +718,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_801826DC;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -237,7 +237,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -240,7 +240,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -240,7 +240,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -240,7 +240,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -237,7 +237,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -242,7 +242,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -242,7 +242,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -718,7 +718,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_801826DC;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -237,7 +237,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -240,7 +240,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -240,7 +240,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -240,7 +240,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -237,7 +237,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -242,7 +242,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -242,7 +242,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -723,7 +723,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_8017FABC;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -723,7 +723,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_80182CA4;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -723,7 +723,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_8017E924;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -808,9 +808,181 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012A908 (src/shared) */
|
||||
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077_a", func_8012AAAC);
|
||||
// @class: schedule
|
||||
// @stuck: none — MATCH (125 ins). Round-3 re-verification 2026-07-27: relocs resolved
|
||||
// mechanically (7/7 jal, 8/8 j, 2/2 hi-lo) and the 50-word jtbl diffed 50/50 against
|
||||
// tail2.data.s; all 3 levers refuted-as-variants. The only residual is the §81 jr/jtbl
|
||||
// BANKING floor (symcheck MISSING jtbl_801D7FB0 is a jr false positive — gcc emits its own
|
||||
// table with a section-relative HI16/LO16, so the splat name can never appear in the draft
|
||||
// object's relocs). Not a body defect. See "BANKING" below.
|
||||
/*
|
||||
* ── RE-VERIFICATION (rounds 2 AND 3, independent re-derivations from the .s; §88e discipline) ───
|
||||
* match_one : MATCH (125 ins). .text = 0x1F4 = 500 B = 125 ins — the exact target size, so this
|
||||
* is NOT a §83a length-drift masking a bad count.
|
||||
* relocs : ROUND 3 resolved them MECHANICALLY (objcopy the sections, decode the implicit
|
||||
* MIPS-REL addends — the §84 trap / §88f gate). 7× R_MIPS_26 -> func_8012AAAC, all
|
||||
* addend 0, at .text +B4/C4/100/124/158/1AC/178 — the target's 7 `jal func_8012AAAC`
|
||||
* offsets EXACTLY. 8× R_MIPS_26 -> .text, every one resolving to 0x8012AC84, at
|
||||
* +88/BC/D8/108/12C/164/18C/1B4 — the target's 8 `j .L8012AC84` offsets EXACTLY.
|
||||
* 1× HI16 +1× LO16 -> .rodata at +60/+68 (target's lui/lw), combined addend 0.
|
||||
* jump tbl : gcc's own .rodata is 0xC8 = 200 B = 50 words; ROUND 3 decoded all 50 and diffed
|
||||
* them against asm/ov_SC01_077/data/tail2.data.s word for word —
|
||||
* [0]=8012AC18, [1..44]=8012AC84 (default ×44), [45]=8012AC40, [46]=8012AB8C,
|
||||
* [47]=8012ABBC, [48]=8012AB24, [49]=8012AB3C. 50/50 identical.
|
||||
* ROUND 3 re-tested BOTH inherited levers as live variants (not assumed) and added a THIRD
|
||||
* refutation, V3 below — the one a naive re-derivation actually lands on.
|
||||
*
|
||||
* Script/animation-command interpreter (recursive). ptr = arg0->0x90 + arg0->0x94*8, an 8-byte
|
||||
* command record; the s16 at +4 is the opcode. opcode >= 0 -> emit (arg0->0x20)->0x20 = ptr->w0
|
||||
* and latch arg0->0x98; opcode < 0 -> a 6-way switch on the negative opcode. Source case ORDER
|
||||
* (-2, -1, -4, -3, -50, -5) is fixed by the target's block layout: gcc-2.7.2 lays switch case
|
||||
* bodies in SOURCE order, and the target's blocks run 0x8012AB24, AB3C, AB8C, ABBC, AC18, AC40.
|
||||
*
|
||||
* TWO BYTE-PROVEN CODEGEN LEVERS (both needed; 16 -> 2 -> 0 mismatches):
|
||||
* 1. case -1 must be spelled `if (link != 0) { <pop-block>; break; } <else-code>` with the shared
|
||||
* `pop:` label INSIDE the if-body (case -2 jumps into it). The inverse spelling
|
||||
* (`if (link == 0) { ... break; } pop: ...`) inverts the branch polarity and lays the 0x4000
|
||||
* tail inline instead of out-of-line.
|
||||
* RE-TESTED 2026-07-27: the inverse spelling gives DIFF 14 mismatched, OPCODE-MIXED
|
||||
* (branch,width) — idx 32/38 flip bnez/beqz and the whole pop-block shifts. CONFIRMED.
|
||||
* (Note the shared `pop:` tail contains a CALL, so per §88a `cross_jump` will NOT factor it for
|
||||
* you — the explicit `goto` is load-bearing, not cosmetic.)
|
||||
* 2. cookbook §49-variant / sched.md:38 (birthing_insn_p, REG_N_SETS==1 -> max_priority ->
|
||||
* sunk late by the BACKWARD sched1). The `ptr->w0` load in case -3 must be a *distinct* local
|
||||
* from the one in case -4: sharing one variable makes REG_N_SETS==2, kills its boost, and the
|
||||
* two loads `lw $s0,0x90($s1)` / `lw $v1,0x0($a0)` come out transposed. With BOTH single-set,
|
||||
* they tie at max_priority and the LUID (source-order) tie-break -- `saved` declared/assigned
|
||||
* FIRST, `next` second -- puts them in target order at zero byte cost.
|
||||
* RE-TESTED 2026-07-27: folding `next` into `head` gives DIFF 2 mismatched, SCHEDULE-REORDER,
|
||||
* idx 77/78 exactly the predicted transposition. CONFIRMED — and this is the trap an
|
||||
* independent re-derivation falls into, since one temp is the obvious spelling.
|
||||
*
|
||||
* 3. NEW, round 3 — the `goto pop` is REQUIRED; do NOT write case -2's tail longhand.
|
||||
* V3 test: delete the `goto pop` and duplicate the 6-statement pop-block into case -2 (the
|
||||
* obvious, goto-free spelling any independent re-derivation writes first) => DIFF **126 ins**
|
||||
* vs 125, LENGTH-DRIFT/1, 81 mismatched. gcc-2.7.2 leaves the duplicate standing because the
|
||||
* common suffix contains a `jal` — this is §88a reproduced from a second, independent function
|
||||
* (the §88a evidence was all func_8017D2DC before). ⇒ For this 138-member family the explicit
|
||||
* `goto` into a call-bearing shared tail is a TEMPLATE INVARIANT, not a stylistic choice.
|
||||
*
|
||||
* ── BANKING (§81 carve chain) — symcheck reports MISSING jtbl_801D7FB0; that is the EXPECTED jr
|
||||
* floor, not an invented/dropped symbol: gcc emits its own table into .rodata addressed by a
|
||||
* section-relative HI16/LO16, so the splat name is never referenced. Table content verified
|
||||
* 50/50 above. Banking still needs jr_isolate_all --only + jtbl_carve + harvest_verify.
|
||||
*
|
||||
* ⚠ MEASURED HAZARD for whoever runs the carve — `jtbl_carve.jtbl_range()` will TRUNCATE this
|
||||
* table. It computes `end = the next data dlabel` over `all_data_labels()`, which collects BOTH
|
||||
* `jtbl_` and `D_` labels. splat split this ONE 50-word table across two dlabels in
|
||||
* asm/ov_SC01_077/data/tail2.data.s:
|
||||
* dlabel jtbl_801D7FB0 0x801D7FB0..0x801D8020 28 words
|
||||
* dlabel D_801D8020 0x801D8020..0x801D8078 22 words (zero xrefs anywhere in tree)
|
||||
* so jtbl_range() returns end = 0x801D8020 => a 28-word (112 B) carve for an object that supplies
|
||||
* 200 B of .rodata. The trailing-zero trim cannot rescue it (word[27] = 0x8012AC84, non-zero).
|
||||
*
|
||||
* THE TRUE RANGE is the WHOLE `tail2` data piece: vram 0x801D7FB0..0x801D8078 = file
|
||||
* 0xAFE58..0xAFF20 = 200 B = 50 words, confirmed three independent ways: the function's own
|
||||
* `sltiu $v0, $v1, 0x32` = 50 entries; gcc's emitted .rodata = 0xC8 = 50 words; and the splat
|
||||
* config, where `- [0xafe58, data, tail2]` runs exactly up to the already-carved
|
||||
* `- [0xaff20, .rodata, ov_SC01_077_jr_8012ACE0]`. i.e. tail2 IS this table and nothing else.
|
||||
*
|
||||
* CONSEQUENCE, and it is the good kind: func_8012AAAC lives in subseg ov_SC01_077_a, which
|
||||
* ALREADY holds a .rodata carve at `- [0xafe44, .rodata, ov_SC01_077_a]` ending exactly at
|
||||
* 0xafe58. Carved correctly, the two are ADJACENT and same-subseg, so §8a case (a) MERGE applies
|
||||
* and ov_SC01_077_a keeps ONE contiguous .rodata run 0xAFE44..0xAFF20 — no §81 NON-CONTIGUOUS
|
||||
* refusal, no jr_isolate_all needed for contiguity. Base 0x801D7FB0 is 8-aligned, so gcc's
|
||||
* `.rdata .align 3` lands with no pad (JTBL_PADS stays 0).
|
||||
*
|
||||
* ⇒ Either drop the spurious `D_801D8020` dlabel before running jtbl_carve, or teach
|
||||
* jtbl_range() to skip a `D_` label that has no xref and whose predecessor jtbl's entry count is
|
||||
* still short of the function's `sltiu` limit. This is a §84-class blind spot: `match_one` is
|
||||
* structurally incapable of seeing it, and the symptom would surface as a whole-binary DIFF.
|
||||
*/
|
||||
#include "common.h"
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC(void *arg0);
|
||||
|
||||
void func_8012AAAC(void *arg0) {
|
||||
void *ptr;
|
||||
s32 link;
|
||||
s32 next;
|
||||
s32 saved;
|
||||
s32 cnt;
|
||||
s32 back;
|
||||
s32 head;
|
||||
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
|
||||
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
|
||||
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
|
||||
switch (M2C_FIELD(ptr, s16 *, 4)) {
|
||||
case -2:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link == 0) {
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = 0;
|
||||
break;
|
||||
}
|
||||
goto pop;
|
||||
case -1:
|
||||
link = M2C_FIELD(arg0, s32 *, 0x9C);
|
||||
if (link != 0) {
|
||||
pop:
|
||||
back = M2C_FIELD(arg0, s16 *, 0x9A);
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = link;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = back;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
|
||||
break;
|
||||
case -4:
|
||||
head = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = head;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
case -3:
|
||||
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
|
||||
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
saved = M2C_FIELD(arg0, s32 *, 0x90);
|
||||
next = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, s32 *, 0x90) = next;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
|
||||
break;
|
||||
case -50:
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
|
||||
func_8012AAAC(arg0);
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
|
||||
break;
|
||||
case -5:
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
|
||||
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
|
||||
func_8012AAAC(arg0);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
|
||||
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_80186E48;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
@@ -819,5 +991,5 @@ void func_8012ACA0(void *arg0) {
|
||||
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
|
||||
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
|
||||
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
|
||||
func_8012AAAC();
|
||||
((void (*)(void))func_8012AAAC)();
|
||||
}
|
||||
|
||||
@@ -276,7 +276,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -280,7 +280,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -280,7 +280,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -280,7 +280,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -280,7 +280,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -723,7 +723,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_80183884;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -723,7 +723,7 @@ DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012A988 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084", func_8012AAAC);
|
||||
|
||||
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern M2C_UNK D_80186B78;
|
||||
|
||||
void func_8012ACA0(void *arg0) {
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -239,7 +239,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -236,7 +236,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -238,7 +238,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
@@ -241,7 +241,7 @@ extern s16 func_8012A79C(s16 *a0, s16 *a1);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 ratan2(s32 a0, s32 a1);
|
||||
extern void func_8012A7D4(void *arg0, void *arg1);
|
||||
extern void func_8012AAAC(void);
|
||||
extern void func_8012AAAC();
|
||||
extern void func_8012A828(s32 a0, void * a1);
|
||||
extern int func_8012ACE0(void *a0);
|
||||
extern void func_8012A860(void *a0, int a1);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user