1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-05-02 17:49:35 +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:
Marco Costalba 2009-06-20 08:31:39 +01:00
parent b1e79fed99
commit 3a4d6e2034
7 changed files with 30 additions and 26 deletions

View file

@ -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;
}

View file

@ -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);
}

View file

@ -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));
}

View file

@ -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)))

View file

@ -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);

View file

@ -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))))
{

View file

@ -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);
}