Author: Dezhi Zhao
Date: 05:23:51 09/30/05
Go up one level in this thread
On September 30, 2005 at 02:48:09, Gerd Isenberg wrote:
>On September 29, 2005 at 18:45:15, Dezhi Zhao wrote:
>
>>Here it is:
>
>Thanks,
>looks fine. Compact code. Perfect register usage - only the fastcall parameter
>registers rcx, rdx and the the "return"-register rax are used. No memory access.
>And a nice rearrangement of the three last source lines.
>
>Otoh, there are a lot dependencies - i prefere using one additional register
and
>some more "parallel" work. In "reality", those leaf-routines are inlined with
>others and instruction scheduling may be a bit more independent.
>
>Gerd
>
Yes, it looks fine. I prefer to use one more volatile register (r8/r9) to hold
the manifest constant and save one load operation.
>
>>
>>; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.26
>>
>>include listing.inc
>>
>>INCLUDELIB OLDNAMES
>>
>>PUBLIC ?rightUpAttacks@@YA_K_K0@Z ; rightUpAttacks
>>; Function compile flags: /Ogtpy
>>; File c:\documents and settings\administrator\my documents\visual studio
>>2005\projects\x64\x64\x64.cpp
>>; COMDAT ?rightUpAttacks@@YA_K_K0@Z
>>_TEXT SEGMENT
>>deo$ = 8
>>pro$ = 16
>>?rightUpAttacks@@YA_K_K0@Z PROC ; rightUpAttacks, COMDAT
>>
>>; 11 : BitBoard notA = 0xfefefefefefefefe;
>>; 12 :
>>; 13 : pro = pro & notA;
>>
>> mov rax, -72340172838076674 ; fefefefefefefefeH
>> and rdx, rax
>>
>>; 14 : deo |= pro & (deo << 9);
>>
>> mov rax, rcx
>> shl rax, 9
>> and rax, rdx
>> or rcx, rax
>>
>>; 15 : pro = pro & (pro << 9);
>>
>> mov rax, rdx
>> shl rax, 9
>> and rdx, rax
>>
>>; 16 : deo |= pro & (deo << 18);
>>
>> mov rax, rcx
>> shl rax, 18
>> and rax, rdx
>> or rcx, rax
>>
>>; 17 : pro = pro & (pro << 18);
>>; 18 : deo |= pro & (deo << 36);
>>; 19 : return (deo << 9) & notA;
>>
>> mov rax, rcx
>> shl rax, 18
>> and rax, rdx
>> shl rax, 18
>> and rax, rdx
>> or rax, rcx
>> mov rcx, -141289400074369 ; ffff7f7f7f7f7f7fH
>> and rax, rcx
>> shl rax, 9
>>
>>; 20 : }
>>
>> ret 0
>>?rightUpAttacks@@YA_K_K0@Z ENDP ; rightUpAttacks
>>_TEXT ENDS
>>
>>
>>On September 29, 2005 at 14:16:06, Gerd Isenberg wrote:
>>
>>>Dezhi, can you please post some x86-64 assembly of this routine?
>>>
>>>Thanks,
>>>Gerd
>>>
>>>
>>>typedef unsigned __int64 BitBoard;
>>>
>>>BitBoard notA = 0xfefefefefefefefe;
>>>
>>>BitBoard rightUpAttacks(BitBoard deo, BitBoard pro) {
>>> pro = pro & notA;
>>> deo |= pro & (deo << 9);
>>> pro = pro & (pro << 9);
>>> deo |= pro & (deo << 18);
>>> pro = pro & (pro << 18);
>>> deo |= pro & (deo << 36);
>>> return (deo << 9) & notA;
>>>}
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.