Author: Dann Corbit
Date: 13:29:51 02/15/04
Go up one level in this thread
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). 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.01 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.