summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b84af67)
Greatly simplify these very performace critical functions.
Amazingly we don't have any speed regression actually under
MSVC we have the same assembly for generate_moves() !
In generate_direct_checks() 'target' is calculated only
once being a loop invariant.
On Clang there is even a slight speed up.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
- inline MoveStack* generate_direct_checks(const Position& pos, MoveStack* mlist,
- Color us, const CheckInfo& ci) {
+ FORCE_INLINE MoveStack* generate_direct_checks(const Position& pos, MoveStack* mlist,
+ Color us, const CheckInfo& ci) {
assert(Pt != KING && Pt != PAWN);
assert(Pt != KING && Pt != PAWN);
- Bitboard b, target;
- Square from;
const Square* pl = pos.piece_list(us, Pt);
const Square* pl = pos.piece_list(us, Pt);
+ for (Square from = *pl; from != SQ_NONE; from = *++pl)
- target = ci.checkSq[Pt] & ~pos.pieces(); // Non capture checks only
+ Bitboard target = ci.checkSq[Pt] & ~pos.pieces(); // Non capture checks only
+ if ( (Pt == BISHOP || Pt == ROOK || Pt == QUEEN)
+ && !(PseudoAttacks[Pt][from] & target))
+ continue;
- if ( (Pt == BISHOP || Pt == ROOK || Pt == QUEEN)
- && !(PseudoAttacks[Pt][from] & target))
- continue;
+ if (ci.dcCandidates && (ci.dcCandidates & from))
+ continue;
- if (ci.dcCandidates && (ci.dcCandidates & from))
- continue;
-
- b = pos.attacks_from<Pt>(from) & target;
- SERIALIZE(b);
- } while (*++pl != SQ_NONE);
+ Bitboard b = pos.attacks_from<Pt>(from) & target;
+ SERIALIZE(b);
Color us, Bitboard target) {
assert(Pt != KING && Pt != PAWN);
Color us, Bitboard target) {
assert(Pt != KING && Pt != PAWN);
- Bitboard b;
- Square from;
const Square* pl = pos.piece_list(us, Pt);
const Square* pl = pos.piece_list(us, Pt);
- if (*pl != SQ_NONE)
- do {
- from = *pl;
- b = pos.attacks_from<Pt>(from) & target;
- SERIALIZE(b);
- } while (*++pl != SQ_NONE);
+ for (Square from = *pl; from != SQ_NONE; from = *++pl)
+ {
+ Bitboard b = pos.attacks_from<Pt>(from) & target;
+ SERIALIZE(b);
+ }