0

これは関数のプロトタイプです:

v4si __builtin_ia32_shufps (v4si, v4si, int)

一部のWebサイトでは、intフィールドに16進数しかなく、上位ビットと下位ビットが分離されているように見えましたが、必要なのは論理的な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

2つのベクトルを使用して例を見ると、おそらく探しているのは_mm_alignr_epi8(PALIGNR)だと思います。これは、ベクトルのペアを任意のバイトsizeof(int)数だけシフトする場合に機能するため、シフトパラメータに次のように乗算する必要があります。

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

この命令はSSSE3以降でのみ使用可能であることに注意してください。これは、2005年以降のほとんどすべてのIntelCPUを意味します。

于 2012-04-05T05:50:58.600 に答える