mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 10:19:47 -04:00
855f253dec
Two provably-correct framework fixes (independent of the AOT work) plus the play-free overlay-extraction spike tooling and design doc. Framework fixes (accurate, safe, complete): - ABI v14: add gte_precision_store_word to OverlayCallbacks + preamble shim + runtime population. The emitter emits a direct call for every swc2 (GTE store-word); it is stateful runtime code (gte.cpp) so overlay DLLs must forward or fail to LINK (undefined reference). Play-captured shards rarely compiled a swc2; fuller static coverage surfaced the gap. Same pattern as the v13 ws_player_x_bound / v10 gte_read_ctrl shims. - Gate splitgen OFF in overlay mode (main_psx.cpp): the current recompiler's unconditional split-TU output deletes <stem>_full.c and emits only shards, which broke ALL overlay compilation (compile_overlays.py reads _full.c). Overlays are single small TUs with no parallel-compile benefit; emit the monolith. Restores overlay compile on the current tree. AOT spike (docs/AOT_OVERLAY_PLAN.md + tools/aot_overlay_spike/, WIP): - Play-free static overlay extraction from the disc image. Validated: Tomba 1 reproduces 90% of played functions + ~1964 unplayed, live-verified in-game (Dwarf Village runs native, zero runtime compile). Tomba 2 yields 661 functions byte-identical to the shipped/played vault (provably real), all from the self-describing MAIN.EXE producer; the header-table BIN producer needs loader-table RE (base recovery unreliable). Generality is producer-dependent. Spike scripts are Tomba-specific proofs of concept with hardcoded paths, not a finished tool. - Correctness is guaranteed by the existing per-function code_crc dispatch guard: a mis-positioned shard fails audit at compile or never fires at runtime -> coverage loss, never wrong execution. Autocompile self-heals gaps. CROSS-CUTTING: the ABI v14 change is part of the overlay codegen-hash source set, so it ROLLS the cg tag (1f2ad026 -> e8484213). On master + a fw bump, every title's overlay cache invalidates and needs regen+reshard. Branch only; NOT pushed; other games' caches untouched. Needs user validation before merge. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>