12

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

4

2 回答 2

2

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

于 2008-09-23T22:58:57.500 回答
1

如果您要为每个内在函数指定单独的寄存器,那么您最好只编写程序集目录,特别是考虑到 gcc 在许多情况下不必要地悲观内在函数的讨厌习惯。

于 2008-09-23T23:06:46.703 回答