私はVisual C++ 2012を使用してSSE組み込み関数を使い始めましたが、いくつかのポインタが必要でした。2組の4つのショートパンツをXMMレジスタにロードする方法は?
私はそれぞれ4個のsigned short
を含む2つの配列を持っています(各配列は64ビットなので合計128です)。 XMMレジスタの上位ビットに1をロードし、下位ビットに1をロードします。 SSE組み込み関数を使用してこれを効率的に達成できますか?もしそうなら、どうですか?
私はVisual C++ 2012を使用してSSE組み込み関数を使い始めましたが、いくつかのポインタが必要でした。2組の4つのショートパンツをXMMレジスタにロードする方法は?
私はそれぞれ4個のsigned short
を含む2つの配列を持っています(各配列は64ビットなので合計128です)。 XMMレジスタの上位ビットに1をロードし、下位ビットに1をロードします。 SSE組み込み関数を使用してこれを効率的に達成できますか?もしそうなら、どうですか?
SSE2:A
またはB
ための位置合わせ要件がないこと
short A[] = {0,1,2,3};
short B[] = {4,5,6,7};
__m128i v;
v = _mm_loadl_epi64((const __m128i*)A);
v = _mm_insert_epi64(v,*(const long long*)B,1);
// v = {0,1,2,3,4,5,6,7}
注:+ x64の
short A[] = {0,1,2,3};
short B[] = {4,5,6,7};
__m128i a,b,v;
a = _mm_loadl_epi64((const __m128i*)A);
b = _mm_loadl_epi64((const __m128i*)B);
v = _mm_unpacklo_epi64(a,b);
// v = {0,1,2,3,4,5,6,7}
SSE4.1。しかし、私は両方ともとにかく8バイトに調整することをお勧めしたいと思います。
SSE4.1は許可されていますか? – Mysticial
私はそう思いますが、可能であれば、直接命令を書くのではなく、使用可能な組み込み関数を使用したいと考えています。 – Asik