こんにちは。Nakamuraです。
SSE, AVXの比較結果は真の場合、全ビットが立ちますが、これは -1 とも解釈できるので、
if (a == b) { c++; }
if (a == b) { c--; }
は、それぞれ、
c = _mm_sub_epi32(c, _mm_cmp_eq(a,b)); // -1 を引く
c = _mm_add_epi32(c, _mm_cmp_eq(a,b)); // -1 を足す
のように書けます。
インクリメントが減算になるのでシンプルな割に魔術っぽさが出せますね。
Discussion