C中嵌入匯編PLD指令:asm("PLD [%0,#128]": :"r" (psrc) );
copy自官方文檔:
4.2.7. PLD、PLDW 和 PLI
預載數據和預載指令。 處理器可向內存系統發送信號,告訴內存系統在不久的將來可能要從某個地址加載數據或指令。
語法
PLtype{cond} [Rn{, #offset}]
PLtype{cond} [Rn, +/-Rm{,shift}]
PLtype{cond}label
其中:
-
type -
可以是下列項之一:
-
D -
數據地址
-
DW -
要寫入的數據地址
-
I -
指令地址
如果語法指定了
label,則不能為typeDW。 -
-
cond -
是一個可選的條件代碼(請參閱條件執行)。
Note
只能用在 Thumb-2 代碼中,且前面要有condIT指令。 這是 ARM 中的無條件執行指令,請一定不要使用。cond -
Rn -
是內存地址所基於的寄存器。
-
offset -
是直接偏移量。 如果省略偏移量,則該地址為
中的值。Rn -
Rm -
是一個寄存器,包含要用作偏移量的值。
不能為 r15。 對於 Thumb 指令,Rm還不能為 r13。Rm -
shift -
是一個可選的移位。
-
label -
是一個程序相對的表達式。 有關詳細信息,請參閱相對寄存器和程序相對的表達式。
偏移量范圍
預載前,會先將偏移量應用到 中的值。 所得結果將用作預載的內存地址。 偏移量的允許范圍為:Rn
-
–4095 到 +4095(ARM 指令)
-
–255 到 +4095(適用於
不是 r15 時的 Thumb-2 指令)。Rn -
–4095 到 +4095(適用於
為 r15 時的 Thumb-2 指令)。Rn
匯編器會計算相對 PC 的偏移量。 如果 超出范圍,則匯編器會生成錯誤。label
寄存器或寄存器移位偏移量
在 ARM 中, 中的值既可與 Rm 中的值相加,也可從其中減去。 在 Thumb-2 中,Rn 中的值只能與 Rm 中的值相加。 所得結果將用作預載的內存地址。Rn
移位的允許范圍為:
-
LSL#0 到 #3(對於 Thumb-2 指令) -
對於 ARM 指令,可為以下范圍之一:
-
LSL#0 到 #31 -
LSR#1 到 #32 -
ASR#1 到 #32 -
ROR#1 到 #31 -
RRX
-
預載的地址對齊
對於預載指令,系統不執行對齊檢查。
體系結構
ARM PLD 可用於 ARMv5TE 及更高版本。
32 位 Thumb PLD 可用於 ARMv6T2 及更高版本。
PLDW 只能用於實現了多重處理擴展的 ARMv7 及更高版本。
PLI 只能用於 ARMv7 及更高版本。
不存在 16 位 Thumb PLD、PLDW 或 PLI 指令。
這些是提示指令,其實現是可選的。 如果未實現,則這些指令作為 NOP 執行。
參考:http://blog.csdn.net/waverider2012/article/details/8538923
