我在ubuntu linux系统上遇到SSE问题。
msdn(sse4)上的示例源代码 在linux上使用sse4.1操作
gcc -o test test.c -msse4.1
然后出现错误信息:
error: request for member 'm128i_u16' in something not a structure or union
如何使用此示例代码? 或者任何示例代码都可以使用?
答案 0 :(得分:3)
代码示例的标题是“Microsoft Specific”。这意味着这些函数特定于c ++的microsoft实现,而不是跨平台的。 Here are some Intel-specific guides to SSE instructions. Here is gcc documentation concerning command-line flags for specific assembly optimizations, including SSE.祝你好运,SSE可能会有点毛茸茸。
答案 1 :(得分:2)
这不是关于Microsoft特有的内部函数,而是关于数据类型。实际的内在函数在两个编译器中都是100%相同的,并且是事实上的标准(源自英特尔)。
您遇到的问题是,__m128i
类型是 - 作为便利功能 - MSVC下的union
,其中包含m128i_u16
等字段。您链接的代码示例假定为此。
在gcc下,__m128i
不是一个联盟,因此,毫无疑问,它没有这些字段。这并不是一个真正的缺点,因为访问这样的联盟中的字段会消除您在使用SSE时可能获得的任何收益,所以除了上面的演示片段之外,您(几乎)永远不会想要使用这样的的事情。