Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Simple questions about bitboards

Author: Sune Fischer

Date: 06:50:33 09/22/03

Go up one level in this thread


On September 22, 2003 at 09:10:55, Vincent Diepeveen wrote:
>
>And 2.2 times slower even with inline assembly.
>
>Not to mention what happens when you don't have assembly available.
>
>For everyone who does *not* like to have inline assembly, do *not* use
>bitboards.

Actually, I just tested a simple C version against the assembler version
yesterday, and the C version came out faster on my "frenzee mark".
with assembler : 1072
no assembler   : 1092 (!)

Quite a big difference so I was somewhat surprized.
The C version is "cheating" by using a big table though, could be bad in the
long run if the program grows.

The C version:

inline FirstOneClear(BitBoard &bb) {  // preconditioned by bb!=0
    BitBoard b = bb & -bb;

    bb ^= b;
    if (b<<48)
      return (first_one[b]);
    if (b<<32)
      return (first_one[b>>16]+16);
    if (b<<16)
      return (first_one[b>>32]+32);
    return (first_one[b>>48]+48);
}

The Assembler version:

inline FirstOneClear(BitBoard &bb) {
	__asm
	{
		xor	edx, edx
		mov	ebx, [bb]
		xor	eax, eax
		inc	edx
		bsf	ecx, [ebx]
		jnz	found
		bsf	ecx, [ebx+4]
		lea	ebx, [ebx+4]
		xor	eax, 32
	found:
		shl	edx, cl
		xor	eax, ecx
		xor	[ebx], edx
	}
}

the assembler returns 63-square, so it must be flipped.

Maybe faster versions of both even exists :)

-S.



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.