在__m128上直接移位32位的最快方法(Intel Intrinsics)

时间:2013-10-26 01:36:45

标签: c caching optimization intel intrinsics

我有一个128位变量,填充了4个单独的整数。 [1,2,3,4]。我想向右移,所以我可以[2,3,4,0]。什么是最快的方法。

我目前的代码:

__m128 v1;
v1 = (__m128)_mm_srli_si128(  _mm_castps_si128(v1) , 4 );

这成功地改变了比特,但我正在努力寻求速度和缓存优化(尽可能少的变量)。反正是否有改进此代码以避免与__m128i进行转换?

感谢

1 个答案:

答案 0 :(得分:1)

不要担心。 __m128__m128i是解释XMM寄存器内容的两种不同方式,因此转换在编译中消失。我的编译器(Mac OS 10.9上的clang)将整个内容编译成一条指令:

psrldq $0x4, %xmm0