Author: Victor Zakharov
Date: 11:26:09 04/24/01
Go up one level in this thread
On April 23, 2001 at 19:30:20, Alex Boby wrote:
>
>I used to have this:
>
>------------
>void parseBitboard (int from, struct MoveList *ml, bitboard attack)
> {
> int i;
>
> for (i=0; i<64; i++)
> {
> if (attack&mask[i])
> [add move to list]
> }
> }
>------------
>and got this in the profile:
>7301.351 3.9 37127.739 19.6 538488 _parseBitboard (pierre.obj)
>
>and then, figuring I would get a significant speed increase, I switched to this:
>
>-----------------
>int findBitIndex(bitboard data)
> {
> int index;
>
> __asm
> {
> bsr edx, dword ptr data+4
> mov eax, 32
> jnz s1
> bsr edx, dword ptr data
> mov eax, 0
> jnz s1
> mov edx, -1
> s1: add edx, eax
> mov index, edx
> }
>
> return index;
> }
May be 2 jmp commands hurt the speed. I tried to reproduce the same code without
jmp commands.
xor ecx,ecx
cmp dword ptr data+4,0
setnz cl
mov edx,dword ptr [data+ecx*4]
shl ecx,5
mov eax,-1
bsr eax,edx
add eax,ecx
mov index,eax
I am not sure about it because of the reason of Address Generation Interlock the
following pair of commands could be not fast.
setnz cl
mov edx,dword ptr [data+ecx*4]
Also I am not sure how is dword ptr [data+ecx*4] will be processed by compiler
The second procedure could look like
xor ecx,ecx
cmp dword ptr data,0
setz cl
mov edx,dword ptr [data+ecx*4]
shl ecx,5
mov eax,-1
bsf eax,edx
add eax,ecx
mov index,eax
Victor
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.