基於“英特爾(R) XScale”微體系結構的處理器有四個填充緩衝區,用於在發生數據快取未命中時從外部記憶體獲取數據。所有的填充緩衝區都在使用時,處理器將暫停。存在四個以上未決的載入並等待從記憶體獲取時,便會發生這種情況。
類似地,寫入緩衝區的數量也限制能發出的連續寫入數,超過此限處理器將會暫停。儲存緩衝區有八個,因此不能發出八個以上的儲存。
重新調整指令順序,以避免同時使用所有的填充緩衝區。
使用 PLD 指令預先獲取數據也是可行的辦法。PLD 指令也需要使用填充緩衝區,因此請勿連續使用 PLD 及其它載入指令。請參閱 XSC_PLD_Advice。
LDR R0, [R1, #0x0]
LDR R2, [R1, #0xef1]
LDR R3, [R1, #0xfff]
LDR R6, [R7, R8]
LDR R4, [R1, #-0xfff] ;; XSC_SUCC_LoadStore, XSC_PLD_S1
STMDA R0,{R1,R2} ;; XSC_LDMSTM_2
SWP R0,R1,[R3] ;; XSC_SWP
SWP SP,LR,[R4] ;; XSC_SWP
STMIA R0,{R5-R10} ;; XSC_SUCC_LoadStore, XSC_PLD_S2, XSC_LDMSTM_3
SWP R0,R1,[R3] ;; XSC_SWP
SWP SP,LR,[R4] ;; XSC_SWP
SWP R5,R5,[R6] ;; XSC_SWP
SWPB R7,R7,[R8] ;; XSC_SWP
SWPB R9,R9,[R2] ;; XSC_SWP, XSC_SUCC_LoadStore, XSC_PLD_S1
SWPVCB R3,LR,[SP] ;; XSC_SWP, XSC_SUCC_LoadStore, XSC_PLD_S1
SWPHIB R1,R1,[R3] ;; XSC_SWP, XSC_SUCC_LoadStore, XSC_PLD_S1
SWPLTB R5,R5,[R7] ;; XSC_SWP, XSC_SUCC_LoadStore, XSC_PLD_S1
SWPGTB R0,R1,[R9] ;; XSC_SWP, XSC_SUCC_LoadStore, XSC_PLD_S1, XSC_PLD_S2