Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: just another reverse bitscan

Author: Zach Wegner

Date: 15:33:25 12/22/05

Go up one level in this thread


On December 22, 2005 at 17:49:41, Gerd Isenberg wrote:

>
>but also a bit redundant expression
>
>    l   = h | (l & m-1);
>
>is good enough.

Indeed. With that change, as well as reducing my extra shifts for 0x88 to just
one, the two methods are equally as fast at perft. It should be the fastest in a
full-blown program. Your post got me thinking, if I could reduce branches in
other places. Take for example, I have a conditional to get the MSB or LSB based
on a direction (it is used to find the closest piece to a slider):

if (dir <= DIR_RT) // i.e. in the positive direction
    to = first_square(moves); //equivalent to LSB
else
    to = last_square(moves); // MSB

I found that I could change this to:

to = last_square(moves ^ (moves - 1) * (dir <= DIR_RT));

but it results in a net slowdown! Oh well...

Happy bit-twiddling,
Zach



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.