【问题标题】:ARm prfm and prfum instructionsARm prfm 和 prfum 指令
【发布时间】:2021-06-24 15:35:49
【问题描述】:

【问题讨论】:

  • 我认为与ldrldur 之间的区别相同。 LDUR and STUR in ARM v8。还是比例因子1 无论如何,比如字节加载?在那种情况下没有差异?
  • 手册没有详细介绍机器代码,但是 PRFM 提到了从当前位置偏移 +-1MiB,所以它可能使用 line-size 作为 PC-relative 的比例因子一个寄存器。
  • arm 文档的哪一部分你不明白?请发布令人困惑的部分以及您认为它们是什么意思或不是什么意思

标签: assembly arm arm64 prefetch addressing-mode


【解决方案1】:

对于此类问题,您的主要来源是 ARMv8 架构参考手册。我手头正好有 E.a 版,所以页码将引用该版。

在 C6-1136 页上,描述了PRFM(立即)。它允许预取相对于基址寄存器中的值在 0 到 +32760 范围内的偏移量为 8 的倍数的数据。

在 C6-1142 页上,描述了PRFUM。它允许预取相对于基址寄存器中的值在 -256 到 +255 范围内的任何偏移量(不仅仅是 8 的倍数)的数据。

因此,如果您需要(出于某些原因,例如使用字符串)以字节精度进行预取,或者您需要使用负偏移量进行预取,则必须使用PRFUM。另一方面,如果要预取 256 或更高的偏移量,则必须使用 PRFM

【讨论】:

  • 如果你写PRFM PLDL1KEEP, [X0, #37]之类的东西,至少GNU汇编器会自动编码PRFUM,所以你实际上不必注意区别。您可以将其视为PRFM 可用的两种不同的寻址模式。 LDR/LDURSTR/STUR 也是如此。
  • 所以这是官方 ARM 指令的另一个例子,它提供了二进制操作码和汇编语言源文本之间的 1:1 映射。有两种方法可以对PRFM PLDL1KEEP, [X0, #32] 描述的操作进行编码。为了提供唯一的反汇编程序输出,其中一种编码称为PRFM,而另一种称为PRFUM。为方便起见,gas 等有用的汇编程序将两条指令统一起来,具​​有不同的寻址能力,因此程序员不必担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
相关资源
最近更新 更多