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.