【发布时间】:2013-01-21 09:02:25
【问题描述】:
我正在使用 VS2005(在工作中)并且需要执行以下操作的 SSE 内在函数:
我有一个预先存在的__m128i n 填充了 16 位整数 a_1,a_2,....,a_8。
由于我现在想做的一些计算需要 32 位而不是 16 位,我想从 n 中提取两个四组 16 位整数并将它们放入两个分开的 @987654325 @s 分别包含 a_1,...,a_4 和 a_5,...,a_8。
我可以使用各种 _mm_set 内在函数手动执行此操作,但这些会导致汇编中有八个 movs,我希望有更快的方法来执行此操作。
【问题讨论】:
-
看看这些SSE4.1 intrinsics。你可以通过使用其中的两个和一个 unpack/shuffle 来得到你想要的。
-
我认为它们在 VS2005 中不可用。
-
Eek... VS2005。告诉你的老板烧掉它……用火烧掉。 :)
-
否则......你会被一堆乱七八糟的洗牌、轮班和面具困住。