Author: Gerd Isenberg
Date: 04:30:36 12/02/02
Go up one level in this thread
Possible capture-generation application, with Floodfill based (mmx) attack generation: ... BitBoard rooks = OwnRooks() & someBookkeepingMask; while (rooks) { BitBoard rook = rooks & -rooks; rooks ^= rook; // get and reset lsb BitBoard rookAttacks = getRookAttacks(rook); BitBoard attackedQueens = rookAttacks & EnemyQueens() & ...; while (attackedQueens) { BitBoard queen = attackedQueens & -attackedQueens; attackedQueens ^= queen; // reset lsb PushCapture (RookTakesQueen, getMoveIndex(rook,queen)); } BitBoard attackedRooks = rookAttacks & EnemyRooks() & ...; ... } ... This safes the bitscan at all, if the targetsets are empty (There is not always a winning rook capture). With hammer it is possible to do the whole nested generation loops with 64-bit general purpose-registers. The possible effort of multiple BitScans of the from Bitboard is negligible, due to the parallel processing in the following routine: int getMoveIndex(BitBoard fromBB, BitBoard toBB) { __asm { pxor mm1, mm1 ; 0 pxor mm3, mm3 ; 0 movd mm0, [fromBB] punpckldq mm0, [fromBBt+4] movd mm0, [toBB] punpckldq mm0, [toBB+4] pcmpeqd mm6, mm6 ; -1 pxor mm7, mm7 ; 0 pcmpeqd mm1, mm0 ; ~mask of the none zero dword PI2FD mm0, mm0 ; 3f8..,400.. pcmpeqd mm3, mm2 ; ~mask of the none zero dword PI2FD mm2, mm2 ; 3f8..,400.. pxor mm1, mm6 ; mask of the none zero dword pxor mm3, mm6 ; mask of the none zero dword psrlq mm6, 63 ; 01 psrld mm0, 23 ; 3f8 to 7f psrld mm2, 23 ; 3f8 to 7f psrld mm1, 25 ; 7f mask psrld mm3, 25 ; 7f mask psllq mm6, 32+5 ; 20:00 psubd mm0, mm1 ; - 7f mask psubd mm2, mm3 ; - 7f mask por mm0, mm6 ; + 32 in high dword por mm2, mm6 ; + 32 in high dword pand mm0, mm1 ; & 7f mask pand mm2, mm3 ; & 7f mask psadbw mm0, mm7 ; add all bytes psadbw mm2, mm7 ; add all bytes psllq mm0, 6 ; from*64 por mm0, mm2 ; from*64 + to movd eax, mm0 } } Cheers, Gerd
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.