mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 09:06:45 +08:00
Simplify popcnt
Also a speedup(about 1%) on 64-bit w/o hardware popcnt Retire Max15 and Full template parameters (Contributed by Marco Costalba) Now that we have just SW and HW versions, use template default parameter to get rid of explicit template parameters. Retire bitcount.h and move the only defined function to bitboard.h No functional change Resolves #620
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
|
||||
#include "bitcount.h"
|
||||
#include "bitboard.h"
|
||||
#include "evaluate.h"
|
||||
#include "material.h"
|
||||
#include "pawns.h"
|
||||
@@ -234,7 +234,7 @@ namespace {
|
||||
{
|
||||
ei.kingRing[Them] = b | shift_bb<Down>(b);
|
||||
b &= ei.attackedBy[Us][PAWN];
|
||||
ei.kingAttackersCount[Us] = b ? popcount<Max15>(b) : 0;
|
||||
ei.kingAttackersCount[Us] = b ? popcount(b) : 0;
|
||||
ei.kingAdjacentZoneAttacksCount[Us] = ei.kingAttackersWeight[Us] = 0;
|
||||
}
|
||||
else
|
||||
@@ -278,7 +278,7 @@ namespace {
|
||||
ei.kingAttackersWeight[Us] += KingAttackWeights[Pt];
|
||||
bb = b & ei.attackedBy[Them][KING];
|
||||
if (bb)
|
||||
ei.kingAdjacentZoneAttacksCount[Us] += popcount<Max15>(bb);
|
||||
ei.kingAdjacentZoneAttacksCount[Us] += popcount(bb);
|
||||
}
|
||||
|
||||
if (Pt == QUEEN)
|
||||
@@ -286,7 +286,7 @@ namespace {
|
||||
| ei.attackedBy[Them][BISHOP]
|
||||
| ei.attackedBy[Them][ROOK]);
|
||||
|
||||
int mob = popcount<Pt == QUEEN ? Full : Max15>(b & mobilityArea[Us]);
|
||||
int mob = popcount(b & mobilityArea[Us]);
|
||||
|
||||
mobility[Us] += MobilityBonus[Pt][mob];
|
||||
|
||||
@@ -334,7 +334,7 @@ namespace {
|
||||
{
|
||||
Bitboard alignedPawns = pos.pieces(Them, PAWN) & PseudoAttacks[ROOK][s];
|
||||
if (alignedPawns)
|
||||
score += RookOnPawn * popcount<Max15>(alignedPawns);
|
||||
score += RookOnPawn * popcount(alignedPawns);
|
||||
}
|
||||
|
||||
// Bonus when on an open or semi-open file
|
||||
@@ -399,7 +399,7 @@ namespace {
|
||||
// the pawn shelter (current 'score' value).
|
||||
attackUnits = std::min(72, ei.kingAttackersCount[Them] * ei.kingAttackersWeight[Them])
|
||||
+ 9 * ei.kingAdjacentZoneAttacksCount[Them]
|
||||
+ 27 * popcount<Max15>(undefended)
|
||||
+ 27 * popcount(undefended)
|
||||
+ 11 * !!ei.pinnedPieces[Us]
|
||||
- 64 * !pos.count<QUEEN>(Them)
|
||||
- mg_value(score) / 8;
|
||||
@@ -415,7 +415,7 @@ namespace {
|
||||
| ei.attackedBy[Them][KING];
|
||||
|
||||
if (b)
|
||||
attackUnits += QueenContactCheck * popcount<Max15>(b);
|
||||
attackUnits += QueenContactCheck * popcount(b);
|
||||
}
|
||||
|
||||
// Analyse the enemy's safe distance checks for sliders and knights
|
||||
@@ -513,7 +513,7 @@ namespace {
|
||||
|
||||
b = weak & ~ei.attackedBy[Them][ALL_PIECES];
|
||||
if (b)
|
||||
score += Hanging * popcount<Max15>(b);
|
||||
score += Hanging * popcount(b);
|
||||
|
||||
b = weak & ei.attackedBy[Us][KING];
|
||||
if (b)
|
||||
@@ -533,7 +533,7 @@ namespace {
|
||||
& ~ei.attackedBy[Us][PAWN];
|
||||
|
||||
if (b)
|
||||
score += ThreatByPawnPush * popcount<Max15>(b);
|
||||
score += ThreatByPawnPush * popcount(b);
|
||||
|
||||
if (DoTrace)
|
||||
Trace::add(THREAT, Us, score);
|
||||
@@ -656,7 +656,7 @@ namespace {
|
||||
assert(unsigned(safe >> (Us == WHITE ? 32 : 0)) == 0);
|
||||
|
||||
// ...count safe + (behind & safe) with a single popcount
|
||||
int bonus = popcount<Full>((Us == WHITE ? safe << 32 : safe >> 32) | (behind & safe));
|
||||
int bonus = popcount((Us == WHITE ? safe << 32 : safe >> 32) | (behind & safe));
|
||||
int weight = pos.count<KNIGHT>(Us) + pos.count<BISHOP>(Us)
|
||||
+ pos.count<KNIGHT>(Them) + pos.count<BISHOP>(Them);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user