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