5

我想在我的 C 代码中编写一些内联 ARM 程序集。对于此代码,我需要使用一个或两个以上的寄存器,而不仅仅是声明为函数的输入和输出的寄存器。我知道如何使用 clobber 列表告诉 GCC 我将使用一些额外的寄存器来进行计算。

但是,我确信 GCC 在优化时可以自由地调整哪些寄存器用于什么。也就是说,我觉得在计算中使用固定寄存器是个坏主意。

在不使用固定寄存器的情况下,使用既不是我的内联程序集的输入也不是输出的额外寄存器的最佳方法是什么?

PS我在想使用虚拟输出变量可能会奏效,但我不确定会产生什么样的奇怪的其他效果......

4

1 回答 1

5

好的,我找到了一个支持使用虚拟输出而不是硬寄存器的想法的来源:

4.8 临时寄存器:人们有时也会错误地使用clobbers 作为临时寄存器。正确的方法是组成一个虚拟输出,并根据允许与输入的重叠使用“=r”或“=&r”。GCC 为虚拟值分配一个寄存器。不同之处在于 GCC 可以选择一个方便的寄存器,因此它具有更大的灵活性。

这个pdf的第20页开始。

对于任何对 GCC 内联汇编的更多信息感兴趣的人,这个网站被证明是非常有启发性的。

于 2012-01-04T11:24:13.860 回答