Author: Gerd Isenberg
Date: 10:48:00 09/15/02
Go up one level in this thread
On September 15, 2002 at 13:02:02, Alessandro Damiani wrote:
>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
Not yet, no more time today, so don't wait any longer.
I will post it, during the next days.
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.