我的CPU中的SSE错误?

Meh*_*dad 2 sse simd visual-c++

我很难过.

当我在Visual C++ 2008中运行此代码时:

__m128i a, b;
a.m128i_u64[0] = 1;
b.m128i_u64[0] = 0;
a.m128i_u64[1] = 0;
b.m128i_u64[1] = 0;
printf("%d\n", _mm_testc_si128(a, b));
Run Code Online (Sandbox Code Playgroud)

它打印1.这违背了我所期望的,因为它应该是1只有当ab是相同的.

这怎么可能?我的CPU或Visual C++ 2008中是否有错误?

Mys*_*ial 5

我知道很多SSE4.1内在函数在VS2008中被破坏了.他们为VS2010修好了它们.在VS2010(没有SP)中,一些AVX内在函数被破坏了.他们修复了VS2010 SP1中的那些.

我从来没有使用_mm_testc_si128内在的,所以我不知道这是否是VS2008中的另一个内在因素.但我已经看到很多插入/提取内在因素被破坏的情况.

编辑:我刚刚在VS2010 SP1中测试了它,它也给出了1.

现在我看一下文档,看起来"应该"返回1.

返回值

如果b中设置的所有位都设置为1,则为1; 否则为0.

所以我不认为这是一个错误.