gpt4 book ai didi

c - 为什么 ICC 在 x86 上的汇编中生成 "inc"而不是 "add"?

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:35 24 4
gpt4 key购买 nike

在摆弄简单的 C 代码时,我注意到了一些奇怪的事情。为什么 ICC 在为增量生成的汇编代码中生成 incl %eax 而不是 addl $1, %eax?不过,GCC 的行为符合预期,使用 add

示例代码(-O3 用于 GCC 和 ICC)

int A, B, C, D, E;

void foo()
{
A = B + 1;
B = 0;
C++;
D++;
D++;
E += 2;
}

ICC 结果

L__routine_start_foo_0:
foo:
movl B(%rip), %eax #5.13
movl D(%rip), %edx #8.9
incl %eax #5.17
movl E(%rip), %ecx #10.9
addl $2, %edx #9.9
addl $2, %ecx #10.9
movl %eax, A(%rip) #5.9
movl $0, B(%rip) #6.9
incl C(%rip) #7.9
movl %edx, D(%rip) #9.9
movl %ecx, E(%rip) #10.9
ret

例如,参见 here .

因此,我想知道 - 这是预期的功能、错误还是某些特定设置导致的怪癖?如果 add 由于标志更新或效率(这是基于以下链接的结论)(据推测)更好 - 为什么 ICC 使用 inc

相关:

Relative performance of x86 inc vs. add instruction

Is ADD 1 really faster than INC ? x86

GCC doesn't make use of inc

注意:

我明确地问这个问题是因为我在 SO 上发现或针对的问题都没有解释这种行为。我之前关于此事的问题已经结束,因为据推测,这微不足道并且已得到回答。我不觉得这是微不足道的。我没有在所有给出的链接和答案中找到答案。这不是另一个“如何将我的鼠标插入我的电脑”的问题。所有的问题都解释了为什么 add 在新的 x86 处理器上是/可能更好或者为什么 GCC 使用它,但没有一个与 ICC 有关。

也非常欢迎任何关于 ICC 设计选择的见解。

PS 我不认为“它这样做是因为它确实如此”是一个有效的答案。

最佳答案

此时假设 incl 被选中并非不合理,因为它只需要一个字节 (0x40) 而不是三个字节 (0x83 0xc0 0x01)。

关于c - 为什么 ICC 在 x86 上的汇编中生成 "inc"而不是 "add"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25853357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com