延遲

Latency 表示可以將一條指令替換成總體延遲更短的其它指令序列。

建議

嘗試將此指令替換成可以在更少的週期內執行相同操作的其它指令序列。

下表列出會導致 Latency 懲罰的指令,並提供有關如何儘量降低懲罰的建議。

指令

延遲說明

建議

incdec

incdec 指令只修改標誌暫存器中的一部分位。這會導致對標誌暫存器上所有先前寫入的依賴性。因為這些指令用於更改載入(其它許多指令都依賴於此操作)的地址,在它們處於關鍵路徑之上時,這尤其會成為問題。

incdec

指令替換成 addsub 指令,因為 addsub 會覆蓋所有標誌位。

 

shift

同以前各代處理器相比,shift 指令在奔騰 4 處理器上的延遲更長。固定與可變移位的延遲相同。

add 序列的延遲比三位及以下的左移延遲更短。

如果 shift 在關鍵路徑上,請將它替換成 add(最多三條)序列。如果它的延遲並不關鍵,請仍使用 shift,原因在於它產生的微操作更少。

rotate

同以前各代處理器相比,rotate 指令在奔騰 4 處理器上的延遲更長。  

按立即數與暫存器的循環移位比普通移位指令的開銷更大。循環移動 1 位與普通移位的延遲相同。

避免使用按暫存器或立即數循環移位指令。如果可能,請替換成循環移動 1 位的指令。

 

mulimul

整數乘法運算 mulimul 在浮點單元中執行,因此這些指令不應該同浮點指令並行執行。由於在浮點單元中執行,它們還會導致一些額外的延遲。如果上一個週期執行 fmul,則浮點乘法指令 (fmul) 將延遲一個週期。乘法器只能每隔一個週期接受一對新運算元。

將乘以小常數的整數乘法運算替換成兩條或更多 addlea 指令,在這些乘法運算是相關鏈的一部分時,尤其應該這樣做。

影響的處理器