优化了来自C的MIPS指令立即返回?

  • 本文关键字:指令 返回 MIPS 优化 c mips
  • 更新时间 :
  • 英文 :


我一直在玩Godbolt,看看编译器如何优化指令,我注意到的是简单C程序的优化似乎在没有实际计算的情况下立即返回。假设我在Godbolt中有一个非常简单的程序(这里(:

int square(int num) {
return num * num;
}
int main(int argc, const char* argv[]){
return square(argc);
}

MIPS 指令输出为:

square:
j       $31
mul     $2,$4,$4
main:
j       $31
mul     $2,$4,$4

根据我对MIPS的回忆,这不就是立即跳到$ra寄存器,实际上什么都不做吗?我认为一旦我们j $31或跳转到返回地址(而不是执行jal(,我们实际上就是从该函数返回。那么,如果它在进行乘法之前返回,这是如何工作的呢?

我完全不是一个汇编人,但我不久前确实读过这个。答案是:分支延迟槽。在这里阅读更多: https://devblogs.microsoft.com/oldnewthing/20180411-00/?p=98485

执行分支指令

时,即使采用分支,也会执行分支指令之后的指令。分支本身延迟一条指令。

最新更新