【问题标题】:Is the jmpl and restore instruction order important in SPARC?SPARC 中的 jmpl 和 restore 指令顺序重要吗?
【发布时间】:2020-12-21 15:54:49
【问题描述】:

我读到herejmpl 指令必须后跟 nop

SPARC V8 手册告诉我,rett 指令必须始终前面有jmpl 指令。

但是,我无法找到 jmplrestore 指令之间的关系。我目前正在研究 SPARC V8 体系结构,我遇到的 ELF 文件之一在jmpl 之后有一个restore,而我预计是nop。我不知道这是正确的还是 ELF(以及扩展的 SPARC 代码)是错误的。

restore 紧跟在jmpl 之后是否正确?

【问题讨论】:

  • 这称为分支延迟槽。 跳转后的指令总是在跳转动作之前执行。在现代 SPARC 实施中,出于 CPU 设计原因,将这些插槽留空通常更快。我想他们已经硬编码了一些常见的特殊情况,比如jmpl; rett

标签: assembly io sparc


【解决方案1】:

我在这里读到jmpl 指令后面必须跟nop

...您链接的页面会告诉您原因:

因此,当您在 SPARC 中编程时,请在每条 calljmpl 指令之后使用 nop 指令以避免无意中执行额外的指令 ...

这意味着:nop 不是 CPU 的要求,但它是网页作者对程序员避免错误的建议。

the same course 的另一页上,作者解释说专业程序员(或 C 编译器)会使用以下序列从函数返回:

jmpl %i7+8, %g0
restore

这意味着不仅允许在jmpl指令的延迟槽中使用restore,甚至是函数返回的正常顺序。

【讨论】:

    【解决方案2】:

    您不需要nop。请注意,jumpl 之后的指令将被执行,因为它还在流水线中。所以jmpl 后跟rett 执行jumpl rett。大概这是一个中断服务程序或类似的?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2017-12-10
      • 2016-10-24
      • 2014-08-06
      • 2018-01-09
      • 1970-01-01
      • 2017-11-19
      相关资源
      最近更新 更多