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.