gcc - 将 GCC 的输出更改为 0-set(清除)操作
问题描述
GCC 通常会生成以下 x86 程序集以eax
在返回给调用者之前将值设置为 0:
xor eax, eax
我可以这样做吗?,而不是我应该这样做吗?,是否可以改变 GCC 的行为以产生“等效”程序集?另外,这一代发生在 libgcc 的什么位置?
为了澄清,我不是在寻找适合使用哪些汇编指令的指导,我想知道如何改变 GCC 的输出行为。
解决方案
您的意思是像sub eax,eax
which 在某些 CPU 上被特别识别为归零习语,而不是全部?
优化是作为的一部分-fpeephole2
,作为-O2
或的一部分-Os
;using-fno-peephole2
会给你mov eax,0
实现0
一个寄存器。(我认为除了创建其他错过的优化之外!异或归零可能不是 gcc 寻找的唯一窥视孔。)
我不知道在哪里查看 gcc 源代码,但知道该选项可能有助于追踪它。
但它不在“libgcc”中,它是 32 位机器上的 64 位乘法等辅助函数。(当 gcc 发出对类似 的有趣命名的辅助函数的调用时__udivdi3
,它期望 asm 输出与 libgcc 链接)。
更像是在 x86 机器定义文件中找到它,这.md
是 gcc 源代码树中的文件之一。否则硬编码到 C 优化函数中。就像"xor %1, %0"
可能是要搜索的东西,或者更有可能它会有{... | ...}
方言替代品。但是搜索xor
助记符可能仍然有帮助。
这是一个半途而废的部分答案。如果您知道在哪里看,请发布具体答案或至少发表评论。
推荐阅读
- python - 熊猫从右向左拉出部分弦后第二次。否则先。如果 2 不存在
- python-3.x - python字典上的条件
- css - IE11中的Scss缩放图像
- sql - 嵌入式 R 执行问题:SQL 接口 (ORE) - 更简单
- javascript - 与谷歌地图相比,Directions API 返回不同的方向
- python-3.x - 在 python 中将外部模块和库添加到我自己的模块中
- powerbi - Power BI 相当于 SSRS 组
- office365 - 是否可以更改已部署的 Office 365 加载项的显示名称?
- editorconfig - EditorConfig 部分继承
- c++ - 如何使用 Adobe Acrobat SDK (C++) 创建一个使用自定义图标添加图章注释的插件?