&& !value_is_mate(beta)
&& !pos.has_pawn_on_7th(pos.side_to_move()))
{
+ // Pass ss->eval to qsearch() and avoid an evaluate call
+ if (!tte || tte->static_value() == VALUE_NONE)
+ TT.store(posKey, ss->eval, VALUE_TYPE_EXACT, Depth(-127*OnePly), MOVE_NONE, ss->eval, ei.kingDanger[pos.side_to_move()]);
+
Value rbeta = beta - razor_margin(depth);
Value v = qsearch<NonPV>(pos, ss, rbeta-1, rbeta, Depth(0));
if (v < rbeta)
// Stand pat. Return immediately if static value is at least beta
if (bestValue >= beta)
{
- if (!tte) // FIXME, remove condition
+ if (!tte)
TT.store(pos.get_key(), value_to_tt(bestValue, ply), VALUE_TYPE_LOWER, Depth(-127*OnePly), MOVE_NONE, ss->eval, ei.kingDanger[pos.side_to_move()]);
return bestValue;