Index

Lecture 10

4 Software Pipelining (global scheduling)

instr mem1 mem2 fp1 fp2 int/br
Loop:1 ADD.D F2,F2,1,0
2
3
4 MUL.D F4,F4,F0 MUL.D F6,F6,F2
5
6
7 DIV.D F10,F4,F6 SUB R1,R1,1
8
9 BGT R1,Loop
10 ADD.D F8,F8,F10
10-01

10-01

instr mem1 mem2 fp1 fp2 int/br
Loop:1 ADD.D F2,F2,1,0
2 MUL.D F4,F4,F0 MUL.D F6,F6,F2 BGTZ R1,Loop
3 DIV.D F10,F4,F6 ADD.D F8,F8,F10 SUB R1,R1,1

F2 F4 F6 F10 assumes no stalling and these use the value from the previous iteration

10-02

10-02

instr mem1 mem2 fp1 fp2 int/br
Loop:1 ADD.D RR0,1,0
2 MUL.D RR5,RR1,F0 MUL.D RR6,RR2,RR0 BGTZ R1,Loop
3 DIV.D RR7,RR1,RR2 ADD.D F8,F8,RR3 RRB+=4

5. Speculative Loads

SW  R12, (R4)   0 stall
LW  R6, (R8)    0 stall     hoisting lw above sw incement if R4==R8
ADD R5, R6, R7  1 stall
Sw  R5, (R10)   0 stall
LW.S    R6, (R8)
SW      R12, (R4)
LW.C    R6, (R8)
ADD     R5, R6, R7
SW      R5, (R10)
ld8.a   r6=[r8];;   advanced load
st8     [r4]=r12    - puts EA in Advanced Load Address Table (ALAT)
                    - st8 = Store 8 bytes
                    - checks for its EA in ALAT and remove if found
ld8.c   rt=[r8]     - ld8.c - check
                    - checks for ALAT for its EA and repeats load if missing
add     r5=r6,r7;;
st8     [r10]=r5

Index