From: Marco Costalba Date: Fri, 12 Jun 2009 10:05:48 +0000 (+0200) Subject: Better clarify why recent generate_pawn_checks() works X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=8bec65029d6ac3b22b956cfd820ec754420052df;hp=b5685fc564b81be469c14d7778f16498c5a3ad91 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 --- 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