Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Modulo verus BitScan and MMX-PopCount

Author: Gerd Isenberg

Date: 01:21:13 12/01/02

Go up one level in this thread


On November 30, 2002 at 23:27:56, Russell Reagan wrote:

>On November 30, 2002 at 17:44:59, Gerd Isenberg wrote:
>
>>Btw. the above routine is a bit suspicious because the manuals say that
>>bsf(reg32, zero) leaves the target register undefined (may be under some strange
>>conditions).
>
>int BitSearch_v1 (BitBoard bb)
>{
>	__asm
>	{
>		bsf	eax,[bb]
>		jnz	found
>		bsf	eax,[bb+4]
>		xor	eax, 32
>	found:
>	}
>}
>
>How about that one? Is it suspicious? Or should this work according to the
>documentation?

The preconditions is that at least one bit is set, either in the low or
highword. With this precondition the above function is conform with the
documentation - otherwise you have to do something like this:

// return: -1 if no bit is set
//         0..63 otherwise
int BitSearch_v3 (BitBoard bb)
{
	__asm
	{
		bsf	eax,[bb]
		jnz	finished
		bsf	eax,[bb+4]
		jz	nobitset
		xor	eax, 32
                jmp     finished
        nobitset:
                mov     eax, -1
	finished:
	}
}



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.