mirror of
https://github.com/sockspls/badfish
synced 2025-05-02 01:29:36 +00:00
Micro optimize and rename move_promotion()
Rename to move_is_promotion() to be more clear, also add a new function move_promotion_piece() to get the promotion piece type in the few places where is needed. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
b1e79fed99
commit
3a4d6e2034
7 changed files with 30 additions and 26 deletions
|
@ -129,8 +129,8 @@ const std::string move_to_string(Move move) {
|
|||
return (from == SQ_E1 ? "e1c1" : "e8c8");
|
||||
}
|
||||
str = square_to_string(from) + square_to_string(to);
|
||||
if (move_promotion(move))
|
||||
str += piece_type_to_char(move_promotion(move), false);
|
||||
if (move_is_promotion(move))
|
||||
str += piece_type_to_char(move_promotion_piece(move), false);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
|
|
@ -78,10 +78,14 @@ inline Square move_to(Move m) {
|
|||
return Square(m & 0x3F);
|
||||
}
|
||||
|
||||
inline PieceType move_promotion(Move m) {
|
||||
inline PieceType move_promotion_piece(Move m) {
|
||||
return PieceType((int(m) >> 12) & 7);
|
||||
}
|
||||
|
||||
inline int move_is_promotion(Move m) {
|
||||
return m & (7 << 12);
|
||||
}
|
||||
|
||||
inline int move_is_ep(Move m) {
|
||||
return m & (1 << 15);
|
||||
}
|
||||
|
|
|
@ -506,7 +506,7 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) {
|
|||
// be a promotion.
|
||||
if ( ( (square_rank(to) == RANK_8 && us == WHITE)
|
||||
||(square_rank(to) == RANK_1 && us != WHITE))
|
||||
&& !move_promotion(m))
|
||||
&& !move_is_promotion(m))
|
||||
return false;
|
||||
|
||||
// Proceed according to the square delta between the source and
|
||||
|
@ -560,7 +560,7 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) {
|
|||
// Luckly we can handle all the other pieces in one go
|
||||
return ( pos.piece_attacks_square(pos.piece_on(from), from, to)
|
||||
&& pos.pl_move_is_legal(m, pinned)
|
||||
&& !move_promotion(m));
|
||||
&& !move_is_promotion(m));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -247,7 +247,7 @@ void MovePicker::score_captures() {
|
|||
seeValue = pos.see(m);
|
||||
if (seeValue >= 0)
|
||||
{
|
||||
if (move_promotion(m))
|
||||
if (move_is_promotion(m))
|
||||
moves[i].score = QueenValueMidgame;
|
||||
else
|
||||
moves[i].score = int(pos.midgame_value_of_piece_on(move_to(m)))
|
||||
|
@ -307,7 +307,7 @@ void MovePicker::score_qcaptures() {
|
|||
for (int i = 0; i < numOfMoves; i++)
|
||||
{
|
||||
Move m = moves[i].move;
|
||||
if (move_promotion(m))
|
||||
if (move_is_promotion(m))
|
||||
moves[i].score = QueenValueMidgame;
|
||||
else
|
||||
moves[i].score = int(pos.midgame_value_of_piece_on(move_to(m)))
|
||||
|
|
|
@ -555,12 +555,12 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const {
|
|||
&& (direction_between_squares(from, ksq) != direction_between_squares(to, ksq)))
|
||||
return true;
|
||||
|
||||
if (move_promotion(m)) // Promotion with check?
|
||||
if (move_is_promotion(m)) // Promotion with check?
|
||||
{
|
||||
Bitboard b = occupied_squares();
|
||||
clear_bit(&b, from);
|
||||
|
||||
switch (move_promotion(m))
|
||||
switch (move_promotion_piece(m))
|
||||
{
|
||||
case KNIGHT:
|
||||
return bit_is_set(piece_attacks<KNIGHT>(to), ksq);
|
||||
|
@ -721,7 +721,7 @@ void Position::do_move(Move m, StateInfo& newSt, Bitboard dcCandidates) {
|
|||
|
||||
if (move_is_castle(m))
|
||||
do_castle_move(m);
|
||||
else if (move_promotion(m))
|
||||
else if (move_is_promotion(m))
|
||||
do_promotion_move(m);
|
||||
else if (move_is_ep(m))
|
||||
do_ep_move(m);
|
||||
|
@ -1005,7 +1005,7 @@ void Position::do_promotion_move(Move m) {
|
|||
board[from] = EMPTY;
|
||||
|
||||
// Insert promoted piece
|
||||
promotion = move_promotion(m);
|
||||
promotion = move_promotion_piece(m);
|
||||
assert(promotion >= KNIGHT && promotion <= QUEEN);
|
||||
set_bit(&(byColorBB[us]), to);
|
||||
set_bit(&(byTypeBB[promotion]), to);
|
||||
|
@ -1152,7 +1152,7 @@ void Position::undo_move(Move m) {
|
|||
|
||||
if (move_is_castle(m))
|
||||
undo_castle_move(m);
|
||||
else if (move_promotion(m))
|
||||
else if (move_is_promotion(m))
|
||||
undo_promotion_move(m);
|
||||
else if (move_is_ep(m))
|
||||
undo_ep_move(m);
|
||||
|
@ -1304,7 +1304,7 @@ void Position::undo_promotion_move(Move m) {
|
|||
assert(piece_on(from) == EMPTY);
|
||||
|
||||
// Remove promoted piece
|
||||
promotion = move_promotion(m);
|
||||
promotion = move_promotion_piece(m);
|
||||
assert(piece_on(to)==piece_of_color_and_type(us, promotion));
|
||||
assert(promotion >= KNIGHT && promotion <= QUEEN);
|
||||
clear_bit(&(byColorBB[us]), to);
|
||||
|
|
|
@ -113,10 +113,10 @@ const string move_to_san(const Position& pos, Move m) {
|
|||
san += "x";
|
||||
}
|
||||
san += square_to_string(move_to(m));
|
||||
if (move_promotion(m))
|
||||
if (move_is_promotion(m))
|
||||
{
|
||||
san += '=';
|
||||
san += piece_type_to_char(move_promotion(m), true);
|
||||
san += piece_type_to_char(move_promotion_piece(m), true);
|
||||
}
|
||||
}
|
||||
// Is the move check? We don't use pos.move_is_check(m) here, because
|
||||
|
@ -273,7 +273,7 @@ Move move_from_san(const Position& pos, const string& movestr) {
|
|||
while ((m = mp.get_next_move()) != MOVE_NONE)
|
||||
if ( pos.type_of_piece_on(move_from(m)) == pt
|
||||
&& move_to(m) == to
|
||||
&& move_promotion(m) == promotion
|
||||
&& move_promotion_piece(m) == promotion
|
||||
&& (fromFile == FILE_NONE || fromFile == square_file(move_from(m)))
|
||||
&& (fromRank == RANK_NONE || fromRank == square_rank(move_from(m))))
|
||||
{
|
||||
|
|
|
@ -1086,7 +1086,7 @@ namespace {
|
|||
&& moveCount >= LMRPVMoves
|
||||
&& !dangerous
|
||||
&& !moveIsCapture
|
||||
&& !move_promotion(move)
|
||||
&& !move_is_promotion(move)
|
||||
&& !move_is_castle(move)
|
||||
&& !move_is_killer(move, ss[ply]))
|
||||
{
|
||||
|
@ -1337,7 +1337,7 @@ namespace {
|
|||
if ( useFutilityPruning
|
||||
&& !dangerous
|
||||
&& !moveIsCapture
|
||||
&& !move_promotion(move))
|
||||
&& !move_is_promotion(move))
|
||||
{
|
||||
// History pruning. See ok_to_prune() definition
|
||||
if ( moveCount >= 2 + int(depth)
|
||||
|
@ -1370,7 +1370,7 @@ namespace {
|
|||
&& moveCount >= LMRNonPVMoves
|
||||
&& !dangerous
|
||||
&& !moveIsCapture
|
||||
&& !move_promotion(move)
|
||||
&& !move_is_promotion(move)
|
||||
&& !move_is_castle(move)
|
||||
&& !move_is_killer(move, ss[ply]))
|
||||
{
|
||||
|
@ -1545,7 +1545,7 @@ namespace {
|
|||
if ( enoughMaterial
|
||||
&& !isCheck
|
||||
&& !pvNode
|
||||
&& !move_promotion(move)
|
||||
&& !move_is_promotion(move)
|
||||
&& !pos.move_is_check(move, dcCandidates)
|
||||
&& !pos.move_is_passed_pawn_push(move))
|
||||
{
|
||||
|
@ -1566,7 +1566,7 @@ namespace {
|
|||
|
||||
// Don't search captures and checks with negative SEE values
|
||||
if ( !isCheck
|
||||
&& !move_promotion(move)
|
||||
&& !move_is_promotion(move)
|
||||
&& (pos.midgame_value_of_piece_on(move_from(move)) >
|
||||
pos.midgame_value_of_piece_on(move_to(move)))
|
||||
&& pos.see(move) < 0)
|
||||
|
@ -1663,7 +1663,7 @@ namespace {
|
|||
if ( useFutilityPruning
|
||||
&& !dangerous
|
||||
&& !moveIsCapture
|
||||
&& !move_promotion(move)
|
||||
&& !move_is_promotion(move)
|
||||
&& moveCount >= 2 + int(sp->depth)
|
||||
&& ok_to_prune(pos, move, ss[sp->ply].threatMove, sp->depth, Threads[threadID].H))
|
||||
continue;
|
||||
|
@ -1677,7 +1677,7 @@ namespace {
|
|||
if ( !dangerous
|
||||
&& moveCount >= LMRNonPVMoves
|
||||
&& !moveIsCapture
|
||||
&& !move_promotion(move)
|
||||
&& !move_is_promotion(move)
|
||||
&& !move_is_castle(move)
|
||||
&& !move_is_killer(move, ss[sp->ply]))
|
||||
{
|
||||
|
@ -1780,7 +1780,7 @@ namespace {
|
|||
if ( !dangerous
|
||||
&& moveCount >= LMRPVMoves
|
||||
&& !moveIsCapture
|
||||
&& !move_promotion(move)
|
||||
&& !move_is_promotion(move)
|
||||
&& !move_is_castle(move)
|
||||
&& !move_is_killer(move, ss[sp->ply]))
|
||||
{
|
||||
|
@ -2236,7 +2236,7 @@ namespace {
|
|||
&& pos.type_of_piece_on(move_to(m)) != PAWN
|
||||
&& ( pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK)
|
||||
- pos.midgame_value_of_piece_on(move_to(m)) == Value(0))
|
||||
&& !move_promotion(m)
|
||||
&& !move_is_promotion(m)
|
||||
&& !move_is_ep(m))
|
||||
{
|
||||
result += PawnEndgameExtension[pvNode];
|
||||
|
@ -2347,7 +2347,7 @@ namespace {
|
|||
|
||||
bool ok_to_history(const Position& pos, Move m) {
|
||||
|
||||
return !pos.move_is_capture(m) && !move_promotion(m);
|
||||
return !pos.move_is_capture(m) && !move_is_promotion(m);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue