/// Simple macro to wrap a very common while loop, no facny, no flexibility,
/// hardcoded names 'mlist' and 'from'.
-#define SERIALIZE(b) while (b) (*mlist++).move = make_move(from, pop_1st_bit(&b))
+#define SERIALIZE(b) while (b) (*mlist++).move = make_move(from, pop_lsb(&b))
/// Version used for pawns, where the 'from' square is given as a delta from the 'to' square
-#define SERIALIZE_PAWNS(b, d) while (b) { Square to = pop_1st_bit(&b); \
+#define SERIALIZE_PAWNS(b, d) while (b) { Square to = pop_lsb(&b); \
(*mlist++).move = make_move(to - (d), to); }
namespace {
&& (pos.attackers_to(kto, pos.pieces() ^ rfrom) & enemies))
return mlist;
- (*mlist++).move = make_castle(kfrom, rfrom);
+ (*mlist++).move = make<CASTLE>(kfrom, rfrom);
if (OnlyChecks && !pos.move_gives_check((mlist - 1)->move, CheckInfo(pos)))
mlist--;
while (b)
{
- Square to = pop_1st_bit(&b);
+ Square to = pop_lsb(&b);
if (Type == CAPTURES || Type == EVASIONS || Type == NON_EVASIONS)
- (*mlist++).move = make_promotion(to - Delta, to, QUEEN);
+ (*mlist++).move = make<PROMOTION>(to - Delta, to, QUEEN);
if (Type == QUIETS || Type == EVASIONS || Type == NON_EVASIONS)
{
- (*mlist++).move = make_promotion(to - Delta, to, ROOK);
- (*mlist++).move = make_promotion(to - Delta, to, BISHOP);
- (*mlist++).move = make_promotion(to - Delta, to, KNIGHT);
+ (*mlist++).move = make<PROMOTION>(to - Delta, to, ROOK);
+ (*mlist++).move = make<PROMOTION>(to - Delta, to, BISHOP);
+ (*mlist++).move = make<PROMOTION>(to - Delta, to, KNIGHT);
}
// Knight-promotion is the only one that can give a direct check not
// already included in the queen-promotion.
if (Type == QUIET_CHECKS && (StepAttacksBB[W_KNIGHT][to] & ksq))
- (*mlist++).move = make_promotion(to - Delta, to, KNIGHT);
+ (*mlist++).move = make<PROMOTION>(to - Delta, to, KNIGHT);
else
(void)ksq; // Silence a warning under MSVC
}
assert(b1);
while (b1)
- (*mlist++).move = make_enpassant(pop_1st_bit(&b1), pos.ep_square());
+ (*mlist++).move = make<ENPASSANT>(pop_lsb(&b1), pos.ep_square());
}
}
while (dc)
{
- Square from = pop_1st_bit(&dc);
+ Square from = pop_lsb(&dc);
PieceType pt = type_of(pos.piece_on(from));
if (pt == PAWN)
do
{
checkersCnt++;
- checksq = pop_1st_bit(&b);
+ checksq = pop_lsb(&b);
assert(color_of(pos.piece_on(checksq)) == ~us);