#include "evaluate.h"
#include "material.h"
#include "pawns.h"
-
-std::atomic<Score> Eval::Contempt;
+#include "thread.h"
namespace Trace {
if (relative_rank(Us, pos.square<KING>(Us)) == RANK_1)
kingRing[Us] |= shift<Up>(kingRing[Us]);
+ if (file_of(pos.square<KING>(Us)) == FILE_H)
+ kingRing[Us] |= shift<WEST>(kingRing[Us]);
+
+ else if (file_of(pos.square<KING>(Us)) == FILE_A)
+ kingRing[Us] |= shift<EAST>(kingRing[Us]);
+
kingAttackersCount[Them] = popcount(attackedBy[Us][KING] & pe->pawn_attacks(Them));
kingAttacksCount[Them] = kingAttackersWeight[Them] = 0;
}
constexpr Color Them = (Us == WHITE ? BLACK : WHITE);
constexpr Bitboard Camp = (Us == WHITE ? AllSquares ^ Rank6BB ^ Rank7BB ^ Rank8BB
- : AllSquares ^ Rank1BB ^ Rank2BB ^ Rank3BB);
+ : AllSquares ^ Rank1BB ^ Rank2BB ^ Rank3BB);
const Square ksq = pos.square<KING>(Us);
Bitboard weak, b, b1, b2, safe, unsafeChecks, pinned;
// Initialize score by reading the incrementally updated scores included in
// the position object (material + piece square tables) and the material
// imbalance. Score is computed internally from the white point of view.
- Score score = pos.psq_score() + me->imbalance() + Eval::Contempt;
+ Score score = pos.psq_score() + me->imbalance() + pos.this_thread()->contempt;
// Probe the pawn hash table
pe = Pawns::probe(pos);
std::memset(scores, 0, sizeof(scores));
- Eval::Contempt = SCORE_ZERO; // Reset any dynamic contempt
+ pos.this_thread()->contempt = SCORE_ZERO; // Reset any dynamic contempt
Value v = Evaluation<TRACE>(pos).value();