我的CPU中的SSE错误?

时间:2011-11-07 05:01:28

标签: visual-c++ sse simd

我很难过。

当我在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));

打印1。这与我的预期相反,因为只有当ab相同时,它才应为1。

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

1 个答案:

答案 0 :(得分:5)

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

我从未使用_mm_testc_si128内在函数,因此我不知道这是否是VS2008中的另一个内在函数。但我已经看到很多插入/提取内在因素被破坏的情况。

编辑:我刚刚在VS2010 SP1中对此进行了测试,它也给出了1。

现在我看documentation,看起来应该“返回1”。

  

返回值

     如果b中设置的所有位都设置为a,则

1;否则为0。

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