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: Mon May 28, 2007 4:35 pm Reply to topic Reply with quote

The vc2005 compiler surprisingly was not aware of the
A ^ (~A & B) == A | B simplification.

Code:
?eastAttacks@@YA_K_K0@Z PROC
  00000   49 b9 80 80 80
   80 80 80 80 80    mov    r9, 8080808080808080H
  0000a   48 f7 d2    not    rdx
  0000d   49 b8 7f 7f 7f
   7f 7f 7f 7f 7f    mov    r8, 7f7f7f7f7f7f7f7fH
  00017   48 0b d1    or    rdx, rcx
  0001a   48 8b c2    mov    rax, rdx
  0001d   48 33 c1    xor    rax, rcx
  00020   49 23 c8    and    rcx, r8
  00023   49 0b c1    or    rax, r9
  00026   48 2b c1    sub    rax, rcx
  00029   48 8b ca    mov    rcx, rdx
  0002c   48 f7 d1    not    rcx
  0002f   49 23 c9    and    rcx, r9
  00032   48 33 c1    xor    rax, rcx
  00035   48 33 c2    xor    rax, rdx
  00038   c3       ret    0


Code:
rooks$ = 8
empty$ = 16
?eastAttacks@@YA_K_K0@Z PROC
  00000   48 f7 d2    not    rdx
  00003   49 b9 80 80 80
   80 80 80 80 80    mov    r9, 8080808080808080H
  0000d   49 b8 7f 7f 7f
   7f 7f 7f 7f 7f    mov    r8, 7f7f7f7f7f7f7f7fH
  00017   48 0b d1    or    rdx, rcx
  0001a   48 8b c2    mov    rax, rdx
  0001d   49 0b d1    or    rdx, r9
  00020   48 33 c1    xor    rax, rcx
  00023   49 23 c8    and    rcx, r8
  00026   49 0b c1    or    rax, r9
  00029   48 2b c1    sub    rax, rcx
  0002c   48 33 c2    xor    rax, rdx
  0002f   c3       ret    0


This one with a De Morgan and -i = ~i+1 transformation takes one register and a few code bytes less. The additional +1 is done together with the add by the AGU instaed of the ALU, performing a lea-instruction.
Code:
u64 eastAttacks(u64 rooks, u64 empty)
{
  const u64 H     = 0x8080808080808080;
  u64 occInclRook = rooks | ~empty;
  u64 occExclRook = rooks ^ occInclRook;
  u64 attacks     = ((occExclRook | H) + (~rooks | H) + 1)
                  ^  (occInclRook | H);
  return attacks;
}

Code:
rooks$ = 8
empty$ = 16
?eastAttacks@@YA_K_K0@Z PROC
  00000   49 b8 80 80 80
   80 80 80 80 80    mov    r8, 8080808080808080H
  0000a   48 f7 d2    not    rdx
  0000d   48 0b d1    or    rdx, rcx
  00010   48 8b c2    mov    rax, rdx
  00013   49 0b d0    or    rdx, r8
  00016   48 33 c1    xor    rax, rcx
  00019   48 f7 d1    not    rcx
  0001c   49 0b c0    or    rax, r8
  0001f   49 0b c8    or    rcx, r8
  00022   48 8d 44 08 01    lea    rax, QWORD PTR [rax+rcx+1]
  00027   48 33 c2    xor    rax, rdx
  0002a   c3       ret    0
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