2014-03-18 37 views
0

我有以下MIPS代碼:MIPS:代碼計劃要除去攤位

addi $s1, $0, 10 
lw $t0, 4($s0) 
srl $t1, $t0, 1  [STALL becausee $t0 depends on lw's $t0] 
add $t2, $t1, $s1 [STALL because $t1 depends on srl's $t1] 
sw $t2, 4($s0) 

我怎樣才能重新安排,以避免任何攤位。我發現2到5行的所有序列都不能改變。我們只能移動srl之間的第一行並添加OR lw和srl。有任何想法嗎?

回答

2

您的代碼中有4個讀取後寫入(RAW)依賴關係:addi->add,lw->srl,srl->add,add->sw。這些不能像你指出的那樣修復。

你什麼可以做的是移動addi指令。我認爲移動此指令的最佳位置應該在lw之後,因爲在MIPS架構中,所有加載指令都使用load delay slot。這意味着緊接在加載之後的指令不能訪問加載的內容。如果您在模擬器(如spimMARS)中使用此代碼,可能無法模擬此代碼,但假設您的意思是在srl指令中使用$t0的加載值,則上述程序集實際上是不正確的。爲此,在lwsrl之間應該有nop

出於這個原因,這將是最好的移動addilwsrl之間,以便利用lw負載延遲槽。