SSE移位指令将带有_mm_set1_epi32()的向量归零,用于计数向量?

问题描述 投票:1回答:1

这里是情况:m3 = _mm_srli_epi32(m2, 23);完全符合预期,

[m3 = _mm_srl_epi32(m2, shift);但是(shift初始化为__m128i shift = _mm_set1_epi32(23);)产生零。

我已经检查过,shift确实具有应有的值。我可能会缺少一些简单的东西吗?

sse simd
1个回答
0
投票

_mm_srl_epi32 (__m128i a, __m128i count)”将计数作为计数向量的低64位。 _mm_srl_epi32 (__m128i a, __m128i count)set1_epi32(32),它是移出所有位的巨大数字。

SSE移位会使计数饱和(与掩盖计数的标量移位不同)。

您希望(23<<32) | 23将单个_mm_cvtsi32_si128(int)零扩展为int,或者,如果移位计数已经在向量中,则需要将其隔离在向量的低64位中, AND,随机播放或其他内容。

[__m128i可以将64位元素零扩展为128,但是32位元素没有等效项。

© www.soinside.com 2019 - 2024. All rights reserved.