Visual c++ 我的CPU有什么问题?

Visual c++ 我的CPU有什么问题?,visual-c++,sse,simd,Visual C++,Sse,Simd,我被难住了 在VisualC++ 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)); 它打印1。这与我的预期相反,因为只有当a和b相同时,它才应该是1 这怎么可能?在我的CPU或VisualC++ 2008中有bug吗?或者其他什么?< p>我知道事实上,在S

我被难住了

<>在VisualC++ 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));
它打印
1
。这与我的预期相反,因为只有当
a
b
相同时,它才应该是1


这怎么可能?在我的CPU或VisualC++ 2008中有bug吗?或者其他什么?

< p>我知道事实上,在Sv4.1内核中有许多在VS2008中被破坏了。他们为VS2010修复了它们。在VS2010(无SP)中,一些AVX内部函数被破坏。他们在VS2010 SP1中修复了这些问题

我从未使用过
\u mm\u testc\u si128
内部版本,因此我不知道这是否是VS2008中损坏的另一个内部版本。但我已经看到过许多插入/提取内部函数被破坏的案例

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

现在我看一下,它看起来“应该”返回1

返回值

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


因此,我认为在这种情况下这不是一个bug。

您尝试使用的指令是SSE4(!)-您确定您的CPU支持它吗?如果是,如果移动调用
int res=\u mm\u testc\u si128(a,b),会发生什么情况printf
之前编码>并在
printf
中使用
res
。@Yahia:是的,我的CPU支持SSE4,最高支持SSE4.2。当我使用一个临时变量时也会发生同样的事情。OMFG该死的。。。我把头发拔出来,使用VS2008的本地MSDN库而不是在线库,它说如果a和b按位相同,返回值是
1;否则为0。
Wow。谢谢+1(参见).lol,看起来他们真的破坏了他们的VS2008文档…:P