代码之家  ›  专栏  ›  技术社区  ›  florin

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

  •  13
  • florin  · 技术社区  · 18 年前

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   C. K. Young    18 年前

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

        2
  •  1
  •   Dark Shikari    18 年前

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