SSE intrinsics编译带有GCC错误的MSDN代码?

SSE intrinsics编译带有GCC错误的MSDN代码?,gcc,struct,sse,intrinsics,Gcc,Struct,Sse,Intrinsics,我想知道它们是否与规范有点不同,因为我尝试用带有标志的GCC编译这段代码-msse-msse2-msse3-msse4 #include <stdio.h> #include <smmintrin.h> int main () { __m128i a, b; a.m128i_u64[0] = 0x000000000000000; b.m128i_u64[0] = 0xFFFFFFFFFFFFFFF; a.m128i_u64[1] =

我想知道它们是否与规范有点不同,因为我尝试用带有标志的GCC编译这段代码
-msse-msse2-msse3-msse4

#include <stdio.h>
#include <smmintrin.h>

int main ()
{
    __m128i a, b;

    a.m128i_u64[0] = 0x000000000000000;
    b.m128i_u64[0] = 0xFFFFFFFFFFFFFFF;

    a.m128i_u64[1] = 0x000000000000000;
    b.m128i_u64[1] = 0x000000000000000;

    int res1 = _mm_testnzc_si128(a, b);

    a.m128i_u64[0] = 0x000000000000001;

    int res2 = _mm_testnzc_si128(a, b);

    printf_s("First result should be 0: %d\nSecond result should be 1: %d\n",
                res1, res2);

    return 0;
}

在我看来,我需要为
\uu m128i
创建
struct
,尽管如果其他人知道这个问题,可能会有更好的解决方案

微软兰德公司对SSE类型的定义(如
\uuuu m128i
)与世界其他地区不同。如果您想编写可移植的SSE代码,那么请坚持使用所有平台通用的内部函数,不要对SSE向量类型的定义做出任何假设(即,将它们视为或多或少不透明的数据类型)。您可以使用适当的
\u mm\u set\u xxx
内部函数来实现问题中的代码。

这是我将矛头指向Microsoft的另一个原因。顺便说一句,他们的土地正在被侵蚀。@user2555139:Microsoft的vectors扩展比GNU少得多,所以你的评论有点奇怪。
sse_test_not_zero.c||In function 'main':|
sse_test_not_zero.c|8|error: request for member 'm128i_u64' in something not a structure or union|
sse_test_not_zero.c|9|error: request for member 'm128i_u64' in something not a structure or union|
sse_test_not_zero.c|9|warning: integer constant is too large for 'long' type|
sse_test_not_zero.c|11|error: request for member 'm128i_u64' in something not a structure or union|
sse_test_not_zero.c|12|error: request for member 'm128i_u64' in something not a structure or union|
sse_test_not_zero.c|16|error: request for member 'm128i_u64' in something not a structure or union|
sse_test_not_zero.c|20|warning: implicit declaration of function 'printf_s'|