【问题标题】:Optimized MIPS instructions from C returning immediately?来自 C 的优化 MIPS 指令立即返回?
【发布时间】:2019-12-17 15:04:21
【问题描述】:

我一直在使用 Godbolt 来了解编译器如何优化指令,我注意到简单 C 程序的优化似乎如何立即返回而无需实际进行计算。假设我在 Godbolt 中有一个非常简单的程序 (here):

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),我们就会有效地从该函数返回。那么,如果它在进行乘法之前返回,它是如何工作的呢?

【问题讨论】:

标签: c mips


【解决方案1】:

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

当你执行分支指令时,执行分支指令之后的指令,即使分支被执行。分支本身被一条指令延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多