【问题标题】:What is an early register in ARM?什么是 ARM 中的早期寄存器?
【发布时间】:2016-10-19 10:20:43
【问题描述】:

我正在处理 armv7 中的异常返回和模式切换。我遇到了 RFE 和 SRS 说明。我通读了它们并偶然发现了这条线 “在所有情况下,基址寄存器都是早期寄存器,需要一个额外的结果延迟周期才能提供其值。”我觉得这很奇怪,因为我认为任何寄存器都会出现这种情况。

这是我第一次遇到这样的事情,我查看了架构参考手册,我找不到任何关于“早期注册”的描述。我想知道它们是什么以及它们是如何分类的?

【问题讨论】:

  • 任何关于周期的事情都是特定管道设计的微架构细节,因此了解您所引用的参考资料以及我们在这里谈论的具体 CPU 的上下文会有所帮助 -如您所见,这超出了架构本身的范围。
  • 啊,经过进一步检查,似乎对 ARMv7 的引用具有误导性,因为这来自 ARM11 TRM 之一的时序部分,which already explicitly defines the term...
  • RFE 和 SRS 指令也出现在 armv7 架构手册中。在关于这些指令的文献调查中,我发现了这个“早期注册概念”。上面的链接给出了早期寄存器的一个相当复杂的定义“在 Sh、MAC1 和 ADD 阶段的开始需要指定的寄存器。将一个周期添加到产生该寄存器的指令的结果延迟以进行互锁计算。”可能我需要更多地研究 ARM 中的流水线阶段才能掌握它。

标签: assembly arm cpu-architecture


【解决方案1】:

考虑这个示例代码:

LDR R3, [R0,#0x04]
CMP R3, R2

现在在这种情况下,加载指令需要一些时钟周期来处理,并且该值不能立即用于比较指令。在这种情况下,核心将停止直到 +k 个周期过去,因为我们在实际写入结果之前使用 R3 earlier

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 2021-02-27
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多