tte = TT.retrieve(posKey);
ttMove = (tte ? tte->move() : MOVE_NONE);
- if (tte && ok_to_use_TT(tte, depth, beta, ply, nullStatus == ALLOW_NULLMOVE))
+ if (tte && ok_to_use_TT(tte, depth, beta, ply, nullStatus != VERIFY_NULLMOVE))
{
ss[ply].currentMove = ttMove; // Can be MOVE_NONE
return value_from_tt(tte->value(), ply);
// Do zugzwang verification search for high depths, don't store in TT
// if search was stopped.
if ( ( depth < 6 * OnePly
- || search(pos, ss, beta, depth-5*OnePly, ply, FORBID_NULLMOVE, threadID) >= beta)
+ || search(pos, ss, beta, depth-5*OnePly, ply, VERIFY_NULLMOVE, threadID) >= beta)
&& !AbortSearch
&& !TM.thread_should_stop(threadID))
{
assert(value_to_tt(nullValue, ply) == nullValue);
- TT.store(posKey, nullValue, VALUE_TYPE_NS_LO, depth, MOVE_NONE);
+ if (!tte)
+ TT.store(posKey, nullValue, VALUE_TYPE_NS_LO, depth, MOVE_NONE);
+
return nullValue;
}
} else {