= Solution
A <reorder buffer> records instructions in program order, including those with no destination <processor register>. Each entry needs a completion state before <instruction retirement> can pass it. Thus a <store instruction> must report that its <memory address> and data are ready and whether execution detected a fault, even though it has no ordinary <register file> result.
Suppose an older division occupies the head of the <reorder buffer>, followed by a <store instruction> and an addition. The latter two can finish first. The <store instruction>'s completion message identifies its <reorder buffer> entry, carries or identifies the buffered <memory address> and data, and supplies its status. The entry is then ready, but its write remains private until it is the oldest instruction allowed to commit. When the division retires successfully, the <store instruction> can commit to the <store buffer> or memory system, and the addition can subsequently retire. If the division faults, the younger <store instruction> is discarded without changing visible <computer memory>.
If the <store instruction> never reported completion, its <reorder buffer> entry would remain unready and block <instruction retirement> indefinitely. Conversely, treating it as completed at issue could commit missing data or suppress its later fault. \b[The common data bus carries tagged completion information as well as register values.] A false-predicated instruction also needs a completion indication even when it changes no data.
This answer uses the diagram's shared result/completion path. An architecture can instead provide a dedicated <store queue> completion path to the <reorder buffer>; there is no universal requirement to send store data over the same physical wires as arithmetic results. What is essential is delivery of the tagged completion and exception status before <instruction retirement>.
$$
\boxed{\text{Stores need tagged completion before the ROB can retire them.}}
$$
Back to article page