連續儲存/載入指令懲罰/警告

XSC_SUCC_LoadStore

解釋

基於“英特爾(R) XScale”微體系結構的處理器有四個填充緩衝區,用於在發生數據快取未命中時從外部記憶體獲取數據。所有的填充緩衝區都在使用時,處理器將暫停。存在四個以上未決的載入並等待從記憶體獲取時,便會發生這種情況。

類似地,寫入緩衝區的數量也限制能發出的連續寫入數,超過此限處理器將會暫停。儲存緩衝區有八個,因此不能發出八個以上的儲存。

建議

重新調整指令順序,以避免同時使用所有的填充緩衝區。  

使用 PLD 指令預先獲取數據也是可行的辦法。PLD 指令也需要使用填充緩衝區,因此請勿連續使用 PLD 及其它載入指令。請參閱 XSC_PLD_Advice

示例 1

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

示例 2

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

示例 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