Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: There is huge potential to improve further

Author: Gerd Isenberg

Date: 02:01:48 07/10/03

Go up one level in this thread


On July 10, 2003 at 02:04:20, Walter Faxon wrote:

>On July 09, 2003 at 13:57:06, Gerd Isenberg wrote:
>
>[snip]
>
>>I don't know the itanium2 instructions set - may be there is some "leading" zero
>>count or some fast int to float conversion, where you can pass a single isolated
>>bit as int and get the position from the float exponent.
>>Anyway there is still Walter Faxon's magic c-routine.
>>
>>Regards,
>>Gerd
>
>
>Hi, Gerd!
>
>You may be interested to know that Matt Taylor has developed an "even more
>magical" c-routine for bit scanning.  The xor and folding is replaced by a
>single multiply then shift.  See the thread in the Google group
>"comp.lang.asm.x86" titled "Bit magic":
>
>http://groups.google.com/groups?dq=&hl=en&lr=&ie=UTF-8&threadm=7a851118.0306282017.e9ce4a%40posting.google.com&prev=/groups%3Fdq%3D%26num%3D25%26hl%3Den%26lr%3D%26ie%3DUTF-8%26group%3Dcomp.lang.asm.x86%26start%3D25
>
>I hope he posts the code here soon.
>
>-- Walter

Hi Walter,

thanks for the link - very interesting. If i compare Matt's 64-bit routine with
your's, i see the 64bit multiplication and a rather huge lookup array.

Did i missed something - may have a closer look at it - with the array size is
someting wrong. I guess it's a unsigned shift so only, 6 bits (63-58) of the
product are relevant - wow great.

But no more dumb loop speed contents, at least the next days ;-)

Regards,
Gerd



// int table[1 << 64] = {...}; // ?????????????
int table[64]; //  seems more reasonable

int lsb(BitBoard singlebit)
{
    // Create mask of ones based on least significant one in x.
    singlebit ^= (singlebit - 1);
    return table[(singlebit * magic) >> (64 - 6)];
}






This page took 0.01 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.