From f84f04742a30166c2751de28245e11922da132fb Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 19 Apr 2013 09:41:28 +0200 Subject: [PATCH 1/1] Skip a couple of popcount in previous patch And some little tidy up No functional change. --- src/bitboard.h | 4 +--- src/evaluate.cpp | 5 ++++- src/pawns.cpp | 8 ++++---- src/pawns.h | 5 ++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/bitboard.h b/src/bitboard.h index 142c4c5a..a53f348b 100644 --- a/src/bitboard.h +++ b/src/bitboard.h @@ -63,7 +63,6 @@ extern Bitboard PassedPawnMask[COLOR_NB][SQUARE_NB]; extern Bitboard AttackSpanMask[COLOR_NB][SQUARE_NB]; extern Bitboard PseudoAttacks[PIECE_TYPE_NB][SQUARE_NB]; -const Bitboard WhiteSquares = 0x55AA55AA55AA55AAULL; const Bitboard BlackSquares = 0xAA55AA55AA55AA55ULL; /// Overloads of bitwise operators between a Bitboard and a Square for testing @@ -201,8 +200,7 @@ inline bool squares_aligned(Square s1, Square s2, Square s3) { /// the same color of the given square. inline Bitboard same_color_squares(Square s) { - return Bitboard(0xAA55AA55AA55AA55ULL) & s ? 0xAA55AA55AA55AA55ULL - : ~0xAA55AA55AA55AA55ULL; + return BlackSquares & s ? BlackSquares : ~BlackSquares; } diff --git a/src/evaluate.cpp b/src/evaluate.cpp index dd26e469..aeaae07f 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -171,6 +171,9 @@ namespace { // right to castle. const Value TrappedRookPenalty = Value(180); + // Penalty for bishop with pawns on the same coloured squares + const Score BishopPawnsPenalty = make_score(8, 12); + // Penalty for a bishop on a1/h1 (a8/h8 for black) which is trapped by // a friendly pawn on b2/g2 (b7/g7 for black). This can obviously only // happen in Chess960 games. @@ -584,7 +587,7 @@ Value do_evaluate(const Position& pos, Value& margin) { // Penalty for bishop with same coloured pawns if (Piece == BISHOP) - score -= make_score(8, 12) * ei.pi->same_colored_pawn_count(s, Us); + score -= BishopPawnsPenalty * ei.pi->pawns_on_same_color_squares(Us, s); // Bishop and knight outposts squares if ( (Piece == BISHOP || Piece == KNIGHT) diff --git a/src/pawns.cpp b/src/pawns.cpp index 3d99bfc6..5b64ac61 100644 --- a/src/pawns.cpp +++ b/src/pawns.cpp @@ -176,11 +176,11 @@ namespace { value += CandidateBonus[relative_rank(Us, s)]; } - e->pawnsOnWhiteSquaresCount[Us] = popcount(ourPawns & WhiteSquares); - e->pawnsOnWhiteSquaresCount[Them] = popcount(theirPawns & WhiteSquares); + e->pawnsOnSquares[Us][BLACK] = popcount(ourPawns & BlackSquares); + e->pawnsOnSquares[Us][WHITE] = pos.piece_count(Us, PAWN) - e->pawnsOnSquares[Us][BLACK]; - e->pawnsOnBlackSquaresCount[Us] = popcount(ourPawns & BlackSquares); - e->pawnsOnBlackSquaresCount[Them] = popcount(theirPawns & BlackSquares); + e->pawnsOnSquares[Them][BLACK] = popcount(theirPawns & BlackSquares); + e->pawnsOnSquares[Them][WHITE] = pos.piece_count(Them, PAWN) - e->pawnsOnSquares[Them][BLACK]; return value; } diff --git a/src/pawns.h b/src/pawns.h index 3ec62334..293869bc 100644 --- a/src/pawns.h +++ b/src/pawns.h @@ -40,7 +40,7 @@ struct Entry { int file_is_half_open(Color c, File f) const { return halfOpenFiles[c] & (1 << int(f)); } int has_open_file_to_left(Color c, File f) const { return halfOpenFiles[c] & ((1 << int(f)) - 1); } int has_open_file_to_right(Color c, File f) const { return halfOpenFiles[c] & ~((1 << int(f+1)) - 1); } - int same_colored_pawn_count(Square s, Color c) const { return (BlackSquares & s) ? pawnsOnBlackSquaresCount[c] : pawnsOnWhiteSquaresCount[c]; } + int pawns_on_same_color_squares(Color c, Square s) const { return pawnsOnSquares[c][!!(BlackSquares & s)]; } template Score king_safety(const Position& pos, Square ksq) { @@ -64,8 +64,7 @@ struct Entry { Score value; int halfOpenFiles[COLOR_NB]; Score kingSafety[COLOR_NB]; - int pawnsOnWhiteSquaresCount[COLOR_NB]; - int pawnsOnBlackSquaresCount[COLOR_NB]; + int pawnsOnSquares[COLOR_NB][COLOR_NB]; }; typedef HashTable Table; -- 2.39.2