Remember when TT value equals static evaluation value

When the stored TT value equals the static value set a
proper flag so to not call evaluation() if we hit the
same position again but use the stored TT value instead.

This is another trick to avoid calling costly evaluation()
in qsearch.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2009-03-30 08:54:09 +01:00
parent c6c4713ab2
commit 6a8e46d53e
3 changed files with 22 additions and 7 deletions

View File

@@ -46,7 +46,8 @@
/// the 32 bits of the data field are so defined
///
/// bit 0-16: move
/// bit 17-19: not used
/// bit 17: stored value equals static value
/// bit 18-19: not used
/// bit 20-22: value type
/// bit 23-31: generation
@@ -61,6 +62,8 @@ public:
Value value() const { return Value(value_); }
ValueType type() const { return ValueType((data >> 20) & 7); }
int generation() const { return (data >> 23); }
bool staticValue() const { return ((data >> 17) & 1); }
void setStaticValue() { data |= (1 << 17); }
private:
Key key_;
@@ -80,7 +83,7 @@ public:
~TranspositionTable();
void set_size(unsigned mbSize);
void clear();
void store(const Position &pos, Value v, Depth d, Move m, ValueType type);
TTEntry* store(const Position &pos, Value v, Depth d, Move m, ValueType type);
TTEntry* retrieve(const Position &pos) const;
void new_search();
void insert_pv(const Position &pos, Move pv[]);