内部函数_mm_slli_si128
将在128位寄存器的左侧进行逻辑移位,但仅限于立即移位值,并且按字节而不是位移位.
我可以使用内部函数_mm_sll_epi64
或_mm_sll_epi32
在__m128i
寄存器中向左移动一组值,但这些值不带"溢出"位.
对于N位移位想象我可以做类似的事情:
_mm_sll_epi64
_mm_srr_epi64
(对于我想要携带的位:将它们移动到低位)(但可能还必须包括N相对于64的检查).
有没有更好的办法?
不是您理想的解决方案,但如果您想将 SSE 寄存器旋转或移位为 8 的倍数的位数,则PSHUFB
指令(和_mm_shuffle_epi8()
内在的)可以提供帮助。它需要第二个 SSE 寄存器作为输入;寄存器中的每个字节保存一个值,用于索引第一个输入寄存器中的字节。