int
バッファから128ビットのint
ベクトルレジスタを逆順にロードするSSE2命令はありますか?逆順の整数をロードするSSE2命令
7
A
答えて
10
それは通常の負荷後に32ビットint
要素を逆にすることは非常に簡単です:あなたは16ビットshort
要素に対して同じことを行うことができます
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi32(v, _MM_SHUFFLE(0, 1, 2, 3)); // PSHUFD - mask = 00 01 10 11 = 0x1b
が、それはより多くの命令を取る:
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi32(v, _MM_SHUFFLE(0, 1, 2, 3)); // PSHUFD - mask = 00 01 10 11 = 0x1b
v = _mm_shufflelo_epi16(v, _MM_SHUFFLE(2, 3, 0, 1)); // PSHUFLW - mask = 10 11 00 01 = 0xb1
v = _mm_shufflehi_epi16(v, _MM_SHUFFLE(2, 3, 0, 1)); // PSHUFHW - mask = 10 11 00 01 = 0xb1
これは、SSSE3が利用可能であれば、_mm_shuffle_epi8
(PSHUFB
)を使用するより少ない命令で行うことができます。
const __m128i vm = _mm_setr_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1);
// initialise vector mask for use with PSHUFB
// NB: do this once, outside any processing loop
...
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi8(v, vm); // PSHUFB
-2
EDIT:最も近い(と便利)固有_mm_loadr_ps
ある
(以下は、念のためにここでそれを残して、単精度浮動小数点スカラーのためです)。アドレスは16バイト境界に合わせる必要があります。
この組み込み関数は、(MOVAPS
+シャッフリング)よりもに変換されますが、
関連する問題
- 1. CコードのSSE2命令
- 2. 命令をレジスタにロード
- 3. スカラのバイトコードで不要なロード命令とストア命令
- 4. ARM Thumb命令セットを使用する場合、32ビット整数にアクセス(ロード/ストア)するのはアトミックですか?
- 5. RDTSCPと命令命令
- 6. MIPSアセンブリ命令数
- 7. 整数の文字列を逆順に入力する(C)
- 8. 降順のDateTime命令でN行を選択するQueryOver文
- 9. foo.class javaファイルの命令数
- 10. 命令レベルプロファイリング:命令ポインタの意味?
- 11. 8個の整数を格納するavx2命令は何ですか?
- 12. ロード命令の後にパイプラインが停止するが、追加命令の後にパイプラインが停止する
- 13. eclipseの命令で取った命令サイクルの数を調べる - Android
- 14. 整数を逆順に分割する3
- 15. CPUレジスタを含む命令をメモリ命令に変換する
- 16. TBB付きのいくつかの命令(SSE2、SSE4)でループを最適化する
- 17. JavaScript:関数実行命令
- 18. 整数の逆数
- 19. Visual Studioでデバッグ中に命令ポインタを逆方向にドラッグ
- 20. Java 7文字列スイッチの逆コンパイル:予期しない命令
- 21. 数字の逆順
- 22. "out"と "in"命令の特権命令はありますか?
- 23. "?"の後の複数の命令オペレータ
- 24. SPARQL ORフィルタ命令に優先順位はありますか?
- 25. ストリング命令
- 26. 命令コード
- 27. NASM命令シーケンス
- 28. ハイパージッガーノード - レッドクエリ命令
- 29. MIPSシフト命令
- 30. デコード68k命令
ありがとうPaul.Yourロジックは正常に動作しています。しかし、私は第2パラメータ "0x1B"の使用法を理解できませんでした。それは何らかのマスクですか?もう一つの疑問は..ショートで同じ作業をすることは可能でしょうか? – Andy
ショートパンツの読み込みと逆転の2番目の例を追加しました。マスクはインテルのドキュメントでカバーされていますが、ビルド方法を示すコメントが追加されています。 –
P.S. [Intel Intrinsics Guide](http://software.intel.com/en-us/articles/intel-intrinsics-guide)をダウンロードすることを強くお勧めします。これはWIN/Mac OS X/Linux用の非常に便利なツールです。 SSE/AVX命令と組み込み関数を非常にアクセスしやすくします。 –