Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: bitboard routine question

Author: Robert Hyatt

Date: 13:16:39 09/17/99

Go up one level in this thread


On September 17, 1999 at 15:57:28, Inmann Werner wrote:

>Hello.
>
>Implementing bitboards I came to the old and known problem of finding the
>number of a bit in the bitboard on Intel machines (32 bit).
>Trying a little around this evening, I came to following routine. It is simple
>in C, but looking at the assemmbler outcome, I do not know, if it is good.
>How do you implement such a extreme critical routine?
>
>Werner
>
>
>***************
>//Testroutine, not tuned but readable
>//hope no silly bug in it :)
>// hope also, the idea is clear
>
>typedef unsigned __int64 BITBOARD;
>long lookup1[65];
>BITBOARD teil;
>
>init_bits()
>{
>int i;
>BITBOARD a,b,c;
>long erg;
>
>
>	lookup1[0]=0;
>	a=1;
>	teil=67;   /*## OK ##*/
>	for(i=1;i<64;i++)
>	{
>	   lookup1[i]=erg;
>	   a=a<<1;
>	}
>}
>
>long findbit(BITBOARD x)
>{
>BITBOARD c;
>long bitnr,erg;
>
>   c=x-(x&(x-1));
>   bitnr=c%teil;
>   erg=lookup1[bitnr];
>   return(erg);
>}
>******************************************


That is not the way to do it.  There are two good ways to do this.

One is to take each byte and use that as an index into a table that
gives the first 1 bit set in a byte with that particular subscript.
The other is to use the assembly code that is included with crafty so
you can access the BSF/BSR hardware instructions that are _very_ fast.



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.