私は非常に困惑しています。CPUにSSEバグがありますか?
私は、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がそれをサポートしていますか? if yesの場合、 'printf'の前に' int res = _mm_testc_si128(a、b); 'を呼び出し、代わりに' printf'の 'res'を使うとどうなりますか? – Yahia
@Yahia:はい、私のCPUはSSE4.2までサポートしています。一時変数を使用しても同じことが起こります。 – Mehrdad