X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftt.h;h=5b83399b85c9093511f229b0bf853bf4e5120051;hp=021019be4c18ef71f2a04fe18c71ebfd51fa8bc9;hb=2572055c87f04832e43d63f30f26de04cadb729c;hpb=06a350f1aee97f05c3416853fb54385b23030ebc diff --git a/src/tt.h b/src/tt.h index 021019be..5b83399b 100644 --- a/src/tt.h +++ b/src/tt.h @@ -46,43 +46,49 @@ /// the 32 bits of the data field are so defined /// /// bit 0-16: move -/// bit 17-18: not used -/// bit 19-22: value type +/// bit 17-19: not used +/// bit 20-22: value type /// bit 23-31: generation class TTEntry { public: TTEntry() {} - TTEntry(uint32_t k, Value v, ValueType t, Depth d, Move m, int generation) - : key_ (k), data((m & 0x1FFFF) | (t << 19) | (generation << 23)), - value_(int16_t(v)), depth_(int16_t(d)) {} + TTEntry(uint32_t k, Value v, ValueType t, Depth d, Move m, int generation, + Value statV, Value kingD) + : key_ (k), data((m & 0x1FFFF) | (t << 20) | (generation << 23)), + value_(int16_t(v)), depth_(int16_t(d)), + staticValue_(int16_t(statV)), kingDanger_(int16_t(kingD)) {} uint32_t key() const { return key_; } Depth depth() const { return Depth(depth_); } Move move() const { return Move(data & 0x1FFFF); } Value value() const { return Value(value_); } - ValueType type() const { return ValueType((data >> 19) & 0xF); } + ValueType type() const { return ValueType((data >> 20) & 7); } int generation() const { return (data >> 23); } + Value static_value() const { return Value(staticValue_); } + Value king_danger() const { return Value(kingDanger_); } private: uint32_t key_; uint32_t data; int16_t value_; int16_t depth_; + int16_t staticValue_; + int16_t kingDanger_; }; /// This is the number of TTEntry slots for each position -const int ClusterSize = 5; +const int ClusterSize = 4; /// Each group of ClusterSize number of TTEntry form a TTCluster -/// that is indexed by a single position key. Cluster is padded -/// to a cache line size so to guarantee always aligned accesses. +/// that is indexed by a single position key. TTCluster size must +// be not bigger then a cache line size, in case it is less then +/// it should be padded to guarantee always aligned accesses. struct TTCluster { TTEntry data[ClusterSize]; - char cache_line_padding[64 - sizeof(TTEntry[ClusterSize])]; }; @@ -97,7 +103,7 @@ public: ~TranspositionTable(); void set_size(size_t mbSize); void clear(); - void store(const Key posKey, Value v, ValueType type, Depth d, Move m); + void store(const Key posKey, Value v, ValueType type, Depth d, Move m, Value statV, Value kingD); TTEntry* retrieve(const Key posKey) const; void prefetch(const Key posKey) const; void new_search();