Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Question for the Crafty/Compiler experts

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.