User Tools

Site Tools


megabitchip:port_matrix

MegabitChip — Port Matrix

Per-function status for the “monster” ports and any port that needs a narrative beyond the one-line entry in check_asm.sh. Short ports that are source-complete, byte-matching, and need no commentary live only in ~/projects/AMPere/benchmark/ and the make audit output.

Last updated: 2026-04-21 (extended session).

Splicer baseline

  • 104 candidate ports total
  • 85 spliced (linked + installed into rebuilt blob)
  • 19 natural skip-larger (candidate > vendor byte budget — vendor bytes remain)
  • 0 failed
  • 1 explicit splicer_skip.txt entry (154_FUN_de40 — see below)

Monster ports

Port Status Size Notes
fn_fcc4 (115_FUN_fcc4) Source-complete full port 1684 B Natural skip-larger. Documented source. Training-result reporter — 1656 B vendor with 5 state-mutating stores that SAILR output was too contaminated to hand-rescue, rebuilt from func.s.
fn_1c14 (101_FUN_1c14) Full port — replaces broken stub 656 B ≤ 740 B vendor Prior port was read-and-discard ((void)*(u32v *)(rank + base + i * 4u);). Vendor's body is a DDRPHY training-register save/restore/zero routine that copies configuration banks between source and destination offsets. Rebuilt from ddr_annotated.c:1555.
fn_3268 (83_FUN_3268) Bug fix same budget Early-return restructured to fall through to the 0x208 RMW tail — matches vendor's b INTO_TAIL shape on both control-flow paths. See extended session bug-class 2.
fn_de40 (154_FUN_de40) Source-scaffold, installs under budget 4888 B ≤ 4912 B vendor Faithful ~700-line port from ddr_annotated.c:9695–10640 (LPDDR5 frequency-band timing programmer). 27 callees resolved via fun_table (0xd468 via vendor bytes). 24 new DAT_00011ff0..DAT_000127c0 defsyms added. Diverges 1 bit at tp[0x4f] on the first install trial — currently parked in splicer_skip.txt pending internal task #198. Vendor bytes hold mmio_diff 3173/3173.

fn_de40 — parked behind task #198

Installs cleanly under budget and builds, but enabling install causes mmio_diff write #197 to diverge: vendor writes 0x300000 to ch0 + 0x504, rebuilt writes 0x310000. One bit — bit-0 of tp[0x4f] is 0x30 in the rebuild vs 0x31 expected by the downstream write composer.

Caller fn_5540 computes tp[0x55] | (tp[0x4f] « 16), so the bit-0 difference in tp[0x4f] ends up as bit-16 of the 0x504 write.

Task #198 tracks the narrow-window Unicorn trace needed to localize which control-flow path in the rebuild is wrong. mmio_diff stays 3173/3173 with vendor bytes in place. Details and reproduction steps live in the internal task board.

Historical context

Earlier port milestones:

  • 2026-04-20 — 1/118 → 33/118 functions matching-decomped, poll-site coverage 4/16 → 15/16, canonical clang -O2 -ffreestanding -mgeneral-regs-only -fno-pic -fno-stack-protector -fno-jump-tables –target=aarch64-none-elf settled
  • 2026-04-21 reloc-splice — reached 17 → 47/54; bug classes: jump-table .rodata loss (-fno-jump-tables mitigates) + void-signature x0 mutation (audit against vendor's last pre-RET insns)
  • 2026-04-21 simulation — MMIO-trace diff adopted as primary gate; fn_9a68 dst/src swap, fn_2e88 arg swap, fn_2340 void→int, fn_4f8 case-2 BUS_GRF addresses
  • 2026-04-21 extended — 6 silicon-hostile bugs / 3 classes caught pre-flash, three monster ports shipped (above), bitflip sweep + ADRP-to-NULL guard
megabitchip/port_matrix.txt · Last modified: by 127.0.0.1