是否有可能说服GCC模仿快速呼叫呼叫约定?
时间:2020-03-06 15:03:35 来源:igfitidea点击:
所以我有一个程序集需要在Windows上使用fastcall调用约定来调用函数,但是gcc不(支持)支持它。 GCC确实提供了regparm属性,但是它希望前三个参数在eax,edx和ecx中传递,而fastcall期望前两个参数在ecx和edx中传递。
我只是想避免有效地复制一些代码路径,因此这并不是很严格,但是如果可以避免的话,那就太好了。
解决方案
如果要从asm调用该函数,那么可以肯定地完全控制了该函数的调用方式。是什么阻止我们仅加载寄存器并发出CALL
?
GCC确实通过__attribute __((fastcall))
支持fastcall
。它似乎已在GCC 3.4中引入。