2012-02-20 60 views
1

我在ubuntu linux系統上遇到SSE問題。在msdn(sse4) 使用SSE4.1操作如何使用SSE指令?

示例源代碼的Linux

gcc -o test test.c -msse4.1 

那麼錯誤信息:

error: request for member 'm128i_u16' in something not a structure or union 

我如何使用這個例子的代碼? 或者任何示例代碼都可以使用?

+10

因此,您在GCC上使用* Microsoft編譯器*內部函數時遇到問題。這會讓你感到驚訝嗎? – 2012-02-20 04:45:38

回答

2

這不是微軟特有的內在函數,而是關於數據類型。實際的內在函數在兩種編譯器中都是100%相同的,並且是事實上的標準(源於英特爾)。

您面臨的問題是,__m128i類型作爲便利功能在MSVC下爲union,其中包括m128i_u16等字段。您鏈接的代碼示例假定了這一點。

根據海灣合作委員會,__m128i不是一個聯盟,因此,毫不奇怪,沒有這些領域。這並不是一個壞處,因爲像這樣訪問一個聯合中的字段可以消除你在使用SSE時可能帶來的任何收益,所以除了像上面這樣的演示片段之外,你將(幾乎)永遠不想使用這樣的一個事情。