Author: Robert Hyatt
Date: 18:36:20 07/14/04
Go up one level in this thread
On July 13, 2004 at 19:56:44, Andreas Guettinger wrote:
>On July 13, 2004 at 18:40:29, Joshua Shriver wrote:
>
>>http://www.csee.wvu.edu/~jshriver/chess
>>
>>-Josh
>
>Do you use asm routines for FirstOne(), LastOne() in crafty?
I am dead tired after several days of lots of driving. Which means that 19.15
is not going to change over the next week or two. If you can download the
current 19.15 .zip file, modify whatever is needed to make your ppc stuff work,
and send me the changed files back, I'll make them a part of the normal code so
that this won't have to be repeated...
>
>I wrote an inlineppc.h file which can be easily included with only a few line
>changes similar to the existing inlineamd.h or inlinex86.h header files. I can
>post the changes I made, if there's interest.
>The asm routines are triggered by the -DINLINE_PPC (-DINLINE_PPC and -DPPC64 for
>G5) in the command line.
>
>darwinG4:
> $(MAKE) target=FreeBSD \
> CC=gcc CXX=g++ \
> CFLAGS='$(CFLAGS) -Wall -pipe -O3' \
> CXFLAGS=$(CFLAGS) \
> LDFLAGS=$(LDFLAGS) \
> LIBS='-lstdc++' \
> opt='$(opt) -DFUTILITY -DINLINE_PPC -DFAST' \
> crafty-make
>
>darwinG5:
> $(MAKE) target=FreeBSD \
> CC=gcc CXX=g++ \
> CFLAGS='$(CFLAGS) -Wall -pipe -O3 -fast' \
> CXFLAGS=$(CFLAGS) \
> LDFLAGS=$(LDFLAGS) \
> LIBS='-lstdc++' \
> opt='$(opt) -DFUTILITY -DINLINE_PPC -DPPC64 -DFAST' \
> crafty-make
>
>The G4 asm routines give about 5% speedup in bench. Unfortunately I don't have a
>G5, so I could not test these. It would be interesting if somebody could test it
>on a G5. Also if somebody has improvments, let me know.
>
>regards
>Andy
>
>Here the content of inlineppc.h:
>
>/* 32bit and 64bit asm routines for powerpc,
> * include this file if defined(INLINE_PPC) inside chess.h */
>
>#include <ppc_intrinsics.h>
>
>int static __inline__ PopCnt(register BITBOARD a)
>{
> register int c = 0;
>
> while (a) {
> c++;
> a &= a - 1;
> }
> return (c);
>}
>
>#if defined(PPC64)
>
>/* code for PPC 64 bit */
>int static __inline__ FirstOne(BITBOARD arg1)
>{
> unsigned long index;
>
> __asm__("cntlzd %0, %1" : "=r" (index) : "r" (arg1));
> return index;
>}
>
>int static __inline__ LastOne(BITBOARD arg1)
>{
> unsigned long index;
>
> __asm__("cntlzd %0, %1" : "=r" (index) : "r" (arg1 ^ (arg1 - 1)));
> return index;
>}
>
>#else
>
>/* code for PPC 32 bit */
>
>/* The definition of __cntlzw is not needed when including ppc_intrinsics.h
> * if you don't want to include it, you can uncomment the following define
> *
>#define __cntlzw(a) ({ \
> unsigned long r; \
> __asm__("cntlzw %0,%1" : "=r"(r) : "r"(a)); \
> r;\
>})
>*/
>int static __inline__ FirstOne(BITBOARD arg1)
>{
> unsigned long i;
>
> if ((i = arg1 >> 32))
> return(__cntlzw(i));
> if ((i = (unsigned int) arg1))
> return(__cntlzw(i) + 32);
> return(64);
>}
>
>int static __inline__ LastOne(BITBOARD arg1)
>{
> unsigned long i;
>
> if ((i = (unsigned int) arg1))
> return(__cntlzw(i ^ (i - 1)) + 32);
> if ((i = arg1 >> 32))
> return(__cntlzw(i ^ (i - 1)));
> return(64);
>}
>
>#endif
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.