mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Greatly speed up SEE
Simply reshuffling the code inverting the condition in next_attacker() yields a miraculous speed up of more than 3% under gcc! On my laptop a bench run goes from 320Knps to 330Knps No functional change.
This commit is contained in:
parent
9cdca7516c
commit
e6d8e74152
1 changed files with 17 additions and 17 deletions
|
@ -106,25 +106,24 @@ void init() {
|
|||
/// valuable attacker for the side to move, remove the attacker we just found
|
||||
/// from the 'occupied' bitboard and scan for new X-ray attacks behind it.
|
||||
|
||||
template<PieceType Pt> static FORCE_INLINE
|
||||
template<int Pt> static FORCE_INLINE
|
||||
PieceType next_attacker(const Bitboard* bb, const Square& to, const Bitboard& stmAttackers,
|
||||
Bitboard& occupied, Bitboard& attackers) {
|
||||
|
||||
const PieceType NextPt = PieceType((int)Pt + 1);
|
||||
if (stmAttackers & bb[Pt])
|
||||
{
|
||||
Bitboard b = stmAttackers & bb[Pt];
|
||||
occupied ^= b & ~(b - 1);
|
||||
|
||||
if (!(stmAttackers & bb[Pt]))
|
||||
return next_attacker<NextPt>(bb, to, stmAttackers, occupied, attackers);
|
||||
if (Pt == PAWN || Pt == BISHOP || Pt == QUEEN)
|
||||
attackers |= attacks_bb<BISHOP>(to, occupied) & (bb[BISHOP] | bb[QUEEN]);
|
||||
|
||||
Bitboard b = stmAttackers & bb[Pt];
|
||||
occupied ^= b & ~(b - 1);
|
||||
if (Pt == ROOK || Pt == QUEEN)
|
||||
attackers |= attacks_bb<ROOK>(to, occupied) & (bb[ROOK] | bb[QUEEN]);
|
||||
|
||||
if (Pt == PAWN || Pt == BISHOP || Pt == QUEEN)
|
||||
attackers |= attacks_bb<BISHOP>(to, occupied) & (bb[BISHOP] | bb[QUEEN]);
|
||||
|
||||
if (Pt == ROOK || Pt == QUEEN)
|
||||
attackers |= attacks_bb<ROOK>(to, occupied) & (bb[ROOK] | bb[QUEEN]);
|
||||
|
||||
return Pt;
|
||||
return (PieceType)Pt;
|
||||
}
|
||||
return next_attacker<Pt+1>(bb, to, stmAttackers, occupied, attackers);
|
||||
}
|
||||
|
||||
template<> FORCE_INLINE
|
||||
|
@ -1312,11 +1311,12 @@ int Position::see(Move m) const {
|
|||
stm = ~stm;
|
||||
stmAttackers = attackers & pieces(stm);
|
||||
|
||||
// Stop before processing a king capture
|
||||
if (captured == KING && stmAttackers)
|
||||
if (captured == KING)
|
||||
{
|
||||
assert(slIndex < 32);
|
||||
swapList[slIndex++] = QueenValueMg * 16;
|
||||
// Stop before processing a king capture
|
||||
if (stmAttackers)
|
||||
swapList[slIndex++] = QueenValueMg * 16;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue