SSE 最適化コードを Windows から Linux に移植しています。そして、MSVC ではうまく動作する次のコードが GCC では動作しないことがわかりました。
コードは、の配列を初期化することです__m128i
。それぞれ__mi28i
に 16 が含まれていますint8_t
。gcc でコンパイルしますが、結果は期待どおりではありません。
実際には、gcc が として定義している__m128i
ようlong long int
に、コードは次のような配列を初期化します。
long long int coeffs_ssse3[4] = {64, 83, 64, 36}
.
私はググって、「ベクトルを初期化する唯一の移植可能な方法は、_mm_set_XXX
組み込み関数を使用することです」と言われました。ただし、__m128i
配列を初期化する他の方法はありますか? 静的に優れており、次のコードをあまり変更する必要はありません (次の形式のコードが大量にあるため)。どんな提案でも大歓迎です。
static const __m128i coeffs_ssse3[4] =
{
{ 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0, 64, 0},
{ 83, 0, 36, 0,-36,-1,-83,-1, 83, 0, 36, 0,-36,-1,-83, -1},
{ 64, 0,-64,-1,-64,-1, 64, 0, 64, 0,-64,-1,-64,-1, 64, 0},
{ 36, 0,-83,-1, 83, 0,-36,-1, 36, 0,-83,-1, 83, 0,-36,-1}
};