jmpl 和 restore 指令顺序在 SPARC 中重要吗?
Is the jmpl and restore instruction order important in SPARC?
我读到 here jmpl
指令必须 后跟 nop
。
SPARC V8 手册告诉我 rett
指令必须始终 前面有 一条 jmpl
指令。
但是,我无法找到 jmpl
和 restore
指令之间的关系。我目前正在研究 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的正常顺序.
我读到 here jmpl
指令必须 后跟 nop
。
SPARC V8 手册告诉我 rett
指令必须始终 前面有 一条 jmpl
指令。
但是,我无法找到 jmpl
和 restore
指令之间的关系。我目前正在研究 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 bynop
.
...您链接的页面会告诉您原因:
So when you program in SPARC, follow every
call
andjmpl
instructions with anop
instruction to avoid executing an extra instruction unintentially ...
这意味着:nop
不是CPU的要求,而是网页作者对程序员避免错误的建议。
在 the same course 的另一页上,作者解释说专业程序员(或 C 编译器)会使用以下序列从函数 return:
jmpl %i7+8, %g0
restore
这意味着不仅允许在jmpl
指令的延迟槽中使用restore
,而且它甚至是函数returning的正常顺序.