Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Move generation question for the big boys

Author: Vincent Diepeveen

Date: 19:31:04 09/15/01

Go up one level in this thread


On September 15, 2001 at 20:34:36, Robert Hyatt wrote:

>On September 15, 2001 at 14:30:40, Vincent Diepeveen wrote:

[snip]
>FirstOne() isn't particularly slow, using the bit-scan instructions that
>are very fast on PII and beyond.  It certainly isn't much of a cost in the
>profile runs I do.

FORCEINLINE int FirstOne(BITBOARD a) {

#if _M_IX86 <= 500 /* on plain Pentiums, use boolean.c algorithm */
  __asm {
        movzx   edx, word ptr a+6
        xor     eax, eax
        test    edx, edx
        jnz     l1
        mov     dx, word ptr a+4
        mov     eax, 16
        test    edx, edx
        jnz     l1
        mov     dx, word ptr a+2
        mov     eax, 32
        test    edx, edx
        jnz     l1
        mov     dx, word ptr a
        mov     eax, 48
  l1:   add     al, byte ptr first_ones[edx]
  }
#else /* BSF and BSR are *fast* instructions on PPro/PII */
  __asm {
        bsr     edx, dword ptr a+4
        mov     eax, 31
        jnz     l1
        bsr     edx, dword ptr a
        mov     eax, 63
        jnz     l1
        mov     edx, -1
  l1:   sub     eax, edx
  }
#endif /* _M_IX86 > 500 */
}

Ugh ugh, how slow is 'particularly slow' slow in your dictionary?

Best regards,
Vincent




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.