私はWindowsからLinuxにいくつかのSSE最適化コードを移植しています。そして、私は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配列を初期化する他の方法はありますか?静的に優れているので、次のコードを多く変更する必要はありません(次の形式のコードがたくさんあるため)。どんな提案も感謝しています。__m128i配列をgccで静的に初期化するには?
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}
};
ありがとうございます@ジェイソン!私はあなたの方法を試して、それは非常にうまくいった。 (あなたの答えではuint8_tは配列に負の値が入っているのでint8_tでなければなりません。これはタイプミスかもしれません。 – shengbinmeng