Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Determining location of LSB/MSB

Author: Gerd Isenberg

Date: 22:10:31 02/10/04

Go up one level in this thread


On February 10, 2004 at 21:18:29, Bas Hamstra wrote:

>On February 10, 2004 at 15:00:53, Gerd Isenberg wrote:
>
>>On February 10, 2004 at 10:57:15, Bas Hamstra wrote:
>>
>>>On February 09, 2004 at 09:07:41, Gerd Isenberg wrote:
>>>
>>>>On February 09, 2004 at 05:09:07, Renze Steenhuisen wrote:
>>>>
>>>>>
>>>>>Hi there!
>>>>>
>>>>>does anyone know the fastest way to determine the lcoation of the Least/Most
>>>>>Significant Bit, and to clear that bit?
>>>>>
>>>>>In my case the most important platforms (at the moment) are Pentium III and IV.
>>>>>
>>>>>Thanks!
>>>>
>>>>find lsb from CCC archives:
>>>>
>>>>http://chessprogramming.org/cccsearch/ccc.php?art_id=265616
>>>>
>>>>Walter Faxon's magic BitScan:
>>>>http://chessprogramming.org/cccsearch/ccc.php?art_id=272378
>>>>
>>>>Matt Taylor's De Bruijn folding trick:
>>>>http://chessprogramming.org/cccsearch/ccc.php?art_id=305965
>>>>
>>>>Gerd
>>>>
>>>>
>>>>>
>>>>>Renze
>>>
>>>Gerd,
>>>
>>>IMO the BSF instruction is still fastest. Don't test this in loops, in a
>>>searching engine you get quite different results and BSF is in my case clearly
>>>the winner,
>>
>>Hi Bas,
>>
>>yes, i'm aware of loop tests :-)
>>and i still use bsf too with my athlon XP.
>>But i'm working on completely get rid of it, but not only due the fact that
>>bsf64 is still 9 cycle vector path instruction on Opteron.
>>
>>
>>>especially for the paltforms he mentiones, and besides he is not
>>>talking 64 bit...
>>
>>oups, sorry.
>>
>>>
>>>
>>>Bas.
>>>
>>>
>>>int LastOne(unsigned int Number)
>>>
>>>{  asm mov EAX, Number
>>>   asm BSF EAX, EAX
>>>}
>>
>>isn't that shorter?
>>
>>int LastOne(unsigned int Number)
>>{
>>   asm BSF EAX, word ptr[Number]
>>}
>>
>
>It is shorter, but I am not sure it is faster. In fact I would expect the 2
>basic intructions run faster than 1 complex instruction. A book about optimizing
>("Inner loops") advices to always split up in basic RISC instructions, because
>it is nearly always faster. But then again you are more experienced than me with
>asm, so I don't feel too confident.
>
>ciao Gerd,
>Bas.

Unfortunately bsf is complex or vector path (Athlon), independent on memory or
register source operand:

BSF reg16/32, mem16/32  0Fh BCh mm-xxx-xxx VectorPath 12/11
BSR reg16/32, mreg16/32 0Fh BDh 11-xxx-xxx VectorPath 10
MOV reg16/32, mem16/32  8Bh mm-xxx-xxx     DirectPath 3

so in theory i expect the single instruction shorter and faster.

Gerd



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.