2012-04-04 128 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年〜