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
,则
不能为type
DW
。 cond
-
是一个可选的条件代码(请参阅条件执行)。
Note
只能用在 Thumb-2 代码中,且前面要有cond
IT
指令。 这是 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 到 #31LSR
#1 到 #32ASR
#1 到 #32ROR
#1 到 #31RRX
预载的地址对齐
对于预载指令,系统不执行对齐检查。
体系结构
ARM PLD
可用于 ARMv5TE 及更高版本。
32 位 Thumb PLD
可用于 ARMv6T2 及更高版本。
PLDW
只能用于实现了多重处理扩展的 ARMv7 及更高版本。
PLI
只能用于 ARMv7 及更高版本。
不存在 16 位 Thumb PLD
、PLDW
或 PLI
指令。
这些是提示指令,其实现是可选的。 如果未实现,则这些指令作为 NOP
执行。
参考:http://blog.****.net/waverider2012/article/details/8538923