我有一个 __m128i
寄存器,其中包含 8 位值,内容为:
{-4,10,10,10,10,10,10,-4,-4,10,10,10,10,10,10,-4}
现在我想将它转换为 _m128i
寄存器中的八个 16 位值。它应该看起来像:
{-4,10,10,10,10,10,10,-4}
如何用尽可能少的指令做到这一点? 我最多想用SSSE3。
最佳答案
假设您只想要 16 个值中的前 8 个值而忽略其他 8 个值(您提供的示例数据有些模糊),那么您可以像这样使用 SSE2:
v = _mm_srai_epi16(_mm_unpacklo_epi8(v, v), 8);
关于将 8 位 sse 寄存器转换为 16 位短路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069976/