|
|
|
|
|
|
|
might be configured as follows, after tags have been forwarded. The Æ entry indicates that the destination tag has been forwarded to another unit: |
|
|
|
 |
|
|
|
|
ADD1 Æ R1, R2
ADD2 Æ ADD1, R2
MPY1 Æ ADD2, R2
ST-SB1 ALPHA, ADD1
ST-SB2 BETA, ADD2
ST-SB3 GAMMA, MPY1
LD R3, DELTA
LD R4, EPSILON. |
|
|
|
|
|
|
|
|
The ADD1, ADD2 refer either to independent adders or to a value-holding reservation station for the same adder. Similarly, three store buffers are assumed (SB1,SB2,SB3). The two LD instructions define new values for R3 and R4; it is their values, not the results of the two ADD instructions, that must take precedence. |
|
|
|
|
|
|
|
|
Figure 7.41
Original graph. |
|
|
|
|
|
|
|
|
We compare the example program original graph (Figure 7.41), the dataflow graph (Figure 7.42), and the control flow graph with renaming (Figure 7.43). The latter two are quite close in their dependency graphs. |
|
|
|
|
|
|
|
|
The complexity of the translation to dataflow graph form can be substantial, especially if performed at decode time. Each instruction may require a modification (or link) to any preceding instruction in the window (the second ST instruction links SB2 to ADD2, which is linked to ADD1). |
|
|
|
|
|
|
|
|
The restructuring of code to create these dataflow graphs or (indeed) the renamed control flow sequences is best performed much earlier than at decode time. Compile time would be best, although a predecode translation (perhaps when code enters an I-cache) could also be considered. |
|
|
|
|
|