From: Alain SAVARD Date: Fri, 23 Jun 2017 04:03:58 +0000 (-0400) Subject: Tidy up X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=6d24ef8585c2ed5618eb9b4ab1d8ee35a05ce2cd;ds=sidebyside Tidy up No functional change Closes #1148 --- diff --git a/src/bitboard.cpp b/src/bitboard.cpp index 5328321e..04d12c5e 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -30,11 +30,11 @@ Bitboard SquareBB[SQUARE_NB]; Bitboard FileBB[FILE_NB]; Bitboard RankBB[RANK_NB]; Bitboard AdjacentFilesBB[FILE_NB]; -Bitboard InFrontBB[COLOR_NB][RANK_NB]; +Bitboard ForwardRanksBB[COLOR_NB][RANK_NB]; Bitboard BetweenBB[SQUARE_NB][SQUARE_NB]; Bitboard LineBB[SQUARE_NB][SQUARE_NB]; Bitboard DistanceRingBB[SQUARE_NB][8]; -Bitboard ForwardBB[COLOR_NB][SQUARE_NB]; +Bitboard ForwardFileBB[COLOR_NB][SQUARE_NB]; Bitboard PassedPawnMask[COLOR_NB][SQUARE_NB]; Bitboard PawnAttackSpan[COLOR_NB][SQUARE_NB]; Bitboard PseudoAttacks[PIECE_TYPE_NB][SQUARE_NB]; @@ -163,14 +163,14 @@ void Bitboards::init() { AdjacentFilesBB[f] = (f > FILE_A ? FileBB[f - 1] : 0) | (f < FILE_H ? FileBB[f + 1] : 0); for (Rank r = RANK_1; r < RANK_8; ++r) - InFrontBB[WHITE][r] = ~(InFrontBB[BLACK][r + 1] = InFrontBB[BLACK][r] | RankBB[r]); + ForwardRanksBB[WHITE][r] = ~(ForwardRanksBB[BLACK][r + 1] = ForwardRanksBB[BLACK][r] | RankBB[r]); for (Color c = WHITE; c <= BLACK; ++c) for (Square s = SQ_A1; s <= SQ_H8; ++s) { - ForwardBB[c][s] = InFrontBB[c][rank_of(s)] & FileBB[file_of(s)]; - PawnAttackSpan[c][s] = InFrontBB[c][rank_of(s)] & AdjacentFilesBB[file_of(s)]; - PassedPawnMask[c][s] = ForwardBB[c][s] | PawnAttackSpan[c][s]; + ForwardFileBB [c][s] = ForwardRanksBB[c][rank_of(s)] & FileBB[file_of(s)]; + PawnAttackSpan[c][s] = ForwardRanksBB[c][rank_of(s)] & AdjacentFilesBB[file_of(s)]; + PassedPawnMask[c][s] = ForwardFileBB [c][s] | PawnAttackSpan[c][s]; } for (Square s1 = SQ_A1; s1 <= SQ_H8; ++s1) diff --git a/src/bitboard.h b/src/bitboard.h index ed7e318c..9aa33750 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -65,11 +65,11 @@ extern Bitboard SquareBB[SQUARE_NB]; extern Bitboard FileBB[FILE_NB]; extern Bitboard RankBB[RANK_NB]; extern Bitboard AdjacentFilesBB[FILE_NB]; -extern Bitboard InFrontBB[COLOR_NB][RANK_NB]; +extern Bitboard ForwardRanksBB[COLOR_NB][RANK_NB]; extern Bitboard BetweenBB[SQUARE_NB][SQUARE_NB]; extern Bitboard LineBB[SQUARE_NB][SQUARE_NB]; extern Bitboard DistanceRingBB[SQUARE_NB][8]; -extern Bitboard ForwardBB[COLOR_NB][SQUARE_NB]; +extern Bitboard ForwardFileBB[COLOR_NB][SQUARE_NB]; extern Bitboard PassedPawnMask[COLOR_NB][SQUARE_NB]; extern Bitboard PawnAttackSpan[COLOR_NB][SQUARE_NB]; extern Bitboard PseudoAttacks[PIECE_TYPE_NB][SQUARE_NB]; @@ -179,28 +179,28 @@ inline Bitboard between_bb(Square s1, Square s2) { } -/// in_front_bb() returns a bitboard representing all the squares on all the ranks +/// forward_ranks_bb() returns a bitboard representing all the squares on all the ranks /// in front of the given one, from the point of view of the given color. For -/// instance, in_front_bb(BLACK, RANK_3) will return the squares on ranks 1 and 2. +/// instance, forward_ranks_bb(BLACK, SQ_D3) will return the 16 squares on ranks 1 and 2. -inline Bitboard in_front_bb(Color c, Rank r) { - return InFrontBB[c][r]; +inline Bitboard forward_ranks_bb(Color c, Square s) { + return ForwardRanksBB[c][rank_of(s)]; } -/// forward_bb() returns a bitboard representing all the squares along the line +/// forward_file_bb() returns a bitboard representing all the squares along the line /// in front of the given one, from the point of view of the given color: -/// ForwardBB[c][s] = in_front_bb(c, rank_of(s)) & file_bb(s) +/// ForwardFileBB[c][s] = forward_ranks_bb(c, s) & file_bb(s) -inline Bitboard forward_bb(Color c, Square s) { - return ForwardBB[c][s]; +inline Bitboard forward_file_bb(Color c, Square s) { + return ForwardFileBB[c][s]; } /// pawn_attack_span() returns a bitboard representing all the squares that can be /// attacked by a pawn of the given color when it moves along its file, starting /// from the given square: -/// PawnAttackSpan[c][s] = in_front_bb(c, rank_of(s)) & adjacent_files_bb(file_of(s)); +/// PawnAttackSpan[c][s] = forward_ranks_bb(c, s) & adjacent_files_bb(file_of(s)); inline Bitboard pawn_attack_span(Color c, Square s) { return PawnAttackSpan[c][s]; @@ -209,7 +209,7 @@ inline Bitboard pawn_attack_span(Color c, Square s) { /// passed_pawn_mask() returns a bitboard mask which can be used to test if a /// pawn of the given color and on the given square is a passed pawn: -/// PassedPawnMask[c][s] = pawn_attack_span(c, s) | forward_bb(c, s) +/// PassedPawnMask[c][s] = pawn_attack_span(c, s) | forward_file_bb(c, s) inline Bitboard passed_pawn_mask(Color c, Square s) { return PassedPawnMask[c][s]; diff --git a/src/endgame.cpp b/src/endgame.cpp index b64b75cb..a5390b1a 100644 --- a/src/endgame.cpp +++ b/src/endgame.cpp @@ -598,7 +598,7 @@ ScaleFactor Endgame::operator()(const Position& pos) const { // If all pawns are ahead of the king, on a single rook file and // the king is within one file of the pawns, it's a draw. - if ( !(pawns & ~in_front_bb(weakSide, rank_of(ksq))) + if ( !(pawns & ~forward_ranks_bb(weakSide, ksq)) && !((pawns & ~FileABB) && (pawns & ~FileHBB)) && distance(ksq, lsb(pawns)) <= 1) return SCALE_FACTOR_DRAW; @@ -645,7 +645,7 @@ ScaleFactor Endgame::operator()(const Position& pos) const { if (relative_rank(strongSide, pawnSq) <= RANK_5) return SCALE_FACTOR_DRAW; - Bitboard path = forward_bb(strongSide, pawnSq); + Bitboard path = forward_file_bb(strongSide, pawnSq); if (path & pos.pieces(weakSide, KING)) return SCALE_FACTOR_DRAW; @@ -780,7 +780,7 @@ ScaleFactor Endgame::operator()(const Position& pos) const { // King needs to get close to promoting pawn to prevent knight from blocking. // Rules for this are very tricky, so just approximate. - if (forward_bb(strongSide, pawnSq) & pos.attacks_from(bishopSq)) + if (forward_file_bb(strongSide, pawnSq) & pos.attacks_from(bishopSq)) return ScaleFactor(distance(weakKingSq, pawnSq)); return SCALE_FACTOR_NONE; diff --git a/src/evaluate.cpp b/src/evaluate.cpp index 4e998bd4..d47c0955 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -88,7 +88,7 @@ namespace { template void initialize(); template Score evaluate_king(); template Score evaluate_threats(); - template Score evaluate_passer_pawns(); + template Score evaluate_passed_pawns(); template Score evaluate_space(); template Score evaluate_pieces(); ScaleFactor evaluate_scale_factor(Value eg); @@ -416,7 +416,7 @@ namespace { : ~Bitboard(0) ^ Rank1BB ^ Rank2BB ^ Rank3BB); const Square ksq = pos.square(Us); - Bitboard undefended, b, b1, b2, safe, other; + Bitboard kingOnlyDefended, b, b1, b2, safe, other; int kingDanger; // King shelter and enemy pawns storm @@ -426,9 +426,9 @@ namespace { if (kingAttackersCount[Them] > (1 - pos.count(Them))) { // Find the attacked squares which are defended only by our king... - undefended = attackedBy[Them][ALL_PIECES] - & attackedBy[Us][KING] - & ~attackedBy2[Us]; + kingOnlyDefended = attackedBy[Them][ALL_PIECES] + & attackedBy[Us][KING] + & ~attackedBy2[Us]; // ... and those which are not defended at all in the larger king ring b = attackedBy[Them][ALL_PIECES] & ~attackedBy[Us][ALL_PIECES] @@ -437,11 +437,11 @@ namespace { // Initialize the 'kingDanger' variable, which will be transformed // later into a king danger score. The initial value is based on the // number and types of the enemy's attacking pieces, the number of - // attacked and undefended squares around our king and the quality of - // the pawn shelter (current 'score' value). + // attacked and weak squares around our king, the absence of queen and + // the quality of the pawn shelter (current 'score' value). kingDanger = kingAttackersCount[Them] * kingAttackersWeight[Them] + 102 * kingAdjacentZoneAttacksCount[Them] - + 201 * popcount(undefended) + + 201 * popcount(kingOnlyDefended) + 143 * (popcount(b) + !!pos.pinned_pieces(Us)) - 848 * !pos.count(Them) - 9 * mg_value(score) / 8 @@ -449,7 +449,7 @@ namespace { // Analyse the safe enemy's checks which are possible on next move safe = ~pos.pieces(Them); - safe &= ~attackedBy[Us][ALL_PIECES] | (undefended & attackedBy2[Them]); + safe &= ~attackedBy[Us][ALL_PIECES] | (kingOnlyDefended & attackedBy2[Them]); b1 = pos.attacks_from< ROOK>(ksq); b2 = pos.attacks_from(ksq); @@ -532,8 +532,7 @@ namespace { const Square Up = (Us == WHITE ? NORTH : SOUTH); const Square Left = (Us == WHITE ? NORTH_WEST : SOUTH_EAST); const Square Right = (Us == WHITE ? NORTH_EAST : SOUTH_WEST); - const Bitboard TRank2BB = (Us == WHITE ? Rank2BB : Rank7BB); - const Bitboard TRank7BB = (Us == WHITE ? Rank7BB : Rank2BB); + const Bitboard TRank3BB = (Us == WHITE ? Rank3BB : Rank6BB); Bitboard b, weak, defended, stronglyProtected, safeThreats; Score score = SCORE_ZERO; @@ -596,14 +595,15 @@ namespace { score += ThreatByKing[more_than_one(b)]; } - // Bonus if some pawns can safely push and attack an enemy piece - b = pos.pieces(Us, PAWN) & ~TRank7BB; - b = shift(b | (shift(b & TRank2BB) & ~pos.pieces())); + // Find squares where our pawns can push on the next move + b = shift(pos.pieces(Us, PAWN)) & ~pos.pieces(); + b |= shift(b & TRank3BB) & ~pos.pieces(); - b &= ~pos.pieces() - & ~attackedBy[Them][PAWN] + // Keep only the squares which are not completely unsafe + b &= ~attackedBy[Them][PAWN] & (attackedBy[Us][ALL_PIECES] | ~attackedBy[Them][ALL_PIECES]); + // Add a bonus for each new pawn threats from those squares b = (shift(b) | shift(b)) & pos.pieces(Them) & ~attackedBy[Us][PAWN]; @@ -617,13 +617,14 @@ namespace { } - // evaluate_passer_pawns() evaluates the passed pawns and candidate passed + // evaluate_passed_pawns() evaluates the passed pawns and candidate passed // pawns of the given color. template template - Score Evaluation::evaluate_passer_pawns() { + Score Evaluation::evaluate_passed_pawns() { const Color Them = (Us == WHITE ? BLACK : WHITE); + const Square Up = (Us == WHITE ? NORTH : SOUTH); Bitboard b, bb, squaresToQueen, defendedSquares, unsafeSquares; Score score = SCORE_ZERO; @@ -634,9 +635,9 @@ namespace { { Square s = pop_lsb(&b); - assert(!(pos.pieces(Them, PAWN) & forward_bb(Us, s + pawn_push(Us)))); + assert(!(pos.pieces(Them, PAWN) & forward_file_bb(Us, s + Up))); - bb = forward_bb(Us, s) & (attackedBy[Them][ALL_PIECES] | pos.pieces(Them)); + bb = forward_file_bb(Us, s) & (attackedBy[Them][ALL_PIECES] | pos.pieces(Them)); score -= HinderPassedPawn * popcount(bb); int r = relative_rank(Us, s) - RANK_2; @@ -646,7 +647,7 @@ namespace { if (rr) { - Square blockSq = s + pawn_push(Us); + Square blockSq = s + Up; // Adjust bonus based on the king's proximity ebonus += distance(pos.square(Them), blockSq) * 5 * rr @@ -654,7 +655,7 @@ namespace { // If blockSq is not the queening square then consider also a second push if (relative_rank(Us, blockSq) != RANK_8) - ebonus -= distance(pos.square(Us), blockSq + pawn_push(Us)) * rr; + ebonus -= distance(pos.square(Us), blockSq + Up) * rr; // If the pawn is free to advance, then increase the bonus if (pos.empty(blockSq)) @@ -662,9 +663,9 @@ namespace { // If there is a rook or queen attacking/defending the pawn from behind, // consider all the squaresToQueen. Otherwise consider only the squares // in the pawn's path attacked or occupied by the enemy. - defendedSquares = unsafeSquares = squaresToQueen = forward_bb(Us, s); + defendedSquares = unsafeSquares = squaresToQueen = forward_file_bb(Us, s); - bb = forward_bb(Them, s) & pos.pieces(ROOK, QUEEN) & pos.attacks_from(s); + bb = forward_file_bb(Them, s) & pos.pieces(ROOK, QUEEN) & pos.attacks_from(s); if (!(pos.pieces(Us) & bb)) defendedSquares &= attackedBy[Us][ALL_PIECES]; @@ -692,7 +693,7 @@ namespace { // Scale down bonus for candidate passers which need more than one // pawn push to become passed or have a pawn in front of them. - if (!pos.pawn_passed(Us, s + pawn_push(Us)) || (pos.pieces(PAWN) & forward_bb(Us, s))) + if (!pos.pawn_passed(Us, s + Up) || (pos.pieces(PAWN) & forward_file_bb(Us, s))) mbonus /= 2, ebonus /= 2; score += make_score(mbonus, ebonus) + PassedFile[file_of(s)]; @@ -852,8 +853,8 @@ namespace { score += evaluate_threats() - evaluate_threats(); - score += evaluate_passer_pawns() - - evaluate_passer_pawns(); + score += evaluate_passed_pawns() + - evaluate_passed_pawns(); if (pos.non_pawn_material() >= SpaceThreshold) score += evaluate_space() diff --git a/src/pawns.cpp b/src/pawns.cpp index 0f6430b9..b8f82cff 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -126,7 +126,7 @@ namespace { e->pawnAttacksSpan[Us] |= pawn_attack_span(Us, s); // Flag the pawn - opposed = theirPawns & forward_bb(Us, s); + opposed = theirPawns & forward_file_bb(Us, s); stoppers = theirPawns & passed_pawn_mask(Us, s); lever = theirPawns & PawnAttacks[Us][s]; leverPush = theirPawns & PawnAttacks[Us][s + Up]; @@ -158,7 +158,7 @@ namespace { // which could become passed after one or two pawn pushes when are // not attacked more times than defended. if ( !(stoppers ^ lever ^ leverPush) - && !(ourPawns & forward_bb(Us, s)) + && !(ourPawns & forward_file_bb(Us, s)) && popcount(supported) >= popcount(lever) && popcount(phalanx) >= popcount(leverPush)) e->passedPawns[Us] |= s; @@ -250,7 +250,7 @@ Value Entry::shelter_storm(const Position& pos, Square ksq) { enum { BlockedByKing, Unopposed, BlockedByPawn, Unblocked }; - Bitboard b = pos.pieces(PAWN) & (in_front_bb(Us, rank_of(ksq)) | rank_bb(ksq)); + Bitboard b = pos.pieces(PAWN) & (forward_ranks_bb(Us, ksq) | rank_bb(ksq)); Bitboard ourPawns = b & pos.pieces(Us); Bitboard theirPawns = b & pos.pieces(Them); Value safety = MaxSafetyBonus; @@ -261,7 +261,7 @@ Value Entry::shelter_storm(const Position& pos, Square ksq) { b = ourPawns & file_bb(f); Rank rkUs = b ? relative_rank(Us, backmost_sq(Us, b)) : RANK_1; - b = theirPawns & file_bb(f); + b = theirPawns & file_bb(f); Rank rkThem = b ? relative_rank(Us, frontmost_sq(Them, b)) : RANK_1; int d = std::min(f, FILE_H - f);