Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Question to Bob: Crafty , Alpha and FindBit()

Author: Dave Gomboc

Date: 05:57:02 06/14/98

Go up one level in this thread


On June 14, 1998 at 06:43:51, Vincent Diepeveen wrote:

>
>On June 13, 1998 at 23:17:37, Dave Gomboc wrote:
>>
>>Let's say that A is the bitboard representing where the rook can move.
>>B could be one of many things:  the bitboard representing squares the
>>opponent attacks at least as many times as you do, the bitboard
>>representing squares the opponent attacks with a piece of lesser (or
>>equal) value than the rook, the bitboard representing whatever your
>>imagination comes up with... but in every case, computing A and not B
>>should give you what you want in one clock cycle.
>>
>>Of course B isn't that easy to generate, depending on what you choose
>>for it, but it's not like bitboards make this sort of computation
>>impossible or extremely expensive either.
>
>Suppose you have both A and B, then how do you compute it
>in O(1)?
>
>Not possible with the current array sizes.

I tried replying to this once earlier and accidentally submitted my post
with a space bar push when the focus somehow reached the submit button,
how annoying.

Anyway...

I'm not sure why I said "in one clock cycle" above, clearly there are
two operations that cannot overlap completely.  I don't see how
computing the result in O(1) time is going to be a problem, though.

64-bit architecture:

    Reg2 = B
    Reg1 = A
    Reg2 = -Reg2
    Reg1 ||= Reg2

    The result bitboard is in register 1.

32-bit architecture:

    Reg2 = B.low
    Reg1 = A.low
    Reg2 = -Reg2
    Reg1 ||= Reg2
    Reg3 = B.high
    Reg2 = A.high
    Reg3 = -Reg3
    Reg2 ||= Reg3

    The result bitboard is in registers 1 (low 32 bits) and 2 (high 32
bits).

(||= means "assign the current value, 'or'ed by ..." for any
non-programmers out there.)

Anyway, there are a constant number of instructions, you might be able
to save a few if stuff is already in registers, but that's irrelevant.
The coefficient is higher for the 32-bit version than the 64-bit
version, but both of the assembly snippets execute in O(1), so to speak.

Dave Gomboc



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.