0

这是函数的原型:

v4si __builtin_ia32_shufps (v4si, v4si, int)

在一些网站上,我发现它们在 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 是执行此操作的正确命令吗?

4

1 回答 1

2

用两个向量查看您的示例,我认为您可能正在寻找的是_mm_alignr_epi8 (PALIGNR)。这适用于将一对向量任意移位任意字节数,因此您需要将移位参数乘以sizeof(int),例如

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

请注意,此指令仅在 SSSE3 及更高版本中可用,这意味着自 2005 年以来几乎所有的英特尔 CPU。

于 2012-04-05T05:50:58.600 回答