2012-04-04 90 views
0

这是原型的功能:在INT场使用__builtin_ia32_shufps将矢量移位32位?

v4si __builtin_ia32_shufps (v4si, v4si, int) 

在某些网站上,我发现他们有,但十六进制,它看起来喜欢它分离的高和低的位,但我要的是一个合乎逻辑的32位移。

X3 X2 X1 X0 shifted by 32 bits to get X2 X1 X0 0 

使用2个v4si载体又如:

X7 X6 X5 X4 | X3 X2 X1 X0, where each X is a 32 bit and what I want for a shift is the 
same a logical shift, but with each vector element. So: 
X7 X6 X5 X4 | X3 X2 X1 X0 << 2 = X5 X4 X3 X2 | X1 X0 0 0 

是SHUFPS正确的命令来做到这一点?

+2

我想你的意思是“位”而不是“字节”。 – Mysticial 2012-04-04 23:13:42

+0

什么是'v4sf'定义为? – 2012-04-04 23:17:28

+0

正确我的意思是位,v4sf是一个128位向量,分成逻辑4个32位向量。我认为* – Jim 2012-04-04 23:18:56

回答

2

用两个向量来看你的例子,我想你可能要找的是_mm_alignr_epi8 (PALIGNR)。这适用于任意数量的字节的一对向量的任何移位,因此您需要将移位参数乘以sizeof(int)(例如,

v = _mm_alignr_epi8(v0, v1, 2 * sizeof(int)); 

注意,这个指令只有在SSSE3及更高版本,这意味着几乎所有的英特尔CPU,因为2005年〜