arm cache line,PLD指令

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

cond 只能用在 Thumb-2 代码中,且前面要有 IT 指令。 这是 ARM 中的无条件执行指令,请一定不要使用 cond

Rn

是内存地址所基于的寄存器。

offset

是直接偏移量。 如果省略偏移量,则该地址为 Rn 中的值。

Rm

是一个寄存器,包含要用作偏移量的值。 Rm 不能为 r15。 对于 Thumb 指令, Rm 还不能为 r13。

shift

是一个可选的移位。

label

是一个程序相对的表达式。 有关详细信息,请参阅相对寄存器和程序相对的表达式

偏移量范围

预载前,会先将偏移量应用到 Rn 中的值。 所得结果将用作预载的内存地址。 偏移量的允许范围为:

  • –4095 到 +4095(ARM 指令)

  • –255 到 +4095(适用于 Rn 不是 r15 时的 Thumb-2 指令)。

  • –4095 到 +4095(适用于 Rn 为 r15 时的 Thumb-2 指令)。

汇编器会计算相对 PC 的偏移量。 如果 label 超出范围,则汇编器会生成错误。

寄存器或寄存器移位偏移量

在 ARM 中,Rm 中的值既可与 Rn 中的值相加,也可从其中减去。 在 Thumb-2 中,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 PLDPLDWPLI 指令。

这些是提示指令,其实现是可选的。 如果未实现,则这些指令作为 NOP 执行。

 

参考:http://blog.csdn.net/waverider2012/article/details/8538923

posted @ 2016-12-08 15:25  mlj318  阅读(3871)  评论(0编辑  收藏  举报