jmpl 和 restore 指令顺序在 SPARC 中重要吗?

Is the jmpl and restore instruction order important in SPARC?

我读到 here jmpl 指令必须 后跟 nop

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

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

jmpl 之后 restore 是否正确?

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

I read here that a jmpl instruction must be followed by nop.

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

So when you program in SPARC, follow every call and jmpl instructions with a nop instruction to avoid executing an extra instruction unintentially ...

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

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

jmpl %i7+8, %g0
restore

这意味着不仅允许在jmpl指令的延迟槽中使用restore,而且它甚至是函数returning的正常顺序.