Speed up attack generation for leapers
authorFabian Fichter <ianfab@users.noreply.github.com>
Wed, 9 Dec 2020 19:06:55 +0000 (20:06 +0100)
committerFabian Fichter <ianfab@users.noreply.github.com>
Wed, 9 Dec 2020 19:06:55 +0000 (20:06 +0100)
chess STC
LLR: 2.98 (-2.94,2.94) [-10.00,5.00]
Total: 2299 W: 535 L: 502 D: 1262
http://www.variantfishtest.org:6543/tests/view/5fd0060c6e23db221d9e94b4

seirawan STC
LLR: 2.95 (-2.94,2.94) [-10.00,5.00]
Total: 896 W: 342 L: 295 D: 259
http://www.variantfishtest.org:6543/tests/view/5fd0ab0f6e23db221d9e94c4

minishogi STC
LLR: 2.96 (-2.94,2.94) [0.00,10.00]
Total: 3418 W: 1785 L: 1633 D: 0
http://www.variantfishtest.org:6543/tests/view/5fd006326e23db221d9e94b7

asean STC
LLR: 2.96 (-2.94,2.94) [0.00,10.00]
Total: 1211 W: 246 L: 174 D: 791
http://www.variantfishtest.org:6543/tests/view/5fd006816e23db221d9e94b9

No functional change.

src/bitboard.h

index 21a77e6..5df1047 100644 (file)
@@ -425,44 +425,50 @@ inline Bitboard attacks_bb(Square s, Bitboard occupied) {
 
 inline Bitboard attacks_bb(Color c, PieceType pt, Square s, Bitboard occupied) {
   Bitboard b = LeaperAttacks[c][pt][s];
-  if (AttackRiderTypes[pt] & RIDER_BISHOP)
-      b |= rider_attacks_bb<RIDER_BISHOP>(s, occupied);
-  if (AttackRiderTypes[pt] & RIDER_ROOK_H)
-      b |= rider_attacks_bb<RIDER_ROOK_H>(s, occupied);
-  if (AttackRiderTypes[pt] & RIDER_ROOK_V)
-      b |= rider_attacks_bb<RIDER_ROOK_V>(s, occupied);
-  if (AttackRiderTypes[pt] & RIDER_CANNON_H)
-      b |= rider_attacks_bb<RIDER_CANNON_H>(s, occupied);
-  if (AttackRiderTypes[pt] & RIDER_CANNON_V)
-      b |= rider_attacks_bb<RIDER_CANNON_V>(s, occupied);
-  if (AttackRiderTypes[pt] & RIDER_HORSE)
-      b |= rider_attacks_bb<RIDER_HORSE>(s, occupied);
-  if (AttackRiderTypes[pt] & RIDER_ELEPHANT)
-      b |= rider_attacks_bb<RIDER_ELEPHANT>(s, occupied);
-  if (AttackRiderTypes[pt] & RIDER_JANGGI_ELEPHANT)
-      b |= rider_attacks_bb<RIDER_JANGGI_ELEPHANT>(s, occupied);
+  if (AttackRiderTypes[pt])
+  {
+      if (AttackRiderTypes[pt] & RIDER_BISHOP)
+          b |= rider_attacks_bb<RIDER_BISHOP>(s, occupied);
+      if (AttackRiderTypes[pt] & RIDER_ROOK_H)
+          b |= rider_attacks_bb<RIDER_ROOK_H>(s, occupied);
+      if (AttackRiderTypes[pt] & RIDER_ROOK_V)
+          b |= rider_attacks_bb<RIDER_ROOK_V>(s, occupied);
+      if (AttackRiderTypes[pt] & RIDER_CANNON_H)
+          b |= rider_attacks_bb<RIDER_CANNON_H>(s, occupied);
+      if (AttackRiderTypes[pt] & RIDER_CANNON_V)
+          b |= rider_attacks_bb<RIDER_CANNON_V>(s, occupied);
+      if (AttackRiderTypes[pt] & RIDER_HORSE)
+          b |= rider_attacks_bb<RIDER_HORSE>(s, occupied);
+      if (AttackRiderTypes[pt] & RIDER_ELEPHANT)
+          b |= rider_attacks_bb<RIDER_ELEPHANT>(s, occupied);
+      if (AttackRiderTypes[pt] & RIDER_JANGGI_ELEPHANT)
+          b |= rider_attacks_bb<RIDER_JANGGI_ELEPHANT>(s, occupied);
+  }
   return b & PseudoAttacks[c][pt][s];
 }
 
 
 inline Bitboard moves_bb(Color c, PieceType pt, Square s, Bitboard occupied) {
   Bitboard b = LeaperMoves[c][pt][s];
-  if (MoveRiderTypes[pt] & RIDER_BISHOP)
-      b |= rider_attacks_bb<RIDER_BISHOP>(s, occupied);
-  if (MoveRiderTypes[pt] & RIDER_ROOK_H)
-      b |= rider_attacks_bb<RIDER_ROOK_H>(s, occupied);
-  if (MoveRiderTypes[pt] & RIDER_ROOK_V)
-      b |= rider_attacks_bb<RIDER_ROOK_V>(s, occupied);
-  if (MoveRiderTypes[pt] & RIDER_CANNON_H)
-      b |= rider_attacks_bb<RIDER_CANNON_H>(s, occupied);
-  if (MoveRiderTypes[pt] & RIDER_CANNON_V)
-      b |= rider_attacks_bb<RIDER_CANNON_V>(s, occupied);
-  if (MoveRiderTypes[pt] & RIDER_HORSE)
-      b |= rider_attacks_bb<RIDER_HORSE>(s, occupied);
-  if (MoveRiderTypes[pt] & RIDER_ELEPHANT)
-      b |= rider_attacks_bb<RIDER_ELEPHANT>(s, occupied);
-  if (MoveRiderTypes[pt] & RIDER_JANGGI_ELEPHANT)
-      b |= rider_attacks_bb<RIDER_JANGGI_ELEPHANT>(s, occupied);
+  if (MoveRiderTypes[pt])
+  {
+      if (MoveRiderTypes[pt] & RIDER_BISHOP)
+          b |= rider_attacks_bb<RIDER_BISHOP>(s, occupied);
+      if (MoveRiderTypes[pt] & RIDER_ROOK_H)
+          b |= rider_attacks_bb<RIDER_ROOK_H>(s, occupied);
+      if (MoveRiderTypes[pt] & RIDER_ROOK_V)
+          b |= rider_attacks_bb<RIDER_ROOK_V>(s, occupied);
+      if (MoveRiderTypes[pt] & RIDER_CANNON_H)
+          b |= rider_attacks_bb<RIDER_CANNON_H>(s, occupied);
+      if (MoveRiderTypes[pt] & RIDER_CANNON_V)
+          b |= rider_attacks_bb<RIDER_CANNON_V>(s, occupied);
+      if (MoveRiderTypes[pt] & RIDER_HORSE)
+          b |= rider_attacks_bb<RIDER_HORSE>(s, occupied);
+      if (MoveRiderTypes[pt] & RIDER_ELEPHANT)
+          b |= rider_attacks_bb<RIDER_ELEPHANT>(s, occupied);
+      if (MoveRiderTypes[pt] & RIDER_JANGGI_ELEPHANT)
+          b |= rider_attacks_bb<RIDER_JANGGI_ELEPHANT>(s, occupied);
+  }
   return b & PseudoMoves[c][pt][s];
 }