我有一个128位变量,填充了4个单独的整数。 [1,2,3,4]。我想向右移,所以我可以[2,3,4,0]。什么是最快的方法。
我目前的代码:
__m128 v1;
v1 = (__m128)_mm_srli_si128( _mm_castps_si128(v1) , 4 );
这成功地改变了比特,但我正在努力寻求速度和缓存优化(尽可能少的变量)。反正是否有改进此代码以避免与__m128i进行转换?
感谢
答案 0 :(得分:1)
不要担心。 __m128
和__m128i
是解释XMM寄存器内容的两种不同方式,因此转换在编译中消失。我的编译器(Mac OS 10.9上的clang)将整个内容编译成一条指令:
psrldq $0x4, %xmm0