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.