Author: Robert Hyatt
Date: 11:05:10 02/16/04
Go up one level in this thread
On February 15, 2004 at 16:29:51, Dann Corbit wrote: >On February 15, 2004 at 16:25:36, Slater Wold wrote: > >>On February 15, 2004 at 16:21:56, Dann Corbit wrote: >> >>>On February 15, 2004 at 16:20:48, Slater Wold wrote: >>> >>>>On February 15, 2004 at 16:10:55, Dann Corbit wrote: >>>> >>>>>On February 15, 2004 at 15:45:02, Slater Wold wrote: >>>>> >>>>>>My setup: >>>>>> >>>>>>AMD FX 51 >>>>>>Windows 2003 Enterprise (64 bit) >>>>>>Intel 8.0 Compiler >>>>>> >>>>>> >>>>>>Why would compiling Crafty 19.10 be 15% slower when defining /DVC_INLINE_ASM & >>>>>>/DUSE_ASSEMBLY? >>>>>> >>>>>>Has anyone else ever seen that? >>>>> >>>>>It may mean that the compiler generated better assembly than you did. >>>>> >>>>>It may also mean that you pulled in the wrong assembly. Old x86 assembly will >>>>>run on the AMD opteron type systems. It is the new stuff that will really be >>>>>snappy. >>>> >>>>ICC doesn't seem to like Bob's assembly code to start off with. >>>> >>>> >>>>vcinline.h(28): warning #1011: missing return statement at end of non-void funct >>>>ion "PopCnt" >>>> } >>>> ^ >>>> >>>>vcinline.h(41): warning #1011: missing return statement at end of non-void funct >>>>ion "FirstOne" >>>> } >>>> ^ >>>> >>>>vcinline.h(54): warning #1011: missing return statement at end of non-void funct >>>>ion "LastOne" >>>> } >>>> ^ >>> >>>Compiler bug. It does not recall that the return is stored in EAX. >>> >>>Print the rest of the routine that it is crying about. I am guessing it is >>>pulling in the wrong assembly. >> >>That's the only thing. I don't know enough about assembly to know what the hell >>is going on. :) > >I don't know where Bob's AMD 64 assembly is. Probably a .s file, since he uses >GCC (or maybe he is using Intel now -- not sure). It is in "inlineamd.h" > >If this is the functions compiled, then it is the wrong stuff: > >#ifndef VCINLINE_H_INCLUDED >#define VCINLINE_H_INCLUDED > >#if _MSC_VER >= 1200 >#define FORCEINLINE __forceinline >#else >#define FORCEINLINE __inline >#endif > >FORCEINLINE int PopCnt(BITBOARD a) >{ > /* Because Crafty bitboards are typically sparsely populated, we use a > streamlined version of the boolean.c algorithm instead of the one in x86.s >*/ > __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:} >} > >FORCEINLINE int FirstOne(BITBOARD a) >{ > __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} >} > >FORCEINLINE int LastOne(BITBOARD a) >{ > __asm { > bsf edx, dword ptr a > mov eax, 63 > jnz l1 > bsf edx, dword ptr a + 4 > mov eax, 31 > jnz l1 > mov edx, -33 > l1: sub eax, edx} >} >#endif /* VCINLINE_H_INCLUDED */
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.