【发布时间】:2013-03-23 22:36:08
【问题描述】:
我必须提取 __m128i 寄存器的非零值。 例如,我有一个带有八条无符号短裤的向量。
__m128i vector {40, 0, 22, 0, 0, 0, 0, 8}
我想用最少的 SSE 指令提取 40、22 和 8。 然后将非零值存储在非零值数组中。
{40, 22, 8, more values from different vectors ... }
是否可以将它们洗牌,或者是否有一个好的内在提取和存储?
【问题讨论】:
-
我们可以假设 SSE 4 吗?
-
是的,我们可以,但我更喜欢 SSSE3。
-
非零值的顺序是否需要保留?
-
是的,保持非零值的顺序很重要。
标签: c performance sse simd