< previous page page_481 next page >

Page 481
d87111c01013bcda00bb8640fdff6754.gif
For a control flow machine (improved scoreboard), the situation is somewhat different. Now *[MPY R1,R6,R7] cannot be issued, as the R1 tag cannot be overwritten. Only after the result of the multiply [MPY-0] is placed in R1 will the R1 tag be reset, enabling * to be issued. For instruction * + 1 [ADD] and * + 2 [DIV], the situation is exactly the same as with dataflow. Both instructions are held at the issue stage, but now * + 3 [MPY] can be issued (unlike dataflow), since the multiplier reservation station is available.
d87111c01013bcda00bb8640fdff6754.gif
In summary,
Only * + 3 MPY R2,R11,R12 is issued.
It causes the R2 tag to be [MPY-1]; the other tags are unchanged.
The first three (*, * + 1, * + 2) instructions are held in the issue stage.
Renaming and Shadow Effects
Using multiple value-holding reservation stations and labeling them separately allows the decoder to distinguish among the users of a resource. Consider the following example:
d87111c01013bcda00bb8640fdff6754.gif
I1 ADD R1,    R7, R8
I
2 MPY R3,    R1, R2
I
3 MPY R6,    R4, R5
I
4 ST  ALPHA, R6.
Assume a multiplier with two (sets of) value-holding reservation stations, MPY1 and MPY2. The decoder issues I2 and I3 on successive cycles to reservation stations MPY1 and MPY2, respectively. Since MPY1 has a tag for a value from the ADD (the R1 value), it cannot proceed, but MPY2 begins execution when I3 is issued, because the multiplier and the operands are available. When I4 is issued, R6 gets the TAG_MPY2, which is forwarded to the store buffer.
In the preceding example, the results of the two multiplies are distinguished by their unique tags; thus, the functional units that use the result of multiply 2 are distinguished from those using multiply 1, regardless of the order in which these multiplies are actually executed.
An analogous arrangement can be achieved by using shadow registers. Shadow registers are duplicate registers or sets of registers that allow the decoder to ''rename" a sequence of code with new register values. Thus, suppose we have code in this sequence:
d87111c01013bcda00bb8640fdff6754.gif
I1 LD  R1,      ALPHA
I
2 MPY R1,  R2, R3
I
3 ST  BETA,    R1
I
4 LD  R1,      GAMMA
I
5 ADD R4,  R1, R5.

 
< previous page page_481 next page >