SSE,交错低字和高字

时间:2013-07-10 17:54:17

标签: performance assembly x86 sse

是否有单个 SSE指令将两个寄存器的高字和低字交错到另一个寄存器中?例如:

r[63-0]   = a[64-127]
r[64-127] = b[63-0]

1 个答案:

答案 0 :(得分:7)

不,因为没有SSE shuffle有两个来源和一个不同的目的地。但是,如果ra相同,shufpd,则可以执行此操作。如果您需要保留a的价值:

movapd r, a
shufpd r, b, 1

在最近的研究中,movapd是免费的并且在重命名[*]中处理,因此从执行核心的角度来看,这实际上是一条“单指令”。

如果AVX可用,您可以使用vshufpd

[*]可以使这种重命名功能饱和,在这种情况下,额外的reg-reg移动将像普通的端口0 | 1 | 5操作一样 - 幸运的是,真实世界的代码几乎总是在其中一个上有一些气泡这些举动往往仍然是“免费的”。