Author: Gerd Isenberg
Date: 00:00:22 01/22/03
Go up one level in this thread
On January 22, 2003 at 02:54:44, Matt Taylor wrote:
><snip>
>>__forceinline
>>UINT BitSearchAndReset(BitBoard &bb)
>>{
>>#ifdef _M_IX86
>>#ifdef USE_SAVE_BSF
>> __asm
>> {
>> xor edx, edx
>> mov ebx, [bb]
>> xor eax, eax
>> inc edx
>> bsf ecx, [ebx]
>> jnz found
>> bsf ecx, [ebx + 4]
>> lea ebx, [ebx + 4]
>> xor eax, 32
>> found:
>> shl edx, cl
>> xor eax, ecx
>> xor [ebx], edx
>> }
>>#else
>> __asm
>> {
>> mov edx, [bb]
>> bsf eax, [edx+4]
>> xor eax, 32
>> bsf eax, [edx]
>> btr [edx],eax
>> }
>>#endif
>>...
>>}
>>
>>Regards,
>>Gerd
>
>Remember, bsr/bsf/btr are -slow- on Athlon. That bit search & reset is at least
>16 clocks (bsf twice, likely ~5-6 clocks additional overhead at a glance). I
>guess I should give up on the last bitscan and post my results. Walter's routine
>optimizes to 11 clocks + 134 byte table.
>
>-Matt
Hi Matt,
Yes i know, tried a lot, but this inlined conditional version is fastest so far
in IsiChess - but not in dumb loop test. Remaining code size matters a lot and
it is used so often in my program...
Cheers,
Gerd
This page took 0 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.