Author: Rafael Andrist
Date: 12:37:19 01/23/02
Go up one level in this thread
On January 22, 2002 at 21:54:59, Ricardo Gibert wrote:
>On January 22, 2002 at 21:21:57, Ricardo Gibert wrote:
>
>>On January 22, 2002 at 21:15:17, Ricardo Gibert wrote:
>>
>>>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? 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);
>>>
>>>Isn't this is the same as "return abs(x-y);"? If so, maybe the compiler will do
>>>a better job of optimizing with it.
>>
>>Oops! No it's not, but how about return (x-y+8)%8 ?
>
>Come to think of it, even better is "return (iSqNr-iSqNr/8)%8". I decided to
>test this and it works fine. You'll have to benchmark it to see if it produces
>faster code.
Well, thank you very much for your interest and effort, I think I'll use the
formula (iSqNr-iSqNr/8)%8. And for this piece of code, I don't even need an
inline asm function because the compiler will handle this perfectly.
Thanks to all
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.