Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bitboards generate moves King, Knight

Author: Gerd Isenberg

Date: 12:05:25 09/21/04

Go up one level in this thread


<snip>
>So the modified method posted by Russell is much better.
>
>BitBoard rightPawnAttacks(BitBoard pawns, int color)
>{
>   return ((bb<<9)>>(color*16)) & notA;
>}
>
>BitBoard leftPawnAttacks(BitBoard pawns, int color)
>{
>   return ((bb<<7)>>(color*16)) & notH;
>}
>
>
>Since msc generates a call for "variable" 64-bit shift,
>this inline assembly is probably the fastest to get pawn attacks with color
>param.


Ok, i measured performance with rdtsc, compared to the conditional routine
below. I guess that color is a good pattern to predict for modern cpus.
In the correct predicted case, the conditional routine takes 4 cycles (All AMD64
32-bit mode). It seems in miss-prediction case 20 cycles.

BitBoard rightPawnAttacks(BitBoard pawns, int color)
{
   if ( color )
      return (pawns>>7) & 0xfefefefefefefefe; // black
   return (pawns<<9) & 0xfefefefefefefefe;    // white pawns
}

The branchless asm routine is about 9 cycles, both including store of the
result-bitboard and inlined.

Conclusion:

If you really don't have random conditions, branches are not that bad and most
often faster than branchless approaches.

Gerd


>
BitBoard rightPawnAttacks(BitBoard pawns, int color)
{
   __asm
   {
      mov         eax,dword ptr [pawns]
      mov         edx,dword ptr [pawns+4] ; bb in edx:eax
      mov         ecx, [color]            ; white=0, black=1
      shld        edx,eax,9
      shl         ecx,4                   ; white=0, black=16
      shl         eax,9                   ; bb << 9
      shrd        eax,edx,cl
      shr         edx,cl                  ; bb >> white? 0 : 16
      and         eax,0FEFEFEFEh          ; & notA low board
      and         edx,0FEFEFEFEh          ; & notA high board
      // bitboard return via edx:eax
   }
}





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.