Author: Eugene Nalimov
Date: 16:06:03 01/03/99
Go up one level in this thread
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
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.