mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 11:39:15 +00:00
Cache king shelter info in pawns structure
It does not change often and is not so fast to calculate. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
a75aa6035b
commit
f83b899f39
2 changed files with 26 additions and 4 deletions
|
@ -709,11 +709,19 @@ namespace {
|
|||
// King shelter
|
||||
if (relative_rank(us, s) <= RANK_4)
|
||||
{
|
||||
Bitboard pawns = p.pawns(us) & this_and_neighboring_files_bb(s);
|
||||
Rank r = square_rank(s);
|
||||
for (int i = 1; i < 4; i++)
|
||||
shelter += count_1s_8bit(shiftRowsDown(pawns, r+i*sign)) * (128>>i);
|
||||
// Shelter cache lookup
|
||||
shelter = ei.pi->kingShelter(us, s);
|
||||
if (shelter == -1)
|
||||
{
|
||||
shelter = 0;
|
||||
Bitboard pawns = p.pawns(us) & this_and_neighboring_files_bb(s);
|
||||
Rank r = square_rank(s);
|
||||
for (int i = 1; i < 4; i++)
|
||||
shelter += count_1s_8bit(shiftRowsDown(pawns, r+i*sign)) * (128>>i);
|
||||
|
||||
// Cache shelter value in pawn info
|
||||
ei.pi->setKingShelter(us, s, shelter);
|
||||
}
|
||||
ei.mgValue += sign * Value(shelter);
|
||||
}
|
||||
|
||||
|
|
14
src/pawns.h
14
src/pawns.h
|
@ -53,12 +53,16 @@ public:
|
|||
int file_is_half_open(Color c, File f) const;
|
||||
int has_open_file_to_left(Color c, File f) const;
|
||||
int has_open_file_to_right(Color c, File f) const;
|
||||
int kingShelter(Color c, Square ksq) const;
|
||||
void setKingShelter(Color c, Square ksq, int value);
|
||||
|
||||
private:
|
||||
void clear();
|
||||
|
||||
Key key;
|
||||
Bitboard passedPawns;
|
||||
Square kingSquares[2];
|
||||
int16_t kingShelters[2];
|
||||
int16_t mgValue, egValue;
|
||||
int16_t ksStormValue[2], qsStormValue[2];
|
||||
uint8_t halfOpenFiles[2];
|
||||
|
@ -120,6 +124,15 @@ inline int PawnInfo::has_open_file_to_right(Color c, File f) const {
|
|||
return halfOpenFiles[c] & ~((1 << int(f+1)) - 1);
|
||||
}
|
||||
|
||||
inline int PawnInfo::kingShelter(Color c, Square ksq) const {
|
||||
return (kingSquares[c] == ksq ? kingShelters[c] : -1);
|
||||
}
|
||||
|
||||
inline void PawnInfo::setKingShelter(Color c, Square ksq, int value) {
|
||||
kingSquares[c] = ksq;
|
||||
kingShelters[c] = (int16_t)value;
|
||||
}
|
||||
|
||||
inline void PawnInfo::clear() {
|
||||
|
||||
passedPawns = EmptyBoardBB;
|
||||
|
@ -127,6 +140,7 @@ inline void PawnInfo::clear() {
|
|||
ksStormValue[WHITE] = ksStormValue[BLACK] = 0;
|
||||
qsStormValue[WHITE] = qsStormValue[BLACK] = 0;
|
||||
halfOpenFiles[WHITE] = halfOpenFiles[BLACK] = 0xFF;
|
||||
kingSquares[WHITE] = kingSquares[BLACK] = SQ_NONE;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue