小编Bra*_*don的帖子

GCC x86-64装配输出次优,为什么?

查看以下代码的程序集输出时(无优化,-O2和-O3产生非常相似的结果):

int main(int argc, char **argv)
{
    volatile float f1 = 1.0f;
    volatile float f2 = 2.0f;

    if(f1 > f2)
    {
        puts("+");
    }
    else if(f1 < f2)
    {
        puts("-");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会做了一些我很难遵循的事情:

.LC2:
    .string "+"
.LC3:
    .string "-"
    .text
.globl main
    .type   main, @function
main:
.LFB2:
    pushq   %rbp
.LCFI0:
    movq    %rsp, %rbp
.LCFI1:
    subq    $32, %rsp
.LCFI2:
    movl    %edi, -20(%rbp)
    movq    %rsi, -32(%rbp)
    movl    $0x3f800000, %eax
    movl    %eax, -4(%rbp)
    movl    $0x40000000, %eax
    movl    %eax, -8(%rbp)
    movss   -4(%rbp), %xmm1 …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc x86-64

8
推荐指数
1
解决办法
1706
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1

x86-64 ×1