sakurapyon’s blog

sakurapyon’s blog

0チェック

// 非0なら1
#  define Bitboard_Test(b)         ( ! _mm_testz_si128( (b).m, _mm_set1_epi8(0xff) ) )

はじめてのSSE その5 - 2011-09-12 - Bonanzaソース完全解析ブログ

問)
andnotのときに使った_mm_set1_epi8という命令に対応するアセンブリ命令は何か?

(答え)
直接対応する命令はありません。どこかのメモリに0xffが16バイト格納されて、(普通は)それをいったんxmmレジスタに取り出すコードが生成されます。

はじめてのSSE その6 - 2011-09-13 - Bonanzaソース完全解析ブログ

だとすると、_mm_set1_epi8(0xff) は、_mm_cmpeq_epi32((b).m,(b).m) の方が速かったりする?

論理演算

全ビットを0/1にする。

同じレジスタでPXORをとれば全ビットが0になります。

pxor mm0, mm0      ; mm0.pb[]=0
同じレジスタでPCMPEQB/PCMPEQW/PCMPEQDをとれば全ビットが1になります。

pcmpeqb mm0, mm0   ; mm0.pb[]=1

SIMD演算テクニック - Programming Lab