Windows'tan Linux'a bazı SSE optimizasyon kodlarını yerleştiriyorum. Ve MSVC'de iyi çalışan aşağıdaki kodun GCC'de çalışmayacağını buldum. Kod, bir __m128i dizisini başlatmaktır. Her __mi28i 16 int8_t içerir. Bu doz gcc ile derlenir, ancak sonuç beklendiği gibi değildir. Aslında, gcc, __m128i'yi "long long int" olarak tanımladığında, kod, bir dizi gibi bir diziyi başlatacaktır: long long int coeffs_ssse3 [4] = {64, 83, 64, 36}. Ben googled ve söylendi "Bir vektör başlatmak için sadece taşınabilir yolu _mm_set_XXX intrinsics kullanmaktır." Ancak, bilmek istiyorum __m128i dizisini başlatmak için başka bir yolu var mı? Statik olarak daha iyi ve aşağıdaki kodu çok değiştirmemize gerek yok (çünkü aşağıdaki formatta tonlarca kodum var). Herhangi bir öneri takdir edilir.__m128i dizisi gcc'de statik olarak nasıl başlatılır?
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}
};
Teşekkür ederiz @Jason! Yöntemini denedim ve çok iyi çalıştı. (Senin cevapta uint8_t, dizi negatif değerler içerdiğinden int8_t olmalı. Bu bir yazım hatası olabilir ve cevabını mükemmel yapmak için değiştirebilirsin :) – shengbinmeng