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

有帮助吗?

解决方案

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top