Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Countbits() Function

Author: James Robertson

Date: 16:10:48 01/03/99

Go up one level in this thread


On January 03, 1999 at 19:06:03, Eugene Nalimov wrote:

>On January 03, 1999 at 18:40:08, James Robertson wrote:
>
>>[snip]
>>
>>>Actually, you don't need BSF/BSR instructions here. You can
>>>use exactly the same trick that Robert Hyatt used in Crafty
>>>source - use the fact that A&(A-1) clears least significant
>>>bit. In Crafty 16.3 source there is in-line assembly stuff
>>>for VC++ as well as C function. Function that counts bits is
>>>just 2 loops, first handles lower half of 64-bit bitboard,
>>>and second handles upper half:
>>>
>>>        mov     ecx, low_part_of_the_bitboard
>>>        xor     eax, eax
>>>        test    ecx, ecx
>>>        jz      end_of_loop1
>>>loop1:
>>>        lea     edx, [ecx-1]
>>>        inc     eax
>>>        and     ecx, edx
>>>        jnz     loop1
>>>end_of_loop1:
>>>        mov     ecx,high_part_of_the_bitboard
>>>        test    ecx, ecx
>>>        jz      end_of_loop2
>>>loop2:
>>>        lea     edx, [ecx-1]
>>>        inc     eax
>>>        and     ecx, edx
>>>        jnz     loop2
>>>end_of_loop:
>>>        ret
>>>
>>>I will not be surpised if that function will be faster even
>>>on x86 processors that have fast BSF/BSR. Even if it's
>>>slightly slower, it has the benefit that it's portable -
>>>it will work reasonable well on *any* x86 compatible, be it
>>>AMD, Cyrix, IDT, etc.
>>>
>>>Eugene
>>
>>I have several questions about x86 processors:
>>Is
>>    xor    eax,eax
>>faster than
>>    mov    eax,0
>>
>>Also, is
>>    inc    eax
>>faster than
>>    add    eax,1
>>?
>>
>>Thanks!
>>
>>James
>
>No and yes. If you just count # of ticks (or of ROPs),
>they will be exactly the same. But those instructions
>are shorter - xor uses 2 bytes, move uses 5 bytes; inc
>is 1 byte, add is 3 bytes. Smaller programs usually
>run faster - they occupy less space in cache, so
>traffic to slow main memory is smaller.
>
>Eugene

Thanks! Also, I just noticed a command I am unfamiliar with:
lea
What does it do?

Thanks!
James




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.