首页 > 解决方案 > 我们可以为 gcc 上的特定功能添加 `-fcall-used-REG` 吗?

问题描述

我们可以告诉 gcc 特定函数不需要通过函数属性存储/恢复一些被调用者保存寄存器吗?我们可以通过-fcall-used-REGS文件来判断它,但文件中的所有功能都会受到影响。

我制作了一个汇编代码,其中存储了一些被调用者保存寄存器(例如,x86_64 上的 r12)并希望从 asm 代码中调用一些 C 函数。被调用函数不需要存储/恢复被调用者保存寄存器,因为 asm 代码存储/恢复它们,所以保存被调用者保存寄存器只是开销(被调用函数足够小,所以 pro/epilogue 代码的开销很大)。

标签: cgcc

解决方案


使用 pragma/attribute 优化可能是可能的,但实际上您应该将函数放在它们自己的文件中。这些函数必须完全独立,因为它们使用的是非默认 ABI。无论如何,将函数放在自己的文件中是一个好习惯。


推荐阅读