如何在使用内在函数时让GCC使用两个以上的SIMD寄存器?

时间:2008-09-23 22:49:23

标签: gcc assembly x86 sse simd

我正在编写一些代码并尝试使用SIMD内在函数SSE2 / 3来加速它。我的代码具有这样的性质,我需要将一些数据加载到XMM寄存器中并对其进行多次操作。当我查看生成的汇编程序代码时,GCC似乎不断将数据刷新回内存,以便在XMM0和XMM1中重新加载其他内容。我正在编译x86-64所以我有15个寄存器。为什么GCC只使用两个,我该怎么做才能让它使用更多?有什么方法可以“固定”寄存器中的某些值吗?我在我的变量定义中添加了“register”关键字,但生成的汇编代码是相同的。

2 个答案:

答案 0 :(得分:3)

是的,你可以。 Explicit Reg Vars讨论了将变量固定到特定寄存器所需的语法。

答案 1 :(得分:2)

如果你正在为每个内在函数指定单独的寄存器,那么你也可以编写汇编目录,特别是考虑到gcc在许多情况下不必要地使内在函数悲观化的讨厌习惯。