summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
287b46a)
In statement:
*tte = TTEntry(posKey32, v, t, d, m, generation, statV, kingD);
We first create a TTEntry, then we copy the temporary entry to
its final destination in *tte then we discard the TTEntry.
Instead of this assign the fields directly to the destination TTEntry.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
if (m == MOVE_NONE)
m = tte->move();
if (m == MOVE_NONE)
m = tte->move();
- *tte = TTEntry(posKey32, v, t, d, m, generation, statV, kingD);
+ tte->save(posKey32, v, t, d, m, generation, statV, kingD);
return;
}
else if (i == 0) // replace would be a no-op in this common case
return;
}
else if (i == 0) // replace would be a no-op in this common case
if (c1 + c2 + c3 > 0)
replace = tte;
}
if (c1 + c2 + c3 > 0)
replace = tte;
}
- *replace = TTEntry(posKey32, v, t, d, m, generation, statV, kingD);
+ replace->save(posKey32, v, t, d, m, generation, statV, kingD);
- TTEntry() {}
- 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_); }
+ void save(uint32_t k, Value v, ValueType t, Depth d, Move m, int g, Value statV, Value kd) {
+
+ key32 = k;
+ data = (m & 0x1FFFF) | (t << 20) | (g << 23);
+ value16 = int16_t(v);
+ depth16 = int16_t(d);
+ staticValue = int16_t(statV);
+ kingDanger = int16_t(kd);
+ }
+
+ uint32_t key() const { return key32; }
+ Depth depth() const { return Depth(depth16); }
Move move() const { return Move(data & 0x1FFFF); }
Move move() const { return Move(data & 0x1FFFF); }
- Value value() const { return Value(value_); }
+ Value value() const { return Value(value16); }
ValueType type() const { return ValueType((data >> 20) & 7); }
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_); }
+ int generation() const { return data >> 23; }
+ Value static_value() const { return Value(staticValue); }
+ Value king_danger() const { return Value(kingDanger); }
- int16_t value_;
- int16_t depth_;
- int16_t staticValue_;
- int16_t kingDanger_;
+ int16_t value16;
+ int16_t depth16;
+ int16_t staticValue;
+ int16_t kingDanger;
/// Each group of ClusterSize number of TTEntry form a TTCluster
/// that is indexed by a single position key. TTCluster size must
/// Each group of ClusterSize number of TTEntry form a TTCluster
/// 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
+/// 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 {
/// it should be padded to guarantee always aligned accesses.
struct TTCluster {