2013-10-26 32 views
2

我有一个128位的变量,里面填充了4个独立的整数。 [1,2,3,4]。我想向右移动,所以我可以得到[2,3,4,0]。什么是最快的方式来做到这一点。在__m128上正确移位32位的最快方法(Intel Intrinsics)

我当前的代码:

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

这成功地转移了位,但我试图去的速度和缓存优化(又名变量最少越好)。无论如何改善这个代码,以避免投掷和__m128i?

谢谢

+0

你可能没有意识到这一点,但当前的方法只需要1个寄存器。但是,您将会转换int <->转移延迟。 – Mysticial

回答

1

别担心。 __m128__m128i是解释XMM寄存器内容的两种不同方式,因此在编译中演员阵容消失。我的编译器(铛在Mac OS 10.9)编译整个事情到一个单一的指令,因为它代表:

psrldq $0x4, %xmm0 
相关问题