- Value hValue = thisThread->history[pos.piece_on(to_sq(move))][to_sq(move)];
- Value cmhValue = cmh[pos.piece_on(to_sq(move))][to_sq(move)];
-
- const CounterMoveStats* fm = (ss - 2)->counterMoves;
- const CounterMoveStats* fm2 = (ss - 4)->counterMoves;
- Value fmValue = (fm ? (*fm)[pos.piece_on(to_sq(move))][to_sq(move)] : VALUE_ZERO);
- Value fm2Value = (fm2 ? (*fm2)[pos.piece_on(to_sq(move))][to_sq(move)] : VALUE_ZERO);
-
- // Increase reduction for cut nodes and moves with a bad history
- if ( (!PvNode && cutNode)
- || (hValue < VALUE_ZERO && cmhValue <= VALUE_ZERO))
- r += ONE_PLY;
+ Value val = thisThread->history[moved_piece][to_sq(move)]
+ + (cmh ? (*cmh )[moved_piece][to_sq(move)] : VALUE_ZERO)
+ + (fmh ? (*fmh )[moved_piece][to_sq(move)] : VALUE_ZERO)
+ + (fmh2 ? (*fmh2)[moved_piece][to_sq(move)] : VALUE_ZERO);