这里的情况:m3 = _mm_srli_epi32(m2, 23);
完全符合预期,但是m3 = _mm_srl_epi32(m2, shift);
(shift
初始化为__m128i shift = _mm_set1_epi32(23);
)产生零。我已经检查过,shift
确实具有它应该具有的值。我可能会缺少一些简单的东西吗?
_mm_srl_epi32 (__m128i a, __m128i count)
”将计数作为计数向量的低64位。 set1_epi32(32)
是(23<<32) | 23
,它是移出所有位的巨大数字。
SSE移位会使计数饱和(与掩盖计数的标量移位不同)。