Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: is this really faster?

Author: Uri Blass

Date: 12:43:02 04/18/03

Go up one level in this thread


On April 18, 2003 at 15:11:34, Dieter Buerssner wrote:

>On April 18, 2003 at 03:17:52, Gerd Isenberg wrote:
>
>>static __forceinline int _fastcall BitCount8 (BitBoard bb)
>>{
>>	__asm
>>	{
>>		mov     ecx, dword ptr bb
>>		xor     eax, eax
>>		test    ecx, ecx
>>		jz      l1
>>	    l0: lea     edx, [ecx-1]
>>		inc     eax
>>		and     ecx, edx
>>		jnz     l0
>>	    l1: mov     ecx, dword ptr bb+4
>>		test    ecx, ecx
>>		jz      l3
>>	    l2: lea     edx, [ecx-1]
>>		inc     eax
>>		and     ecx, edx
>>		jnz     l2
>>	    l3:
>>	}
>>}
>
>Gerd, did you check, if this is really faster than corresponding C-code?
>
>int PopCount(BITBOARD a)
>{
>  unsigned long w;
>  int n = 0;
>  w = *(unsigned long *)&a;
>  if (w)
>  do
>  {
>    n++;
>  }
>  while ((w &= w-1) != 0);
>  w = *(((unsigned long *)&a)+1);
>  if (w)
>  do
>  {
>    n++;
>  }
>  while ((w &= w-1) != 0);
>  return n;
>}

I simply use the following function that seem to be faster and was copied from
crafty if I remember correctly(I changed BITBOARD to BitBoard because originally
I used BitBoard in my defines and I saw no reason to change all the letters to
big letters).

If I replace it by your function my code run slower.
Note that I get 0 in most of the cases that I call PopCount.

int PopCount(register BitBoard a) {
  register int c=0;

  while(a) {
    c++;
    a &= a - 1;
  }
  return(c);
}

Uri



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.