我正在將一些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數組?靜態更好,不需要修改以下代碼(因爲我有以下格式的大量代碼)。任何建議表示讚賞。如何在gcc中靜態初始化__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}
};
謝謝@Jason!我試過你的方法,它工作得很好。 (在你的答案中,uint8_t應該是int8_t,因爲數組包含負值。這可能是一個錯字,你可以編輯你的答案,使其完美:) – shengbinmeng 2013-03-19 14:29:50