|
<< Click to Display Table of Contents >> Navigation: ASA-EMulatR Reference Guide > Introduction > Architecture Overview > Chapter 13 – AlphaPipeline Implementation > 13.13 Summary |
The AlphaPipeline is simple in structure, strict in correctness, and aggressively deterministic.
AlphaPipeline.h — 2,088 lines (fully inline header, all stage implementations)
PipeLineSlot.h — 409 lines (slot structure, PendingCommit, control flags)
Total: 2,497 lines.
1.EX does everything — grain→execute() in stage_EX() is the only place instruction semantics occur
2.WB is the only architectural commit — store commits, retirement, fault dispatch, CALL_PAL detection
3.MEM writes registers — commitPending() in stage_MEM(), not stage_WB(). This is the key design decision.
4.RAW hazards resolved by execution order — WB→MEM→EX→IS→DE→IF reverse order means MEM writes before EX reads, same cycle, no forwarding needed
5.Ring buffer with 6 slots — m_head rotates, stage() maps logical to physical via modulo arithmetic
6.Barriers stall in MEM — needsMemoryBarrier/needsWriteBufferDrain flags checked in stage_MEM(), released by CBox
7.Flushes are precise — full flush clears all slots + MBox staging; partial flush preserves EX/MEM/WB
8.Exceptions detect-early/deliver-late — faultPending set in EX, dispatched in WB, younger instructions squashed
9.Store commits break reservations — breakReservationsOnCacheLine() on every store in WB
10.Speculation never leaks — stores only in WB, registers only via committed PendingCommit, no privilege leakage
See Also: Chapter 14 – Execution Domains ("Boxes") (next chapter).