mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-29 15:18:24 -04:00
feat(phase-30 S47-W1b/G2): 3 retries banked, 2 new rules; main signed for the first time
W1b — the 3 targets whose agents died on API rate limiting, retried with cookbook §160 in the prompt: func_801EFBF4 (reach 12), func_801EFDC8 (12), func_8018CC40 (10, jr). 3/3 confirmed by an independent verifier, all banked, R22 clean-fleet 213 passed / 0 failed of 213. func_8018CC40 failed the first gate with `too many arguments to function func_80178970` — which its own crack agent had PREDICTED in its report, naming the §17a-1 remedy. Dropped the draft's empty-paren externs and cast 6 call sites instead; banked. Read the agent's integration notes before diagnosing a gate failure — it has already seen the TU. Cookbook §161a-c (index 469 sections): §161a case 0: break; is LOAD-BEARING when a jump table is indexed from zero. The natural case 1..5 makes gcc-2.7.2 pick minval=1, emit `addiu $v1,-1`, and shift every table index — 58 of 77 mismatched on a byte-perfect body. Tell: the table's FIRST entry points at the function's own end address. Family-wide (10 members). §161b aliasing a parameter into a local can force a SECOND callee-saved register (+8 frame, +3 ins) even when uses are mutually exclusive. Suspect it before reaching for register pins. §161c loose-prototype engine helpers: don't fight the TU's (void) decl, cast at the call site. G2 — THE MAIN EXPERIMENT. family_hseq excludes main as "structurally barren — zero h_exact overlap". True and irrelevant: an h_exact claim guarding an h_seq tool. There is not even a sig-main target — main had never been signed for this pipeline. Signed it (2,002 fns, seeded from splat boundaries via corpus.stubs rather than --bootstrap, which glues functions around jtbl dispatch and would have corrupted the hashes under test). Result: main is ~85% singleton work, not 100%. internal h_seq families (>=2): 207 families / 748 fns / 11,537 ins (13.7%) shapes shared with the fleet: 161 fns / 1,346 ins (1.6%) genuine x1 remainder: ~71,034 ins (84.6%) IMMEDIATELY ACTIONABLE: 44 classes / 151 main functions / 1,239 ins already have a matched exemplar in the fleet — free propagation, invisible only because main is not in the map. Long-term: 748 of main's 2,002 functions (37%) are templatable once one exemplar per family is cracked, which refutes "2,002 independent cracks" as the planning assumption for the 79k-ins tail. OPEN, deliberately not done unilaterally: adding a sig-main target and dropping main's exclusion from family_hseq.load() changes a fleet-shared oracle every targeting tool reads. Needs Drew's call.
This commit is contained in:
+1
-1
@@ -416,7 +416,7 @@ ov_SC04_018_ELF := $(ov_SC04_018_OUT).elf
|
||||
ov_SC04_018_MAPFILE := $(ov_SC04_018_OUT).map
|
||||
ov_SC04_018_LD_SCRIPT := $(ov_SC04_018_OUT).ld
|
||||
ov_SC04_018_SPLAT_YAML := config/splat.ov_SC04_018.yaml
|
||||
ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018.o,ov_SC04_018_jr_8012ACE0.o,tail2.data.o,ov_SC04_018_jr_80135888.o,tail3.data.o,ov_SC04_018_jr_80135A4C.o,tail4.data.o,ov_SC04_018_jr_80135D20.o,tail5.data.o,ov_SC04_018_jr_801380E0.o,ov_SC04_018_o0c.o,tail6.data.o,ov_SC04_018_jr_8013F350.o,tail7.data.o,ov_SC04_018_jr_8013FFD8.o,tail8.data.o,ov_SC04_018_jr_80140608.o,tail9.data.o,ov_SC04_018_jr_8015444C.o,ov_SC04_018_jr_80154C24.o,ov_SC04_018_jr_801588CC.o,ov_SC04_018_jr_80159C84.o,tail10.data.o,ov_SC04_018_jr_8015A3C8.o,tail11.data.o,ov_SC04_018_jr_8015AE2C.o,tail12.data.o,ov_SC04_018_jr_8015C32C.o,tail13.data.o,ov_SC04_018_jr_8016AB6C.o,tail14.data.o,ov_SC04_018_jr_80171B4C.o,ov_SC04_018_jr_801734BC.o,tail15.data.o,ov_SC04_018_jr_801789AC.o,ov_SC04_018_jr_80178D40.o,tail16.data.o,ov_SC04_018_jr_8017A4AC.o,tail17.data.o,ov_SC04_018_jr_8017AE2C.o,tail18.data.o,ov_SC04_018_jr_80185D70.o,tail19.data.o,ov_SC04_018_jr_80186570.o,tail20.data.o,ov_SC04_018_jr_801878E8.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018.o,ov_SC04_018_jr_8012ACE0.o,tail2.data.o,ov_SC04_018_jr_80135888.o,tail3.data.o,ov_SC04_018_jr_80135A4C.o,tail4.data.o,ov_SC04_018_jr_80135D20.o,tail5.data.o,ov_SC04_018_jr_801380E0.o,ov_SC04_018_o0c.o,tail6.data.o,ov_SC04_018_jr_8013F350.o,tail7.data.o,ov_SC04_018_jr_8013FFD8.o,tail8.data.o,ov_SC04_018_jr_80140608.o,tail9.data.o,ov_SC04_018_jr_8015444C.o,ov_SC04_018_jr_80154C24.o,ov_SC04_018_jr_801588CC.o,ov_SC04_018_jr_80159C84.o,tail10.data.o,ov_SC04_018_jr_8015A3C8.o,tail11.data.o,ov_SC04_018_jr_8015AE2C.o,tail12.data.o,ov_SC04_018_jr_8015C32C.o,tail13.data.o,ov_SC04_018_jr_8016AB6C.o,tail14.data.o,ov_SC04_018_jr_80171B4C.o,ov_SC04_018_jr_801734BC.o,tail15.data.o,ov_SC04_018_jr_801789AC.o,ov_SC04_018_jr_80178D40.o,tail16.data.o,ov_SC04_018_jr_8017A4AC.o,tail17.data.o,ov_SC04_018_jr_8017AE2C.o,tail18.data.o,ov_SC04_018_jr_80185D70.o,tail19.data.o,ov_SC04_018_jr_80186570.o,tail20.data.o,ov_SC04_018_jr_801878E8.o,tail21.data.o,ov_SC04_018_jr_8018CC40.o,tail22.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC04_018/ov_SC04_018.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC04_018/ov_SC04_018_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
|
||||
build/src/ov_SC04_018/ov_SC04_018_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
|
||||
@@ -123,6 +123,7 @@ segments:
|
||||
- [0x5dc18, c, ov_SC04_018_jr_80185D70]
|
||||
- [0x5e418, c, ov_SC04_018_jr_80186570]
|
||||
- [0x5f790, c, ov_SC04_018_jr_801878E8]
|
||||
- [0x64ae8, c, ov_SC04_018_jr_8018CC40]
|
||||
- [0x64dd0, data, tail]
|
||||
- [0xbc2e8, .rodata, ov_SC04_018] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbc3c4, .rodata, ov_SC04_018_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
@@ -171,6 +172,8 @@ segments:
|
||||
- [0xbd778, data, tail20]
|
||||
- [0xbd7ec, .rodata, ov_SC04_018_jr_801878E8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbd824, data, tail21]
|
||||
- [0xbd8a0, .rodata, ov_SC04_018_jr_8018CC40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbd8b8, data, tail22]
|
||||
- [0xBF9CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xBF9CF] # EOF marker = the 0.4.dec byte length
|
||||
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
|
||||
|
||||
+792
-791
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
|
||||
> **Generated by `tools/cookbook_index.py` — do not hand-edit** (R33). Regenerate after adding a cookbook section.
|
||||
>
|
||||
> `docs/matching-cookbook.md` is ~716 KB / 468 sections. Grepping it blind is how three P30 wave-1 agents each "discovered" an idiom that was already written down. **Start here, then read the section.** A section appears under every symptom it addresses.
|
||||
> `docs/matching-cookbook.md` is ~716 KB / 469 sections. Grepping it blind is how three P30 wave-1 agents each "discovered" an idiom that was already written down. **Start here, then read the section.** A section appears under every symptom it addresses.
|
||||
|
||||
**How to use:** name what you SEE in the diff (a stolen delay slot, an extra `la`, a swapped register pair, a `conflicting types` error), find that symptom below, read those sections first. If nothing fits, THEN grind — and add a section when you win.
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
- **§3-C.** — Inner-block declaration does NOT delay slot allocation — BYTE-REFUTED <sub>L10058</sub>
|
||||
- **§159** — THE DECLARATION AXIS: conform to byte-truth, and make every guard state its COVERAGE (P30 S47; ~10,930 sites across 8 axes, fleet byte-identical) <sub>L10818</sub>
|
||||
|
||||
### jump tables & switches (26)
|
||||
### jump tables & switches (27)
|
||||
|
||||
- **§8** — rodata island (compiler jump tables) — the `.data→.rodata→.data` sandwich (Phase 7) <sub>L320</sub>
|
||||
- **§8a** — rodata island in a flat OVERLAY — the tail sandwich, per matched jr-function (Phase 26 — PoC PROVEN) <sub>L342</sub>
|
||||
@@ -283,6 +283,7 @@
|
||||
- **§132** — The `JR-PAIR-IN-ONE-O0-OBJECT` "wall" was TWO instrument defects: a merged-double span the carve could not see, and a truncated object no rule deleted (P30 S29, `func_8013B83C` + `func_8013BD74`) <sub>L8563</sub>
|
||||
- **§132b** — When the span's already-matched owner is ITSELF multi-switch: `--span-rel` (P30 S1, `func_8014032C`) <sub>L8653</sub>
|
||||
- **§139** — A GATE THAT GREPS FOR VERDICTS MUST ASSERT 1:1 ACCOUNTING; and a `--src` filter must not survive a carve (P30 S38, wave 6: 10 of 16 drafts vanished) <sub>L9584</sub>
|
||||
- **§161** — THE RETRY-WAVE HARVEST: a jump table indexed from zero, and two allocator traps (P30 S47) <sub>L10959</sub>
|
||||
|
||||
### optimisation level (-O0/-O2) (12)
|
||||
|
||||
@@ -422,7 +423,7 @@
|
||||
- **§3-The** — same swallow, twice more, in the integration spine <sub>L9699</sub>
|
||||
- **§3-A.** — Payload word0 is a global MODULE ID; code starts after the header <sub>L10517</sub>
|
||||
|
||||
### build graph, splat & the harness (103)
|
||||
### build graph, splat & the harness (104)
|
||||
|
||||
- **§4** — Flag/toolchain gotchas <sub>L190</sub>
|
||||
- **Build** — mechanism — per-file opt override (splat resegmentation) <sub>L288</sub>
|
||||
@@ -527,6 +528,7 @@
|
||||
- **§156** — an ORPHANED reconcile poisons the fleet: `dedup_propagate`'s kept edit (S45 p6/p7) <sub>L10630</sub>
|
||||
- **§158** — The RANGE-EXTENDER: a fourth zero-emission asm lever completes the allocno toolkit (P30 S46 tier-3, `func_8017CE58`, 733 ins) <sub>L10702</sub>
|
||||
- **§160** — THE REACH-15 WAVE HARVEST: an align-1 block move, and the instrument that called it a wall (P30 S47) <sub>L10883</sub>
|
||||
- **§161** — THE RETRY-WAVE HARVEST: a jump table indexed from zero, and two allocator traps (P30 S47) <sub>L10959</sub>
|
||||
|
||||
### process, measurement & doctrine (64)
|
||||
|
||||
@@ -1214,3 +1216,4 @@
|
||||
- **§156** — THE PREFERENCE-DONOR MERGE: cross-region variable reuse is what fills a0-a3, and a call-arg use in ONE region steers the fill in ALL of them (P30 S46 tier-3, `func_80186E24`, 611 ins: 236-off "S11 regalloc-order" → MATCH, zero new pins) <sub>L10762</sub>
|
||||
- **§159** — THE DECLARATION AXIS: conform to byte-truth, and make every guard state its COVERAGE (P30 S47; ~10,930 sites across 8 axes, fleet byte-identical) <sub>L10818</sub>
|
||||
- **§160** — THE REACH-15 WAVE HARVEST: an align-1 block move, and the instrument that called it a wall (P30 S47) <sub>L10883</sub>
|
||||
- **§161** — THE RETRY-WAVE HARVEST: a jump table indexed from zero, and two allocator traps (P30 S47) <sub>L10959</sub>
|
||||
|
||||
+53
-53
@@ -2,13 +2,13 @@
|
||||
|
||||
> Generated by `tools/family_hseq.py` from the 212 overlay sigs + per-overlay src stubs. Ranked by TEMPLATABLE byte-weight (PURE+IMM members × nins × 4). The byte-gate is the arbiter.
|
||||
>
|
||||
> **Scope: the 212 OVERLAYS only** (no main, no resident) · generated at HEAD `commit:1567` · stub set derived from `corpus.stubs` — the same oracle `progress.py` counts, so same-tree overlay totals agree by construction; compare digests only at the same HEAD.
|
||||
> **Scope: the 212 OVERLAYS only** (no main, no resident) · generated at HEAD `commit:1569` · stub set derived from `corpus.stubs` — the same oracle `progress.py` counts, so same-tree overlay totals agree by construction; compare digests only at the same HEAD.
|
||||
|
||||
**Fleet (overlays):** 96.5% fn / 94.9% instr / 89.4% distinct-code matched. Unmatched: 12,669 instances / 685,333 ins (10,812 distinct classes).
|
||||
**Fleet (overlays):** 96.5% fn / 94.9% instr / 89.5% distinct-code matched. Unmatched: 12,528 instances / 679,205 ins (10,701 distinct classes).
|
||||
|
||||
**Tail cross-check (Phase-25 close):** 8,047 tail fns / 435,036 ins → 519 h_seq families ≥2, **139 substantial (nins≥80) / 82,716 ins**.
|
||||
**Tail cross-check (Phase-25 close):** 8,002 tail fns / 431,632 ins → 517 h_seq families ≥2, **138 substantial (nins≥80) / 79,818 ins**.
|
||||
|
||||
**Full frontier (all unmatched by h_seq):** 2188 target families (≥2 members or a matched sibling) + 4513 singletons (Step-D residue). Substantial: **383 families / 178,860 templatable ins**, 72 with a matched sibling (zero-crack). Substantial member classes: 1,152 PURE · 33 IMM · 6 STRUCT-excluded.
|
||||
**Full frontier (all unmatched by h_seq):** 2182 target families (≥2 members or a matched sibling) + 4513 singletons (Step-D residue). Substantial: **382 families / 175,962 templatable ins**, 71 with a matched sibling (zero-crack). Substantial member classes: 1,129 PURE · 33 IMM · 6 STRUCT-excluded.
|
||||
|
||||
|
||||
## Top substantial families (by templatable byte-weight)
|
||||
@@ -16,52 +16,52 @@
|
||||
| # | nins | members (P/I/S) | #addr/#ov | tag | class | matched | jr | exemplar | templ. ins |
|
||||
|--:|--:|--|--|--|--|--:|:-:|--|--:|
|
||||
| 1 | 246 | 16 (16/0/0) | 6/16 | cross-address | PURE | 0 | · | 0x8017c294 draft-ov077 | 3,936 |
|
||||
| 2 | 126 | 23 (23/0/0) | 11/23 | scattered | PURE | 1 | · | 0x801eded4 matched | 2,898 |
|
||||
| 3 | 551 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80189540 modal | 2,755 |
|
||||
| 4 | 611 | 4 (4/0/0) | 4/4 | cross-address | PURE | 1 | · | 0x80186e24 matched | 2,444 |
|
||||
| 5 | 770 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | · | 0x80144b9c matched-ov077 | 2,310 |
|
||||
| 6 | 407 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017c3bc modal | 2,035 |
|
||||
| 7 | 562 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015ae2c matched-ov077 | 1,686 |
|
||||
| 8 | 281 | 6 (6/0/0) | 6/6 | cross-address | PURE | 0 | Y | 0x80186270 modal | 1,686 |
|
||||
| 9 | 557 | 3 (3/0/0) | 3/3 | cross-address | PURE | 2 | Y | 0x80189030 matched | 1,671 |
|
||||
| 10 | 326 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017d730 modal | 1,630 |
|
||||
| 11 | 536 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8017a4ac matched-ov077 | 1,608 |
|
||||
| 12 | 493 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015a3c8 matched-ov077 | 1,479 |
|
||||
| 13 | 490 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8013f350 matched-ov077 | 1,470 |
|
||||
| 14 | 291 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017d2a4 modal | 1,455 |
|
||||
| 15 | 470 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | Y | 0x80191320 modal | 1,410 |
|
||||
| 16 | 279 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x8017f2d4 modal | 1,395 |
|
||||
| 17 | 188 | 7 (7/0/0) | 1/7 | per-location | PURE | 134 | Y | 0x8016ab6c matched-ov077 | 1,316 |
|
||||
| 18 | 438 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x801380e0 matched-ov077 | 1,314 |
|
||||
| 19 | 187 | 7 (7/0/0) | 1/7 | per-location | PURE | 134 | · | 0x8013dd68 matched-ov077 | 1,309 |
|
||||
| 20 | 424 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x80131340 matched-ov077 | 1,272 |
|
||||
| 21 | 254 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80188e1c modal | 1,270 |
|
||||
| 22 | 198 | 6 (6/0/0) | 6/6 | cross-address | PURE | 0 | Y | 0x80185f58 modal | 1,188 |
|
||||
| 23 | 385 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | Y | 0x8018ff98 modal | 1,155 |
|
||||
| 24 | 185 | 6 (6/0/0) | 6/6 | cross-address | PURE | 0 | Y | 0x80187aec modal | 1,110 |
|
||||
| 25 | 218 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017cf3c modal | 1,090 |
|
||||
| 26 | 363 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015444c matched-ov077 | 1,089 |
|
||||
| 27 | 102 | 10 (0/10/0) | 9/10 | scattered | IMM | 78 | · | 0x8017d290 matched | 1,020 |
|
||||
| 28 | 337 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x80159c84 matched-ov077 | 1,011 |
|
||||
| 29 | 329 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8013c414 matched-ov077 | 987 |
|
||||
| 30 | 324 | 3 (3/0/0) | 2/3 | cross-address | PURE | 0 | Y | 0x80183324 draft-ov077 | 972 |
|
||||
| 31 | 188 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | · | 0x8017cbc8 modal | 940 |
|
||||
| 32 | 312 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | · | 0x8013faf8 matched-ov077 | 936 |
|
||||
| 33 | 187 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | · | 0x8017df40 modal | 935 |
|
||||
| 34 | 231 | 4 (4/0/0) | 4/4 | cross-address | PURE | 0 | Y | 0x8017f83c modal | 924 |
|
||||
| 35 | 890 | 1 (1/0/0) | 1/1 | per-location | PURE | 140 | Y | 0x80178d40 matched-ov077 | 890 |
|
||||
| 36 | 127 | 7 (7/0/0) | 1/7 | per-location | PURE | 134 | · | 0x80145cec matched-ov077 | 889 |
|
||||
| 37 | 289 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x80135eb0 matched-ov077 | 867 |
|
||||
| 38 | 95 | 9 (9/0/0) | 9/9 | scattered | PURE | 1 | Y | 0x80185d70 matched | 855 |
|
||||
| 39 | 213 | 4 (4/0/0) | 1/4 | per-location | PURE | 137 | Y | 0x8013ffd8 matched-ov077 | 852 |
|
||||
| 40 | 166 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80188b84 modal | 830 |
|
||||
| 41 | 165 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x801818f0 modal | 825 |
|
||||
| 42 | 272 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8013b83c matched-ov077 | 816 |
|
||||
| 43 | 271 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015b950 matched-ov077 | 813 |
|
||||
| 44 | 406 | 2 (2/0/0) | 2/2 | cross-address | PURE | 0 | Y | 0x80184938 modal | 812 |
|
||||
| 45 | 266 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | · | 0x80130d48 matched-ov077 | 798 |
|
||||
| 46 | 196 | 4 (4/0/0) | 4/4 | cross-address | PURE | 0 | Y | 0x8017ffd0 modal | 784 |
|
||||
| 47 | 257 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | · | 0x80192b60 modal | 771 |
|
||||
| 48 | 255 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | · | 0x8018e9bc modal | 765 |
|
||||
| 49 | 254 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | · | 0x80192768 modal | 762 |
|
||||
| 50 | 251 | 3 (3/0/0) | 3/3 | cross-address | PURE | 3 | Y | 0x80180b04 matched | 753 |
|
||||
| 2 | 551 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80189540 modal | 2,755 |
|
||||
| 3 | 611 | 4 (4/0/0) | 4/4 | cross-address | PURE | 1 | · | 0x80186e24 matched | 2,444 |
|
||||
| 4 | 770 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | · | 0x80144b9c matched-ov077 | 2,310 |
|
||||
| 5 | 407 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017c3bc modal | 2,035 |
|
||||
| 6 | 562 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015ae2c matched-ov077 | 1,686 |
|
||||
| 7 | 281 | 6 (6/0/0) | 6/6 | cross-address | PURE | 0 | Y | 0x80186270 modal | 1,686 |
|
||||
| 8 | 557 | 3 (3/0/0) | 3/3 | cross-address | PURE | 2 | Y | 0x80189030 matched | 1,671 |
|
||||
| 9 | 326 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017d730 modal | 1,630 |
|
||||
| 10 | 536 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8017a4ac matched-ov077 | 1,608 |
|
||||
| 11 | 493 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015a3c8 matched-ov077 | 1,479 |
|
||||
| 12 | 490 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8013f350 matched-ov077 | 1,470 |
|
||||
| 13 | 291 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017d2a4 modal | 1,455 |
|
||||
| 14 | 470 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | Y | 0x80191320 modal | 1,410 |
|
||||
| 15 | 279 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x8017f2d4 modal | 1,395 |
|
||||
| 16 | 188 | 7 (7/0/0) | 1/7 | per-location | PURE | 134 | Y | 0x8016ab6c matched-ov077 | 1,316 |
|
||||
| 17 | 438 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x801380e0 matched-ov077 | 1,314 |
|
||||
| 18 | 187 | 7 (7/0/0) | 1/7 | per-location | PURE | 134 | · | 0x8013dd68 matched-ov077 | 1,309 |
|
||||
| 19 | 424 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x80131340 matched-ov077 | 1,272 |
|
||||
| 20 | 254 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80188e1c modal | 1,270 |
|
||||
| 21 | 198 | 6 (6/0/0) | 6/6 | cross-address | PURE | 0 | Y | 0x80185f58 modal | 1,188 |
|
||||
| 22 | 385 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | Y | 0x8018ff98 modal | 1,155 |
|
||||
| 23 | 185 | 6 (6/0/0) | 6/6 | cross-address | PURE | 0 | Y | 0x80187aec modal | 1,110 |
|
||||
| 24 | 218 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x8017cf3c modal | 1,090 |
|
||||
| 25 | 363 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015444c matched-ov077 | 1,089 |
|
||||
| 26 | 102 | 10 (0/10/0) | 9/10 | scattered | IMM | 78 | · | 0x8017d290 matched | 1,020 |
|
||||
| 27 | 337 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x80159c84 matched-ov077 | 1,011 |
|
||||
| 28 | 329 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8013c414 matched-ov077 | 987 |
|
||||
| 29 | 324 | 3 (3/0/0) | 2/3 | cross-address | PURE | 0 | Y | 0x80183324 draft-ov077 | 972 |
|
||||
| 30 | 188 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | · | 0x8017cbc8 modal | 940 |
|
||||
| 31 | 312 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | · | 0x8013faf8 matched-ov077 | 936 |
|
||||
| 32 | 187 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | · | 0x8017df40 modal | 935 |
|
||||
| 33 | 231 | 4 (4/0/0) | 4/4 | cross-address | PURE | 0 | Y | 0x8017f83c modal | 924 |
|
||||
| 34 | 890 | 1 (1/0/0) | 1/1 | per-location | PURE | 140 | Y | 0x80178d40 matched-ov077 | 890 |
|
||||
| 35 | 127 | 7 (7/0/0) | 1/7 | per-location | PURE | 134 | · | 0x80145cec matched-ov077 | 889 |
|
||||
| 36 | 289 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x80135eb0 matched-ov077 | 867 |
|
||||
| 37 | 95 | 9 (9/0/0) | 9/9 | scattered | PURE | 1 | Y | 0x80185d70 matched | 855 |
|
||||
| 38 | 213 | 4 (4/0/0) | 1/4 | per-location | PURE | 137 | Y | 0x8013ffd8 matched-ov077 | 852 |
|
||||
| 39 | 166 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80188b84 modal | 830 |
|
||||
| 40 | 165 | 5 (5/0/0) | 5/5 | cross-address | PURE | 0 | Y | 0x801818f0 modal | 825 |
|
||||
| 41 | 272 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8013b83c matched-ov077 | 816 |
|
||||
| 42 | 271 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | Y | 0x8015b950 matched-ov077 | 813 |
|
||||
| 43 | 406 | 2 (2/0/0) | 2/2 | cross-address | PURE | 0 | Y | 0x80184938 modal | 812 |
|
||||
| 44 | 266 | 3 (3/0/0) | 1/3 | per-location | PURE | 138 | · | 0x80130d48 matched-ov077 | 798 |
|
||||
| 45 | 196 | 4 (4/0/0) | 4/4 | cross-address | PURE | 0 | Y | 0x8017ffd0 modal | 784 |
|
||||
| 46 | 257 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | · | 0x80192b60 modal | 771 |
|
||||
| 47 | 255 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | · | 0x8018e9bc modal | 765 |
|
||||
| 48 | 254 | 3 (3/0/0) | 3/3 | cross-address | PURE | 0 | · | 0x80192768 modal | 762 |
|
||||
| 49 | 251 | 3 (3/0/0) | 3/3 | cross-address | PURE | 3 | Y | 0x80180b04 matched | 753 |
|
||||
| 50 | 147 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x8017ed5c modal | 735 |
|
||||
|
||||
@@ -10954,3 +10954,40 @@ One grep for two callee symbols returned an already-banked body that turned a 12
|
||||
into a copy-edit. The existing wave template greps cross-overlay magic literals; extend it to
|
||||
"grep the callee symbols across `src/` for a non-INCLUDE_ASM body". Engine-state globals like
|
||||
`D_80126948` are shared across many overlay TUs, so a matched sibling is often already sitting there.
|
||||
|
||||
|
||||
### §161 — THE RETRY-WAVE HARVEST: a jump table indexed from zero, and two allocator traps (P30 S47)
|
||||
|
||||
**§161a — `case 0: break;` IS LOAD-BEARING WHEN A JUMP TABLE IS INDEXED FROM ZERO.** Target shape:
|
||||
|
||||
lhu $v1,0x34($s0) ; sltiu $v0,$v1,6 ; sll $v0,$v1,2 <- NO `addiu $v1,$v1,-1`
|
||||
|
||||
Writing the natural `case 1: … case 5:` makes gcc-2.7.2 pick **minval = 1**, so it emits
|
||||
`addiu $v1,$v0,-1; sltiu $v0,$v1,5` and every table index shifts one slot. The body can be perfect
|
||||
and it still reads **58 of 77 mismatched** — a near-total mismatch produced by a one-line source
|
||||
difference, which is exactly the shape that gets a whole family written off as a codegen wall.
|
||||
**Fix:** add an explicit empty `case 0: break;` as the FIRST case. `minval` drops to 0, the subtract
|
||||
disappears, and gcc's jump optimizer threads the empty body straight onto the epilogue.
|
||||
**THE DIAGNOSTIC TELL (family-wide):** if a member's jump table has its **first entry pointing at
|
||||
that function's own epilogue/end address**, it needs the `case 0` construction. Byte-proven on
|
||||
`func_8018CC40` (10-member family); emitted table `[$L2(end), $L4, $L7, $L9, $L10, $L12]` matches
|
||||
`jtbl_801E59F8 = [0x8018CD60(end), 0x8018CC7C, 0x8018CCC4, 0x8018CCEC, 0x8018CCFC, 0x8018CD40]`.
|
||||
*Corollary:* a `bnez` inside a case arm that jumps to a label which is NOT a jtbl entry is a plain
|
||||
if/else, not a case fallthrough — do not model it as one.
|
||||
|
||||
**§161b — ALIASING A PARAMETER INTO A LOCAL CAN COST A SECOND CALLEE-SAVED REGISTER.**
|
||||
`void *s0 = a0;` before three mutually-exclusive uses forced gcc-2.7.2 to allocate a SECOND
|
||||
callee-saved register (+8 bytes of frame, +3 instructions) even though the uses never overlap.
|
||||
Using the raw parameter directly at every site — `*(s32 *)(a0 + 0xE4) = …`, typed `s32`, not
|
||||
`void *` — collapsed it back to the single `$s0` the target uses. **When your frame is 8 bytes too
|
||||
big and you have one more `sw $sN` than the target, look for a pointer alias before touching pins.**
|
||||
|
||||
**§161c — LOOSE-PROTOTYPE ENGINE HELPERS AND THE DECL THAT FIGHTS THEM.** Some engine helpers are
|
||||
declared `(void)` at file scope in an overlay yet every `jal` to them carries `addu $a0,$s0,$zero`
|
||||
in the delay slot — they really take an argument. Declaring `extern s32 f();` in the draft to model
|
||||
that collides with the TU's `(void)` and the gate reports **`too many arguments to function`**
|
||||
(byte-witnessed, `func_80178970`). Do NOT fight the file-scope decl: drop the draft's extern and
|
||||
**cast at the call site** (§17a-1) — `((s32 (*)(s32))func_80178970)(a0)` — which gcc folds to a
|
||||
direct `jal`, so it is codegen-neutral. Six call sites converted; the gate then banked it.
|
||||
*Process note: the crack agent PREDICTED this failure in its report before the gate ran. Read the
|
||||
agent's integration notes before diagnosing a gate failure — it has already seen the TU.*
|
||||
|
||||
+17
-17
@@ -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: 349810 / 363379 = 96.27% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 12765577 / 13523856 = 94.4% (shipped .text across main + resident + 211 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 5164619 / 5851963 = 88.3% (80227/90928 unique fns; the DISTINCT-RE number)
|
||||
FLEET fn-count byte-ident: 349822 / 363379 = 96.27% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 12766587 / 13523856 = 94.4% (shipped .text across main + resident + 211 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 5165534 / 5851963 = 88.3% (80238/90928 unique fns; the DISTINCT-RE number)
|
||||
MAIN game-code weighted : 436 / 79510 = 0.5% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-08-05; 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: 12765141 / 13444346 = 94.9%)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 12766151 / 13444346 = 95.0%)
|
||||
|
||||
FLEET REAL substantive : 347628 (of which dedup-shared 249221 via 1949 groups / 249295 instances)
|
||||
FLEET REAL substantive : 347640 (of which dedup-shared 249221 via 1949 groups / 249295 instances)
|
||||
FLEET LINKED PsyQ objs : 959
|
||||
FLEET NON_MATCHING : 7 (0 in any default build — G4)
|
||||
FLEET INCLUDE_ASM stubs : 13562
|
||||
FLEET INCLUDE_ASM stubs : 13550
|
||||
FLEET matchable : 363379
|
||||
|
||||
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|
||||
@@ -60,7 +60,7 @@ FLEET matchable : 363379
|
||||
| md_MAIN_046 | 5 | 0 | 0 | 6 | 39 | 15.4% |
|
||||
| md_MAIN_047 | 3 | 0 | 0 | 4 | 12 | 33.3% |
|
||||
| md_SC02_009 | 4 | 0 | 0 | 4 | 40 | 10.0% |
|
||||
| md_SC03_073 | 14 | 0 | 0 | 16 | 28 | 57.1% |
|
||||
| md_SC03_073 | 16 | 0 | 0 | 18 | 28 | 64.3% |
|
||||
| md_SC03_074 | 15 | 0 | 0 | 17 | 29 | 58.6% |
|
||||
| md_SC03_075 | 17 | 0 | 0 | 19 | 41 | 46.3% |
|
||||
| md_SC03_076 | 19 | 0 | 0 | 21 | 66 | 31.8% |
|
||||
@@ -119,8 +119,8 @@ FLEET matchable : 363379
|
||||
| ov_SC02_037 | 2294 | 1658 | 0 | 2376 | 2516 | 94.4% |
|
||||
| ov_SC02_039 | 2396 | 1771 | 0 | 2396 | 2416 | 99.2% |
|
||||
| ov_SC02_041 | 2477 | 1771 | 0 | 2480 | 2561 | 96.8% |
|
||||
| ov_SC03_001 | 2672 | 1772 | 0 | 2689 | 2869 | 93.7% |
|
||||
| ov_SC03_002 | 2544 | 1776 | 0 | 2559 | 2631 | 97.3% |
|
||||
| ov_SC03_001 | 2673 | 1772 | 0 | 2690 | 2869 | 93.8% |
|
||||
| ov_SC03_002 | 2545 | 1776 | 0 | 2560 | 2631 | 97.3% |
|
||||
| ov_SC03_003 | 2400 | 1771 | 0 | 2401 | 2423 | 99.1% |
|
||||
| ov_SC03_006 | 2556 | 1778 | 0 | 2565 | 2767 | 92.7% |
|
||||
| ov_SC03_007 | 2464 | 1771 | 0 | 2468 | 2623 | 94.1% |
|
||||
@@ -167,8 +167,8 @@ FLEET matchable : 363379
|
||||
| ov_SC03_118 | 2544 | 1796 | 0 | 2545 | 2685 | 94.8% |
|
||||
| ov_SC03_119 | 2541 | 1796 | 0 | 2542 | 2685 | 94.7% |
|
||||
| ov_SC03_121 | 2404 | 1771 | 0 | 2407 | 2459 | 97.9% |
|
||||
| ov_SC03_124 | 2580 | 1767 | 0 | 2600 | 2741 | 94.9% |
|
||||
| ov_SC03_125 | 2530 | 1771 | 0 | 2542 | 2588 | 98.2% |
|
||||
| ov_SC03_124 | 2581 | 1767 | 0 | 2601 | 2741 | 94.9% |
|
||||
| ov_SC03_125 | 2531 | 1771 | 0 | 2543 | 2588 | 98.3% |
|
||||
| ov_SC03_126 | 2401 | 1773 | 0 | 2401 | 2423 | 99.1% |
|
||||
| ov_SC04_000 | 2475 | 1775 | 0 | 2484 | 2546 | 97.6% |
|
||||
| ov_SC04_002 | 2505 | 1771 | 0 | 2509 | 2636 | 95.2% |
|
||||
@@ -182,11 +182,11 @@ FLEET matchable : 363379
|
||||
| ov_SC04_010 | 2403 | 1771 | 0 | 2404 | 2419 | 99.4% |
|
||||
| ov_SC04_011 | 2517 | 1776 | 0 | 2523 | 2803 | 90.0% |
|
||||
| ov_SC04_012 | 2398 | 1771 | 0 | 2399 | 2420 | 99.1% |
|
||||
| ov_SC04_015 | 2535 | 1772 | 0 | 2546 | 2611 | 97.5% |
|
||||
| ov_SC04_015 | 2536 | 1772 | 0 | 2547 | 2611 | 97.5% |
|
||||
| ov_SC04_016 | 2402 | 1771 | 0 | 2404 | 2440 | 98.5% |
|
||||
| ov_SC04_018 | 2677 | 1808 | 0 | 2677 | 2857 | 93.7% |
|
||||
| ov_SC04_019 | 2674 | 1808 | 0 | 2674 | 2857 | 93.6% |
|
||||
| ov_SC04_020 | 2516 | 1771 | 0 | 2528 | 2567 | 98.5% |
|
||||
| ov_SC04_018 | 2678 | 1808 | 0 | 2678 | 2857 | 93.7% |
|
||||
| ov_SC04_019 | 2675 | 1808 | 0 | 2675 | 2857 | 93.6% |
|
||||
| ov_SC04_020 | 2517 | 1771 | 0 | 2529 | 2567 | 98.5% |
|
||||
| ov_SC04_021 | 2401 | 1773 | 0 | 2401 | 2423 | 99.1% |
|
||||
| ov_SC05_000 | 2407 | 1775 | 0 | 2410 | 2422 | 99.5% |
|
||||
| ov_SC05_001 | 2480 | 1772 | 0 | 2485 | 2574 | 96.5% |
|
||||
@@ -200,8 +200,8 @@ FLEET matchable : 363379
|
||||
| ov_SC05_009 | 2410 | 1771 | 0 | 2414 | 2438 | 99.0% |
|
||||
| ov_SC05_010 | 2450 | 1772 | 0 | 2454 | 2588 | 94.8% |
|
||||
| ov_SC05_011 | 2397 | 1771 | 0 | 2398 | 2409 | 99.5% |
|
||||
| ov_SC05_017 | 2651 | 1768 | 0 | 2662 | 2842 | 93.7% |
|
||||
| ov_SC05_018 | 2548 | 1771 | 0 | 2561 | 2673 | 95.8% |
|
||||
| ov_SC05_017 | 2652 | 1768 | 0 | 2663 | 2842 | 93.7% |
|
||||
| ov_SC05_018 | 2549 | 1771 | 0 | 2562 | 2673 | 95.8% |
|
||||
| ov_SC05_019 | 2401 | 1773 | 0 | 2401 | 2423 | 99.1% |
|
||||
| ov_SC06_000 | 2533 | 1780 | 0 | 2536 | 2691 | 94.2% |
|
||||
| ov_SC06_006 | 2424 | 1771 | 0 | 2425 | 2511 | 96.6% |
|
||||
|
||||
@@ -475,6 +475,45 @@ arrives via `engine_core.h`, which they do not include (`tu_scope` = 53 entries
|
||||
overlay). `Blk8` already exists at `engine_types.h:497` but is unreachable from there.
|
||||
**Do NOT retry this sweep until a tool emits per-member data definitions + carries the typedef.**
|
||||
|
||||
## ✅ G2 — THE MAIN EXPERIMENT: "structurally barren" is an h_exact claim, ~85% true under h_seq
|
||||
`family_hseq.load()` excludes main with the comment *"structurally barren — zero h_exact overlap,
|
||||
checked twice, S39"*. That is TRUE AND IRRELEVANT: it is an **h_exact** finding guarding an
|
||||
**h_seq** tool, and the whole reach analysis runs on h_seq (normalized), which is far more
|
||||
permissive. Nobody had ever run it over main. **There is not even a `sig-main` Makefile target** —
|
||||
main had never been signed for this pipeline at all. Signed it here (2,002 fns, seeded from splat's
|
||||
boundaries via `corpus.stubs`, NOT `--bootstrap`, which glues functions around jtbl dispatch and
|
||||
would have corrupted the very hashes under test) → `.run/sig.main.jsonl`.
|
||||
|
||||
| main's 83,917 unmatched ins | ins | share |
|
||||
|---|--:|--:|
|
||||
| internal h_seq families (≥2 members): **207 families / 748 fns** | 11,537 | **13.7%** |
|
||||
| shapes shared with the overlay/module fleet: 161 fns | 1,346 | 1.6% |
|
||||
| genuine singleton / ×1 remainder | ~71,034 | **84.6%** |
|
||||
|
||||
**IMMEDIATELY ACTIONABLE:** **44 h_seq classes / 151 main functions / 1,239 ins already have a
|
||||
MATCHED exemplar in the fleet** — free propagation, ~0 tokens, invisible only because main is not in
|
||||
the map. Mostly small (5–27 ins), mostly from `ov_SC03_090`.
|
||||
**The long-term number is the 207 internal families:** 748 of main's 2,002 functions (37%) are
|
||||
templatable once one exemplar per family is cracked. That does not make main cheap, but it refutes
|
||||
"2,002 independent cracks" as the planning assumption for the 79k-ins tail.
|
||||
**⚠ OPEN, needs Drew's call — do NOT do unilaterally:** add a `sig-main` target and drop main's
|
||||
exclusion from `load()`. That is a change to a fleet-shared oracle every targeting tool reads.
|
||||
|
||||
## ✅ W1b — the 3 rate-limited retries: **3/3 banked** (+2 new cookbook rules)
|
||||
`func_801EFBF4` (reach 12) · `func_801EFDC8` (12) · `func_8018CC40` (10, jr). R22 **213/213**.
|
||||
`func_8018CC40` first failed the gate with `too many arguments to function func_80178970` — **its
|
||||
own crack agent had PREDICTED that in its report** and named the fix. Applied §17a-1: dropped the
|
||||
draft's empty-paren externs, cast at 6 call sites (`((s32 (*)(s32))func_80178970)(a0)`), banked.
|
||||
**Read the agent's integration notes before diagnosing a gate failure — it has already seen the TU.**
|
||||
|
||||
**Cookbook §161a-c** (index → 469): **§161a `case 0: break;` is load-bearing when a jump table is
|
||||
indexed from zero** — the natural `case 1..5` makes gcc pick minval=1, emit `addiu -1`, and shift
|
||||
every index, reading **58/77 mismatched on a perfect body**; the tell is that the table's FIRST
|
||||
entry points at the function's own end address (family-wide, 10 members) · §161b aliasing a
|
||||
parameter into a local can cost a second callee-saved register (+8 frame, +3 ins) — suspect it
|
||||
before touching pins · §161c loose-prototype engine helpers: don't fight the TU's `(void)` decl,
|
||||
cast at the call site.
|
||||
|
||||
## ▶ RESUME HERE — D (and the leftovers below)
|
||||
**C is DONE.** For reference, the command was:
|
||||
`.venv/bin/python tools/dedup_extend.py --binaries ov_SC03_107,ov_MAIN_012,ov_SC02_037`
|
||||
|
||||
@@ -231,11 +231,67 @@ s32 func_801EFBE4(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_073/nonmatchings/md_SC03_073", func_801EFBF4);
|
||||
extern s32 func_80029504(void);
|
||||
extern s32 func_801877C0(s32);
|
||||
extern s32 func_80187890(void);
|
||||
extern s32 func_80187904(void);
|
||||
extern void func_80187960(void);
|
||||
|
||||
void func_801EFBF4(s32 a0) {
|
||||
|
||||
extern s32 D_801EFFB4[];
|
||||
extern s32 D_801EFFC8[];
|
||||
extern s32 D_801EFFE4[];
|
||||
|
||||
s32 v1 = func_80029504();
|
||||
|
||||
if (v1 < 0xC8) {
|
||||
s32 v0 = ((s32 (*)(void))func_801877C0)();
|
||||
*(s32 *)(a0 + 0xE4) = D_801EFFB4[v0];
|
||||
} else if (v1 < 0x384) {
|
||||
s32 v0 = func_80187890();
|
||||
*(s32 *)(a0 + 0xE4) = D_801EFFC8[v0];
|
||||
} else {
|
||||
s32 v0 = func_80187904();
|
||||
*(s32 *)(a0 + 0xE4) = D_801EFFE4[v0];
|
||||
func_80187960();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_073/nonmatchings/md_SC03_073", func_801EFC94);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_073/nonmatchings/md_SC03_073", func_801EFDC8);
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, s32 a1);
|
||||
extern void func_8012E8E0(s32 a0, s32 a1);
|
||||
extern s32 func_80178B18(s32 a0, s32 a1);
|
||||
|
||||
void func_801EFDC8(void *a0) {
|
||||
extern s32 D_801F65F0;
|
||||
extern s32 D_801C3790;
|
||||
extern s32 D_801EFF44;
|
||||
extern s32 D_801EFF4C;
|
||||
s32 v0;
|
||||
s32 ptr;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)((s32)a0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4(a0);
|
||||
} else {
|
||||
func_8001C214(v0, (s32)&D_801F65F0);
|
||||
ptr = *(s32 *)((s32)a0 + 0x68);
|
||||
*(s16 *)(ptr + 0xC) = 0x7FFF;
|
||||
*(s16 *)((s32)a0 + 0x2) = 1;
|
||||
func_8012A828((s32)a0, (s32)&D_801C3790);
|
||||
func_8012E8E0((s32)a0, (s32)&D_801EFF44);
|
||||
*(s16 *)((s32)a0 + 0x34) = 0;
|
||||
func_80178B18((s32)a0, (s32)&D_801EFF4C);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
u8 func_801EFE60(u32 a0) {
|
||||
|
||||
@@ -4877,41 +4877,3 @@ extern void func_8002D4C8(s32, s32);
|
||||
void func_8018CC1C(void) {
|
||||
func_8002D4C8(0x7E0, 0);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801878E8", func_8018CC40);
|
||||
|
||||
extern s32 func_8012BEE8(s32 a0);
|
||||
extern void func_8018C93C(void *a0);
|
||||
|
||||
void func_8018CD74(void *a0) {
|
||||
u16 v1;
|
||||
|
||||
v1 = *(u16 *)((char *)a0 + 0x34);
|
||||
if (v1 == 0) {
|
||||
return;
|
||||
}
|
||||
if (v1 != 1) {
|
||||
return;
|
||||
}
|
||||
{
|
||||
u16 *p = (u16 *)*(s32 *)((char *)a0 + 0x20);
|
||||
|
||||
*(u16 *)((char *)p + 0x12) = *(u16 *)((char *)p + 0x12) + 0x20;
|
||||
if (((s32 (*)(void))func_8012BEE8)()) {
|
||||
func_8018C93C(a0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */
|
||||
|
||||
DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801878E8", func_8018CDEC);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user