Checkpoint
This commit is contained in:
parent
07544f49f2
commit
35aaf7953a
1 changed files with 45 additions and 4 deletions
49
STATUS.md
49
STATUS.md
|
|
@ -72,14 +72,18 @@ which runs correctly under MAME (apple2gs).
|
||||||
native object format) for round-tripping with classic dev tools.
|
native object format) for round-tripping with classic dev tools.
|
||||||
- `runtime/build.sh` builds crt0, libc, soft-float, soft-double,
|
- `runtime/build.sh` builds crt0, libc, soft-float, soft-double,
|
||||||
libgcc into linkable objects.
|
libgcc into linkable objects.
|
||||||
- `scripts/smokeTest.sh` runs 102 end-to-end checks (scalar ops,
|
- `scripts/smokeTest.sh` runs 107 end-to-end checks (scalar ops,
|
||||||
control flow, calling conventions, MAME execution, regressions,
|
control flow, calling conventions, MAME execution, regressions,
|
||||||
link816 bss-base safety + weak-symbol resolution +
|
link816 bss-base safety + weak-symbol resolution +
|
||||||
heap_end-vs-heap_start sanity, iigs/toolbox.h compile-check,
|
heap_end-vs-heap_start sanity, iigs/toolbox.h compile + link
|
||||||
|
check (singles inlined, multi-arg wrappers in iigsToolbox.s),
|
||||||
standalone runtime headers, AsmPrinter peepholes for STZ /
|
standalone runtime headers, AsmPrinter peepholes for STZ /
|
||||||
PEA / PEI — single-STA, shared-LDA-multi-STA, and DPF0-
|
PEA / PEI — single-STA, shared-LDA-multi-STA, and DPF0-
|
||||||
forwarding cases — malloc/free coalesce ordering).
|
forwarding cases — malloc/free coalesce ordering, plus
|
||||||
Currently 100% pass at -O2 throughout.
|
real-world coverage tests: Conway's Game of Life blinker
|
||||||
|
(2D loop + neighbour bounds), binary search tree (recursive
|
||||||
|
struct + malloc), function-pointer dispatch table (indirect
|
||||||
|
JSL via `__jsl_indir`). Currently 100% pass at -O2 throughout.
|
||||||
|
|
||||||
**ABI:**
|
**ABI:**
|
||||||
|
|
||||||
|
|
@ -251,6 +255,43 @@ sidecar bytes.
|
||||||
|
|
||||||
## Recently fixed
|
## Recently fixed
|
||||||
|
|
||||||
|
- **DBR pointer-deref RA elision (sumTable miscompile)** —
|
||||||
|
`LDAptr / STAptr / STBptr` inserter's first-thing
|
||||||
|
`COPY $a = ptr_vreg` was being elided by RA when the loop body
|
||||||
|
had multiple Acc16 PHIs competing for A. PHI-elim silently
|
||||||
|
dropped the COPY needed to refresh A with the pointer at the
|
||||||
|
top of each iteration; sumTable's inner loop did `STA $E0`
|
||||||
|
while A held the accumulator. Fix: spill the pointer to a
|
||||||
|
fresh stack slot via `STAfi` and reload via `LDAfi` — forces
|
||||||
|
RA to materialize the value through real machine ops. See
|
||||||
|
`feedback_dbr_ptr_deref_spill.md`.
|
||||||
|
|
||||||
|
- **softDouble.c -O2 hold-out** — with the DBR fix in place,
|
||||||
|
`dclass` can be `noinline` (its pointer-arg writes go through
|
||||||
|
`STBptr / STAptr` which now use `[$E0],Y` indirect-long with
|
||||||
|
bank=0). Drops register pressure in `__muldf3 / __divdf3 /
|
||||||
|
__adddf3` enough that greedy regalloc no longer runs out. All
|
||||||
|
three smoke build sites moved from `-O1` to `-O2`.
|
||||||
|
|
||||||
|
- **IMG slot count doubled (8 → 16)** — Img16 / Wide16 register
|
||||||
|
classes now hold IMG0..IMG15, backed by DP $C0..$CE + $D0..$DE.
|
||||||
|
Reduces greedy regalloc spills for moderately-busy functions.
|
||||||
|
Existing `IMG0..IMG7 → $D0..$DE` mapping unchanged so smoke
|
||||||
|
tests that assume specific DP carriers (e.g. DPF0 at $F0) still
|
||||||
|
work. User app DP is now $00..$BF (was $00..$CF).
|
||||||
|
|
||||||
|
- **Real-world smoke coverage added** — Conway's Game of Life
|
||||||
|
blinker (2D arrays + neighbour bounds), binary search tree
|
||||||
|
(recursive struct + malloc), function-pointer dispatch table
|
||||||
|
(indirect-JSL via `__jsl_indir`). Total smoke tests at 107.
|
||||||
|
|
||||||
|
- **iigs/toolbox.h expanded** — from 4 stubs to 18+ wrappers
|
||||||
|
across Tool Locator, Memory Manager, Misc Tools, QuickDraw II,
|
||||||
|
Event Manager, Window Manager, plus GS/OS Quit. Multi-arg
|
||||||
|
wrappers live in `runtime/src/iigsToolbox.s` (the backend's
|
||||||
|
inline-asm constraints can't take memory operands); single-arg
|
||||||
|
ones stay inline.
|
||||||
|
|
||||||
- **#70 — iterative qsort -O2 miscompile** — `W65816StackSlotCleanup`
|
- **#70 — iterative qsort -O2 miscompile** — `W65816StackSlotCleanup`
|
||||||
Pass -2 was deleting a store to a slot the loop body read.
|
Pass -2 was deleting a store to a slot the loop body read.
|
||||||
Function-wide `slotHasOtherRefs` safety check added (Pass -1 and
|
Function-wide `slotHasOtherRefs` safety check added (Pass -1 and
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue