Fact.s其中的主要代码如下:
main:
;*** Read value from stdin into R1
addi r1,r0,Prompt
jal InputUnsigned
;*** init values
movi2fp f10,r1 ;R1 -> D0 D0..Count register
cvti2d f0,f10
addi r2,r0,1 ;1 -> D2 D2..result
movi2fp f11,r2
cvti2d f2,f11
movd f4,f2 ;1-> D4 D4..Constant 1
;*** Break loop if D0 = 1
Loop: led f0,f4 ;D0<=1 ?
bfpt Finish
;*** Multiplication and next loop
multd f2,f2,f0
subd f0,f0,f4
j Loop
Finish: ;*** write result to stdout
sd PrintfValue,f2
addi r14,r0,PrintfPar
trap 5
;*** end
trap 0
将代码装载并运行,对比优化前后的时空图,并进行性能的评价分析,得出结论。
图4 第一次循环的流水线时空图
在窗口中,可以看到模拟第一次循环正在第四时钟周期,第一条命令正在ME M段,第二条命令在intEX段,第四条命令在IF段。而第三条命令指示为“a