Gcc 寄存器中的函数参数

Gcc 寄存器中的函数参数,gcc,arm,Gcc,Arm,有没有一种方法可以禁用使用gcc 3.3.1 for ARM在寄存器中传递函数参数?也许您正在寻找这些选项之一 -mabi=name Generate code for the specified ABI. Permissible values are: `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. -mabi=名称 为指定的ABI生成代码。允许值为:`apcs gnu'、`atpcs'、`aapcs'、`aapcs linu

有没有一种方法可以禁用使用gcc 3.3.1 for ARM在寄存器中传递函数参数?

也许您正在寻找这些选项之一

-mabi=name Generate code for the specified ABI. Permissible values are: `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. -mabi=名称 为指定的ABI生成代码。允许值为:`apcs gnu'、`atpcs'、`aapcs'、`aapcs linux'和`iwmmxt'。
如果没有,如果有什么,则可能是一个编译时选项(当编译gcc时)。

是。我看到dwelch给出了一个全局答案,但是如果您希望逐个函数地进行此操作,那么请将gcc
\uuuu属性\uuuuu
regparm
一起使用。iirc,应该是这样的:

int __attribute__((regparm(0))) function(int a, char b) { ... }

据我所知没有。但是它是gcc——如果您愿意做一些工作,您可以修改源代码。不过,对外行来说并非如此。您知道这将导致您的代码违反ARM EABI(嵌入式应用程序二进制接口),对吗?+1@Dan。你能解释一下你为什么要这样做吗?我遇到过类似的情况。我的问题是,我正在将几个结构参数传递给asm函数。第一个结构的一半在r3中结束,其他所有内容都在堆栈中。如果所有的结构都是相同的(即在堆栈上),那么就更方便了。这些只是基本ABI的小变体。它们都在寄存器中传递前4个32位值。