Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: flood fill attack bitboards

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.