指し手生成祭り・アセンブラを見てみよう
LS3600さんが書かれていたbitboardのイテレーションが
どうアセンブラになるか見てみた
#include <intrin.h> void main() { unsigned int _c_=0; unsigned long _index_; while( _BitScanReverse( &_index_, _c_ ) ) { _c_ ^= 1<< _index_; \ } }
cl /Ox /Ob2 /Oi /Ot test.cpp /Fatest.asm
; Line 7 xor ecx, ecx xor eax, eax bsr ecx, ecx je SHORT $LN7@main npad 7 $LL2@main: ; Line 9 mov edx, 1 shl edx, cl xor eax, edx bsr ecx, eax jne SHORT $LL2@main $LN7@main: ; Line 11 xor eax, eax ret 0
見事にレジスタだけになってる。
npad 7 は始めてみたけど、ググるとnopらしい。エンディアン関係の話?
bsr命令は、かずさんの話では0を与えると不定らしいけど、
zフラグが立つと終了するので、不定の返値を使うロジックは無いので
IntelでもAMDでも問題なさそう