【发布时间】:2011-11-07 05:01:28
【问题描述】:
我很困惑。
当我在 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。这与我的预期相反,因为只有当 a 和 b 相同时它才应该是 1。
这怎么可能?我的 CPU 或 Visual C++ 2008 中是否存在错误?
【问题讨论】:
-
您尝试使用的指令是 SSE4 (!) - 您确定您的 CPU 支持吗?如果是,如果您将呼叫
int res = _mm_testc_si128(a, b);移到printf之前并在printf中使用res会发生什么? -
@Yahia:是的,我的 CPU 支持 SSE4,最高支持 SSE4.2。当我使用临时变量时也会发生同样的事情。
标签: visual-c++ sse simd