1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

Avoid a double copy when saving a TTEntry

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>
This commit is contained in:
Marco Costalba 2010-06-05 11:50:24 +02:00
parent 287b46aa63
commit ed2754227a
2 changed files with 23 additions and 20 deletions

View file

@ -125,7 +125,7 @@ void TranspositionTable::store(const Key posKey, Value v, ValueType t, Depth d,
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
@ -138,7 +138,7 @@ void TranspositionTable::store(const Key posKey, Value v, ValueType t, Depth d,
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);
writes++;
}

View file

@ -53,29 +53,32 @@
class TTEntry {
public:
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)) {}
void save(uint32_t k, Value v, ValueType t, Depth d, Move m, int g, Value statV, Value kd) {
uint32_t key() const { return key_; }
Depth depth() const { return Depth(depth_); }
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); }
Value value() const { return Value(value_); }
Value value() const { return Value(value16); }
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); }
private:
uint32_t key_;
uint32_t key32;
uint32_t data;
int16_t value_;
int16_t depth_;
int16_t staticValue_;
int16_t kingDanger_;
int16_t value16;
int16_t depth16;
int16_t staticValue;
int16_t kingDanger;
};
@ -84,7 +87,7 @@ const int ClusterSize = 4;
/// 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 {