【发布时间】:2013-09-13 12:46:31
【问题描述】:
我正在尝试弄清楚如何使用 sse _mm_shuffle_epi8 来压缩 128 位寄存器。
假设我有一个输入变量
__m128i target
基本上是8个16位,表示为:
a[0], a[1] ... a[7]. // each slot is 16 bits
我的输出被调用:
__m128i output
现在我有一个大小为 8 的位向量:
char bit_mask // 8 bits, i-th bit each indicate if
// the corresponding a[i] should be included
好的,如何根据bit_mask和输入目标得到最终结果?
假设我的位向量是:
[0 1 1 0 0 0 0 0]
那么我想要的结果是:
output = [a1, a2 , ... ]
任何已知的使用 _mm_shuffle_epi8 的方法?
假设我使用查找数组: _mm_shuffle_epi8(a, mask_lookup[bitvector]);
如何创建数组?
【问题讨论】:
-
那么,您想从 8 个 16 位数字中的每一个中选出第 5 位?