gpt4 book ai didi

gcc - 更改 GCC 的输出以进行 0-set(清除)操作

转载 作者:行者123 更新时间:2023-12-01 01:40:56 25 4
gpt4 key购买 nike

GCC 经常产生以下 x86 程序集来设置 eax 中的值在返回给调用者之前到 0:

xor eax, eax

为了我可以做吗?,而不是我应该做吗?,是否可以更改 GCC 的行为以生成“等效”程序集?另外,这一代发生在libgcc的什么地方?

澄清一下,我不是在寻找关于哪些汇编指令适合使用的指导,我想知道如何改变 GCC 的输出行为。

最佳答案

你的意思是像 sub eax,eax这是仅在某些 CPU 上被特别识别为归零习语,而不是全部?

优化是作为 -fpeephole2 的一部分完成的,作为 -O2 的一部分或 -Os ;使用 -fno-peephole2会给你mov eax,0用于实现 0在一个寄存器中。 (以及我假设创建其他错过的优化!异或归零可能不是 gcc 寻找的唯一窥视孔。)

我不知道在哪里查看 gcc 源代码,但知道该选项可能有助于追踪它。

不过,它不在“libgcc”中,它是 32 位机器上的 64 位乘法等辅助函数。 (当 gcc 发出对类似 __udivdi3 之类的有趣命名帮助函数的调用时,它期望 asm 输出与 libgcc 链接)。

更像是您会在 x86 机器定义文件中找到它,这是 .md 之一。 gcc 源代码树中的文件。否则硬编码到 C 优化函数中。赞 "xor %1, %0"可能是要搜索的东西,或者更有可能是 {... | ...}方言替代品。但是在xor上搜索助记符可能仍然有帮助。

这是一个半途而废的部分答案。如果您知道在哪里看,请发布具体答案或至少发表评论。

关于gcc - 更改 GCC 的输出以进行 0-set(清除)操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475961/

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