From 8bec65029d6ac3b22b956cfd820ec754420052df Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 12 Jun 2009 12:05:48 +0200 Subject: [PATCH 1/1] Better clarify why recent generate_pawn_checks() works We can have false positives, but these are filtered out anyhow by following conditions so they are harmless. No functional change. Signed-off-by: Marco Costalba --- src/movegen.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/movegen.cpp b/src/movegen.cpp index 995f54f0..7558c89d 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -132,7 +132,7 @@ namespace { /// generate_captures generates() all pseudo-legal captures and queen -/// promotions. The return value is the number of moves generated. +/// promotions. The return value is the number of moves generated. int generate_captures(const Position& pos, MoveStack* mlist) { @@ -791,9 +791,11 @@ namespace { // Direct checks. These are possible only for pawns on neighboring files // and in the two ranks that, after the push, are in front of the enemy king. b1 = pawns & neighboring_files_bb(ksq) & ~dc; - b2 = rank_bb(ksq + 2 * TDELTA_S) | rank_bb(ksq + 3 * TDELTA_S); - b1 &= b2; - if (!b1) + + // We can get false positives if (ksq + x) is not in [0,63] range but + // is not a problem, they will be filtered out later. + b2 = b1 & (rank_bb(ksq + 2 * TDELTA_S) | rank_bb(ksq + 3 * TDELTA_S)); + if (!b2) return mlist; // Direct checks, single pawn pushes -- 2.39.2