gpt4 book ai didi

optimization - 为什么 GCC 需要出于神秘原因清除 edx?

转载 作者:行者123 更新时间:2023-12-02 11:11:02 35 4
gpt4 key购买 nike

考虑以下代码:

int isqrt(int x) {
unsigned int r;

r = x >> 7;

r += x / r;
r >>= 1;
r += x / r;
r >>= 1;
r += x / r;
r >>= 1;

return r;
}

gcc -O3 isqrt.c -S 生成:

_isqrt:
pushl %ebx
movl 8(%esp), %ecx
movl %ecx, %ebx
sarl $7, %ebx
movl %ecx, %eax
xorl %edx, %edx ; huh?
divl %ebx
addl %eax, %ebx
shrl %ebx
movl %ecx, %eax
xorl %edx, %edx ; huh?
divl %ebx
addl %eax, %ebx
shrl %ebx
movl %ecx, %eax
xorl %edx, %edx ; huh?
divl %ebx
addl %ebx, %eax
shrl %eax
popl %ebx
ret

为什么会无缘无故地清除%edx 3次?

最佳答案

divl x%edx:%eax 除以 x,因此 %edx 应该是感(通常为零)。它还将余数放入 %edx 中,因此必须再次清除,而不仅仅是一次。

关于optimization - 为什么 GCC 需要出于神秘原因清除 edx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12459846/

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