使用内在函数时,如何使GCC使用两个以上的SIMD寄存器?
时间:2020-03-06 14:38:01 来源:igfitidea点击:
我正在编写一些代码,并尝试使用SIMD内在函数SSE2 / 3加快速度。我的代码具有这种性质,我需要将一些数据加载到XMM寄存器中并对其进行多次操作。当我查看生成的汇编代码时,似乎GCC不断将数据刷新回内存,以便在XMM0和XMM1中重新加载其他内容。我正在为x86-64进行编译,所以我有15个寄存器。为什么GCC仅使用两个,我该怎么做才能要求更多呢?有什么方法可以"固定"寄存器中的某些值?我在变量定义中添加了" register"关键字,但是生成的汇编代码是相同的。
解决方案
是的你可以。显式Reg Vars讨论了将变量固定到特定寄存器所需的语法。
如果我们要为每个内在函数指定单独的寄存器,则最好只编写汇编目录,尤其是考虑到gcc讨厌在许多情况下不必要地对内在函数进行伪装的习惯。