Author: Alessandro Damiani
Date: 10:02:02 09/15/02
Go up one level in this thread
On September 15, 2002 at 12:22:21, Gerd Isenberg wrote: >The mmx-routine to get bishop-attacks is similar of course. > >If you call it whith a set of two opposite colored bishops of one side, it's >easy to extract the single bishop attack bitboards by anding the combined with >the appropriate square color bitboards. > >This feature is not so easy to implement with either rooks or queens. But even >with a combined rookattack board, it's also possible to gain some informations >about single rooks: anding the combined rook attacks with the rooks attacks from >one rook square on an otherwise empty board (determined by "Kogge-Stone parallel >prefix algorithm" or cheap table lookup), produces exactly the single rook >attack bitboard, if no other rook(s) shares the same file or rank. Otherwise it >includes all xray attacks through these rooks. > > >BitBoard getBishopAttacksMMX(BitBoard freeSquares, BitBoard bishops) >{ > static const BitBoard eight = 8; > static const BitBoard notH = 0x7f7f7f7f7f7f7f7f; > __asm > { > movd mm6, [freeSquares] > punpckldq mm6, [freeSquares+4] > movd mm1, [bishops] > punpckldq mm1, [bishops+4] ; rightup > pxor mm0, mm0 ; bishopsAttacks := 0 > movq mm5, [eight] ; saves some bytes in unrolled loop > movq mm7, [notH] ; saves some bytes in unrolled loop > movq mm2, mm1 ; leftup > movq mm3, mm1 ; rightdown > movq mm4, mm1 ; leftdown > // 1. diagonal fill in each direction > paddb mm1, mm1 ; right > psllq mm2, 7 ; leftup > paddb mm3, mm3 ; right > psllq mm1, mm5 ; rightup > pand mm2, mm7 ; clear left h-file wraps > por mm0, mm1 ; bishopsAttacks |= rightup > psrlq mm3, mm5 ; rightdown > pand mm1, mm6 ; clear rightup occupied > psrlq mm4, 9 ; leftdown > pand mm2, mm7 ; clear left h-file wraps > por mm0, mm3 ; bishopsAttacks |= rightdown > por mm0, mm4 ; bishopsAttacks |= leftdown > pand mm3, mm6 ; clear rightdown occupied > por mm0, mm2 ; bishopsAttacks |= leftup > pand mm4, mm6 ; clear leftdown occupied > pand mm2, mm6 ; clear leftup occupied > // 2. diagonal fill in each direction > // .... Did you already have the time to compare the flood-fill approach to rotated bitboards or mine (rotated indices)? I am sitting and waiting. :) Alessandro
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.