(小ネタ)比較してインクリメント/デクリメント

2014年11月20日

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 を足す

のように書けます。

インクリメントが減算になるのでシンプルな割に魔術っぽさが出せますね。

Tags

About Author

nakamura

Leave a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Recent Comments

Social Media