Computer Chess Club Archives


Search

Terms

Messages

Subject: C vs asm vs look-up optimization question

Author: Rafael Andrist

Date: 13:16:10 01/21/02


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? 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.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.