Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: C vs asm vs look-up optimization question

Author: Tony Werten

Date: 13:36:38 01/21/02

Go up one level in this thread


On January 21, 2002 at 16:16:10, Rafael Andrist wrote:

>Well, I just rewrote the following function in assembler to get better speed (no
>conditional jumps, less memory access) but the speedup was only minimal. A
>possible problem of the asm code is, that the instructions doesn't pair well,
>but it should be still considerably faster. Has anyone an idea what the problem
>with the code below is?

You're only using 1 register so nothing can be paired.

Tony

>Should I perhaps throw this function out and use a
>look-up-table?
>
>INLINE int Diag045Rot(const int iSqNr)
>{
>#if defined (Use_Asm)
>// 0 <= iSqNr <= 63
>__asm
>{
>  mov eax, iFeldNr;
>  mov ah, al;
>  and al, 007h;	//x (iFeldNr%8) --> al
>  shr ah, 3;	//y (iFeldNr/8) --> ah
>  sub al, ah;	//x-y --> al
>  mov ah, al;	//    --> ah
>  and ah, 080h;	//ah &= 0x80 (isolate sign bit)
>  add ah, 080h;	//ah += 0x80 (setting the carry bit)
>  adc ah, 0;	//ah += carry bit
>  shl ah, 3;	//ah <<= 3;
>  add al, ah;	//al += 8*(x-y < 0)
>  xor ah, ah;
>}
>#else
>  int x, y;
>  x = iSqNr%8;
>  y = iSqNr/8;
>  return x-y + 8*(x-y < 0);
>#endif
>}
>
>
>Thanks in Advance
>Rafael B. Andrist



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.