私はMS Visual StudioでSSE2命令セットを使って作業しています。私は16ビットのデータでいくつかの計算をするためにそれを使用しています。効率的に128ビット定数を定義するには?
SSEレジスタに8個の値がロードされているとします。すべてに定数(例:42
)を追加します。ここで私のコードを見たいと思う方法です。
__m128i values; // 8 values, 16 bits each
const __m128i my_const_42 = ???; // What should i write here?
values = _mm_add_epi16(values, my_const_2); // Add 42 to the 8 values
ここで定数を定義するにはどうすればよいですか?次の2つの方法が機能しますが、一方は非効率的で、もう一方は醜いです。
my_const_42 = _mm_set_epi16(42, 42, 42, 42, 42, 42, 42, 42)
- コンパイラは、「構築」するために8つのコマンドを生成する定my_const_42 = {42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0}
- 何が起こっているかを理解するのは難しいです。42
を例えばに変更します。-42
は簡単ではありません
128ビット定数をより便利に表現する方法はありますか?
おそらく2番目の方法のマクロを使用しても問題ありません – valdo