LDM/STM 指令總是比 LDR/STR 或 LDRD/STRD 指令要多花幾個時鐘週期。如果不考慮程式碼空間,可以使用 LDR/STR 或 LDRD/STRD 替換 LDM/STM。根據不同的情況,如列表中的暫存器數、定址模式及是否更新基址暫存器等等,此“指令選擇”可以選擇不同的替換指令。
此“指令選擇”與 XSC_LDMSTM 懲罰/警告配合使用。
原始程式碼 |
指令選擇 |
LDMIA R2, {R4, R5} STMIB R6!,{R3, R7} LDMDA R1, {R3, R6, R7} STMDB R3, {R4, R5, R9} |
LDRD R4, [R2] STR R3, [R6, #4]!; STR R7, [R6, #4]! LDR R3, [R1, #-8]; LDRD R6, [R1, #-4] STR R9, [R3, #-4]; STRD R4, [R3, #-12] |