Author: Georg v. Zimmermann
Date: 09:30:46 01/22/02
Go up one level in this thread
Hey Matthias,
I am honored but we must give credit where credit is due. :) That firstSquare()
came from the Corbit wizzard.
Below is the _asm for popCount taken from Beowulf. About lastSquare() I dont
know if something faster than whats in Crafty is possible, but I am just a guy
who knows nothing about _asm and a little bit about chess algorithms.
#ifdef MMX_POPCOUNT
#include "amd3dx.h"
/* Athlon MMX optimized popcount function, based on AMD's Athlon
optimization manuals */
FORCEINLINE int Count(BITBOARD v)
{
static const __int64 C55 = 0x5555555555555555;
static const __int64 C33 = 0x3333333333333333;
static const __int64 C0F = 0x0F0F0F0F0F0F0F0F;
__asm {
movd mm0, word ptr v;
punpckldq mm0, word ptr v + 4;
movq mm1, mm0;
psrld mm0, 1;
pand mm0, [C55];
psubd mm1, mm0;
movq mm0, mm1;
psrld mm1, 2;
pand mm0, [C33];
pand mm1, [C33];
paddd mm0, mm1;
movq mm1, mm0;
psrld mm0, 4;
paddd mm0, mm1;
pand mm0, [C0F];
pxor mm1, mm1;
psadbw(mm0, mm1);
movd eax, mm0;
emms;
}
}
#else
FORCEINLINE int Count(BITBOARD a)
{
/* I think Dann stole this code from Crafty */
__asm {
mov ecx, dword ptr a
xor eax, eax
test ecx, ecx
jz l1
l0:
lea edx, [ecx - 1]
inc eax
and ecx, edx
jnz l0
l1:
mov ecx, dword ptr a + 4
test ecx, ecx
jz l3
l2:
lea edx, [ecx - 1]
inc eax
and ecx, edx
jnz l2
l3:
}
}
#endif
Good luck !
On January 22, 2002 at 04:30:04, Matthias Gemuh wrote:
>
>Hi Georg,
>I tried your firstSquare() with Borland C++ Builder 5, and it works!
>I did not "inline" it anyway. Can you, please, post your lastSquare() here
>or send it to me?
>I don't know Assembler, but would like to see how my program performs with
>firstSquare(), lastSquare() and BitCount() coded in Asm. I don't have
>BitCount() yet, but it should count the bits in a 64-Bit integer.
>Every other thing in my program will remain in C/C++.
>
>Thanks,
>Matthias.
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.