mirror of
https://github.com/sockspls/badfish
synced 2025-05-02 01:29:36 +00:00
Index en-passant zobrist keys by file
Instead of by square. This is a more conventional approach, as reported also in: http://chessprogramming.wikispaces.com/Zobrist+Hashing We shrink zobEp[] from 64 to 8 keys at the cost of an extra 'and 7' at runtime to get the file out of the ep square. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
3441e0075d
commit
ec5b9994b5
2 changed files with 9 additions and 9 deletions
|
@ -36,7 +36,7 @@ using std::cout;
|
|||
using std::endl;
|
||||
|
||||
Key Position::zobrist[2][8][64];
|
||||
Key Position::zobEp[64];
|
||||
Key Position::zobEp[8];
|
||||
Key Position::zobCastle[16];
|
||||
Key Position::zobSideToMove;
|
||||
Key Position::zobExclusion;
|
||||
|
@ -835,7 +835,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
|
|||
// Reset en passant square
|
||||
if (st->epSquare != SQ_NONE)
|
||||
{
|
||||
k ^= zobEp[st->epSquare];
|
||||
k ^= zobEp[file_of(st->epSquare)];
|
||||
st->epSquare = SQ_NONE;
|
||||
}
|
||||
|
||||
|
@ -873,7 +873,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI
|
|||
&& (attacks_from<PAWN>(from + pawn_push(us), us) & pieces(PAWN, them)))
|
||||
{
|
||||
st->epSquare = Square((from + to) / 2);
|
||||
k ^= zobEp[st->epSquare];
|
||||
k ^= zobEp[file_of(st->epSquare)];
|
||||
}
|
||||
|
||||
if (is_promotion(m))
|
||||
|
@ -1146,7 +1146,7 @@ void Position::do_castle_move(Move m) {
|
|||
// Clear en passant square
|
||||
if (st->epSquare != SQ_NONE)
|
||||
{
|
||||
st->key ^= zobEp[st->epSquare];
|
||||
st->key ^= zobEp[file_of(st->epSquare)];
|
||||
st->epSquare = SQ_NONE;
|
||||
}
|
||||
|
||||
|
@ -1195,7 +1195,7 @@ void Position::do_null_move(StateInfo& backupSt) {
|
|||
if (Do)
|
||||
{
|
||||
if (st->epSquare != SQ_NONE)
|
||||
st->key ^= zobEp[st->epSquare];
|
||||
st->key ^= zobEp[file_of(st->epSquare)];
|
||||
|
||||
st->key ^= zobSideToMove;
|
||||
prefetch((char*)TT.first_entry(st->key));
|
||||
|
@ -1396,7 +1396,7 @@ Key Position::compute_key() const {
|
|||
result ^= zobrist[color_of(piece_on(s))][type_of(piece_on(s))][s];
|
||||
|
||||
if (ep_square() != SQ_NONE)
|
||||
result ^= zobEp[ep_square()];
|
||||
result ^= zobEp[file_of(ep_square())];
|
||||
|
||||
if (sideToMove == BLACK)
|
||||
result ^= zobSideToMove;
|
||||
|
@ -1542,8 +1542,8 @@ void Position::init() {
|
|||
for (Square s = SQ_A1; s <= SQ_H8; s++)
|
||||
zobrist[c][pt][s] = rk.rand<Key>();
|
||||
|
||||
for (Square s = SQ_A1; s <= SQ_H8; s++)
|
||||
zobEp[s] = rk.rand<Key>();
|
||||
for (File f = FILE_A; f <= FILE_H; f++)
|
||||
zobEp[f] = rk.rand<Key>();
|
||||
|
||||
for (int cr = CASTLES_NONE; cr <= ALL_CASTLES; cr++)
|
||||
{
|
||||
|
|
|
@ -257,7 +257,7 @@ private:
|
|||
// Static variables
|
||||
static Score pieceSquareTable[16][64]; // [piece][square]
|
||||
static Key zobrist[2][8][64]; // [color][pieceType][square]/[piece count]
|
||||
static Key zobEp[64]; // [square]
|
||||
static Key zobEp[8]; // [file]
|
||||
static Key zobCastle[16]; // [castleRight]
|
||||
static Key zobSideToMove;
|
||||
static Key zobExclusion;
|
||||
|
|
Loading…
Add table
Reference in a new issue