Author: Matthias Gemuh
Date: 10:16:00 01/22/02
Go up one level in this thread
Great Thanks! I will start experimenting right now.
Regards,
Matthias.
On January 22, 2002 at 12:30:46, Georg v. Zimmermann wrote:
>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.