ChessUSA.com TalkChess.com
Hosted by Your Move Chess & Games
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Resource for bit twiddlers
Post new topic    TalkChess.com Forum Index -> Computer Chess Club: Programming and Technical Discussions Flat
View previous topic :: View next topic  
Author Message
Gerd Isenberg



Joined: 08 Mar 2006
Posts: 1787
Location: Hattingen, Germany

PostPost subject: Re: Resource for bit twiddlers    Posted: Wed May 30, 2007 5:55 pm Reply to topic Reply with quote

Some further optimization by using common sub-expressions. One operation less, and more importantly, only three scratch registers used. The compiler prefers 10 byte opcode loading rax with an 64-bit immediate, while there is already the one's complement in rax, where a 3-byte "not rax" would result in 7 bytes shorter opcode but higher alu-pressure. With 64-bit immediate moves, the 32-byte prefetch of the K10 makes sense.

Code:
u64 eastAttacks(u64 rooks, u64 empty)
{
  const u64 H  =  0x8080808080808080;
  u64 inclRook =  rooks | H | ~empty;
  u64 exclRook = (rooks   &=  ~H  ) ^ inclRook;
  u64 attacks  = (exclRook - rooks) ^ inclRook;
  return attacks;
}

rooks$ = 8
empty$ = 16
?eastAttacks@@YA_K_K0@Z PROC
  00000   48 f7 d2    not    rdx
  00003   48 b8 80 80 80
   80 80 80 80 80    mov    rax, 8080808080808080H
  0000d   48 0b d1    or    rdx, rcx
  00010   48 0b d0    or    rdx, rax
  00013   48 b8 7f 7f 7f   ; not rax would also possible here
   7f 7f 7f 7f 7f    mov    rax, 7f7f7f7f7f7f7f7fH
  0001d   48 23 c8    and    rcx, rax
  00020   48 8b c2    mov    rax, rdx
  00023   48 33 c1    xor    rax, rcx
  00026   48 2b c1    sub    rax, rcx
  00029   48 33 c2    xor    rax, rdx
  0002c   c3       ret    0

If one passes already the occupied set, and guarantee that rooks are subset of occupied, one safes another two instructions of course, but that loses a bit flexibility and tends to confuse due to the prototype and semantic of the Kogge-Stone getters.

Gerd
Back to top
View user's profile Send private message
Display posts from previous:   
Subject Author Date/Time
Resource for bit twiddlers J. Wesley Cleveland Fri May 04, 2007 1:55 am
      Re: Resource for bit twiddlers Gerd Isenberg Mon May 28, 2007 12:40 pm
            Re: Resource for bit twiddlers Gerd Isenberg Mon May 28, 2007 3:16 pm
                  Re: Resource for bit twiddlers Gerd Isenberg Mon May 28, 2007 4:35 pm
                        Re: Resource for bit twiddlers Gerd Isenberg Wed May 30, 2007 5:55 pm
                              Re: Resource for bit twiddlers Pradu Kannan Wed May 30, 2007 10:51 pm
                                    Re: Resource for bit twiddlers Gerd Isenberg Thu May 31, 2007 6:17 am
                                          Re: Resource for bit twiddlers Pradu Kannan Fri Jun 01, 2007 12:16 am
                                                Re: Resource for bit twiddlers Gerd Isenberg Fri Jun 01, 2007 8:19 am
            Re: Resource for bit twiddlers Gerd Isenberg Mon Jun 04, 2007 2:58 pm
Post new topic    TalkChess.com Forum Index -> Computer Chess Club: Programming and Technical Discussions

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum




Powered by phpBB © 2001, 2005 phpBB Group
Enhanced with Moby Threads