summaryrefslogtreecommitdiff
path: root/src/testsee.c
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2026-09-16 08:02:21 -0700
committerScott Gasch <[email protected]>2026-09-16 08:02:21 -0700
commit966a0ef4da9cf3911eb3da0533179199808717b4 (patch)
treee09363b574215ef0d8996155a5ab24314db2dd69 /src/testsee.c
parentb91c8453f3fe21c8ccd3568923d8e39141c9c945 (diff)
Retire cPawns/cNonPawns piece-location lists in favor of bbPawns/bbPieces/cKingSq, and hoist two redundant TotalNonPawnCount POPCNT calls out of per-node hot loops.
POSITION no longer stores cPawns[2][8], cNonPawns[2][16], uPawnCount[2], uNonPawnCount[2][8], or uWhiteSqBishopCount[2] -- every reader now goes through PawnMaterial/TotalNonPawnCount/WhiteSqBishopCount/KingPosition (chess.h), computed from the already-incrementally-maintained bbPawns/ bbPieces/cKingSq bitboards via a single -mpopcnt POPCNT instead of a stored counter. move.c's make/unmake loses the list-swap-on-removal bookkeeping entirely. GNUmakefile now passes -mpopcnt so the popcount builtins actually compile to one instruction instead of clang's ~15-op SWAR fallback. Measured a small but real nps regression from the naive swap (search.c's QSearch move-filter and eval.c's _EvalKing were each recomputing the same TotalNonPawnCount sum on every candidate move / twice per node); hoisted both to a single call per node instead. Net result across a same-code self-play match: ~1541.5 knps candidate vs ~1505.7 knps head_reference. A third hoist (FindEnprisePiece out of SelectBestWithHistory) was tried and reverted -- its cache isn't actually loop-invariant within a node (populated from inside Eval(), which doesn't run before every selection call), caught by a DEBUG-build ASSERT before it landed. Co-Authored-By: Claude Sonnet 5 <[email protected]>
Diffstat (limited to 'src/testsee.c')
-rw-r--r--src/testsee.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/testsee.c b/src/testsee.c
index 978e1c6..ea8318e 100644
--- a/src/testsee.c
+++ b/src/testsee.c
@@ -64,9 +64,9 @@ DebugSEERecursive(SEARCHER_THREAD_CONTEXT *ctx,
// Initialize MinMax to the stand pat score here so that the reply
// can be "something else".
//
- iMinMax = ((ctx->sPosition.uPawnMaterial[g_uRootOnMove] +
+ iMinMax = ((PawnMaterial(&ctx->sPosition, g_uRootOnMove) +
ctx->sPosition.uNonPawnMaterial[g_uRootOnMove]) -
- (ctx->sPosition.uPawnMaterial[FLIP(g_uRootOnMove)] +
+ (PawnMaterial(&ctx->sPosition, FLIP(g_uRootOnMove)) +
ctx->sPosition.uNonPawnMaterial[FLIP(g_uRootOnMove)]));
//
@@ -114,9 +114,9 @@ SCORE
DebugSEE(POSITION *pos,
MOVE mv)
{
- SCORE iRootBalance = ((pos->uPawnMaterial[pos->uToMove] +
+ SCORE iRootBalance = ((PawnMaterial(pos, pos->uToMove) +
pos->uNonPawnMaterial[pos->uToMove]) -
- (pos->uPawnMaterial[FLIP(pos->uToMove)] +
+ (PawnMaterial(pos, FLIP(pos->uToMove)) +
pos->uNonPawnMaterial[FLIP(pos->uToMove)]));
SCORE iAfterExchange = iRootBalance;
SEARCHER_THREAD_CONTEXT *ctx =