mirror of
https://github.com/official-stockfish/Stockfish.git
synced 2026-07-22 12:47:08 +00:00
Simplify HalfKAv2_hm::write_indices()
STC: https://tests.stockfishchess.org/tests/view/6a4b4b32f97ff95f78795de9 LLR: 2.95 (-2.94,2.94) <-1.75,0.25> Total: 196064 W: 51063 L: 51020 D: 93981 Ptnml(0-2): 367, 21491, 54292, 21496, 386 closes https://github.com/official-stockfish/Stockfish/pull/6970 No functional change
This commit is contained in:
committed by
Joost VandeVondele
parent
151e204cc8
commit
3e3ee33a75
@@ -45,18 +45,16 @@ void HalfKAv2_hm::write_indices(const std::array<Piece, SQUARE_NB>& oldPieces,
|
|||||||
const __m512i vecOldPieces = _mm512_loadu_si512(oldPieces.data());
|
const __m512i vecOldPieces = _mm512_loadu_si512(oldPieces.data());
|
||||||
const __m512i vecNewPieces = _mm512_loadu_si512(newPieces.data());
|
const __m512i vecNewPieces = _mm512_loadu_si512(newPieces.data());
|
||||||
|
|
||||||
alignas(64) static constexpr u16 psiTable[COLOR_NB][16] = {
|
// PieceSquareIndex and KingBuckets are multiples of 64, while s and orient
|
||||||
{PS_NONE, PS_W_PAWN, PS_W_KNIGHT, PS_W_BISHOP, PS_W_ROOK, PS_W_QUEEN, PS_KING, PS_NONE,
|
// use only the low six bits. Therefore no carry crosses bit 6, and
|
||||||
PS_NONE, PS_B_PAWN, PS_B_KNIGHT, PS_B_BISHOP, PS_B_ROOK, PS_B_QUEEN, PS_KING, PS_NONE},
|
// (s ^ orient) + psi[pc] + bucket == s ^ (psi[pc] + bucket + orient),
|
||||||
{PS_NONE, PS_B_PAWN, PS_B_KNIGHT, PS_B_BISHOP, PS_B_ROOK, PS_B_QUEEN, PS_KING, PS_NONE,
|
// allowing the orientation to be folded into the per-piece lookup offset.
|
||||||
PS_NONE, PS_W_PAWN, PS_W_KNIGHT, PS_W_BISHOP, PS_W_ROOK, PS_W_QUEEN, PS_KING, PS_NONE}};
|
|
||||||
|
|
||||||
const u16 flip = 56 * perspective;
|
const u16 flip = 56 * perspective;
|
||||||
const __m512i orient = _mm512_set1_epi16((u16) OrientTBL[ksq] ^ flip);
|
const u16 orient = u16(OrientTBL[ksq]) ^ flip;
|
||||||
const __m512i psi =
|
const __m512i psi =
|
||||||
_mm512_castsi256_si512(_mm256_loadu_si256((const __m256i*) psiTable[perspective]));
|
_mm512_castsi256_si512(_mm256_loadu_si256((const __m256i*) PieceSquareIndex[perspective]));
|
||||||
const __m512i psi_plus_bucket =
|
const __m512i psi_plus_offset =
|
||||||
_mm512_add_epi16(psi, _mm512_set1_epi16((u16) KingBuckets[int(ksq) ^ flip]));
|
_mm512_add_epi16(psi, _mm512_set1_epi16(u16(KingBuckets[int(ksq) ^ flip] + orient)));
|
||||||
|
|
||||||
__m512i removed_squares = _mm512_maskz_compress_epi8(removedBB, AllSquares);
|
__m512i removed_squares = _mm512_maskz_compress_epi8(removedBB, AllSquares);
|
||||||
__m512i added_squares = _mm512_maskz_compress_epi8(addedBB, AllSquares);
|
__m512i added_squares = _mm512_maskz_compress_epi8(addedBB, AllSquares);
|
||||||
@@ -69,11 +67,9 @@ void HalfKAv2_hm::write_indices(const std::array<Piece, SQUARE_NB>& oldPieces,
|
|||||||
added_pieces = _mm512_cvtepi8_epi16(_mm512_castsi512_si256(added_pieces));
|
added_pieces = _mm512_cvtepi8_epi16(_mm512_castsi512_si256(added_pieces));
|
||||||
|
|
||||||
const __m512i removed_indices =
|
const __m512i removed_indices =
|
||||||
_mm512_or_si512(_mm512_xor_si512(removed_squares, orient),
|
_mm512_xor_si512(removed_squares, _mm512_permutexvar_epi16(removed_pieces, psi_plus_offset));
|
||||||
_mm512_permutexvar_epi16(removed_pieces, psi_plus_bucket));
|
|
||||||
const __m512i added_indices =
|
const __m512i added_indices =
|
||||||
_mm512_or_si512(_mm512_xor_si512(added_squares, orient),
|
_mm512_xor_si512(added_squares, _mm512_permutexvar_epi16(added_pieces, psi_plus_offset));
|
||||||
_mm512_permutexvar_epi16(added_pieces, psi_plus_bucket));
|
|
||||||
|
|
||||||
_mm512_storeu_si512(write_removed,
|
_mm512_storeu_si512(write_removed,
|
||||||
_mm512_cvtepu16_epi32(_mm512_castsi512_si256(removed_indices)));
|
_mm512_cvtepu16_epi32(_mm512_castsi512_si256(removed_indices)));
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class HalfKAv2_hm {
|
|||||||
PS_NB = 11 * SQUARE_NB
|
PS_NB = 11 * SQUARE_NB
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr IndexType PieceSquareIndex[COLOR_NB][PIECE_NB] = {
|
alignas(64) static constexpr u16 PieceSquareIndex[COLOR_NB][PIECE_NB] = {
|
||||||
// Convention: W - us, B - them
|
// Convention: W - us, B - them
|
||||||
// Viewed from other side, W and B are reversed
|
// Viewed from other side, W and B are reversed
|
||||||
{PS_NONE, PS_W_PAWN, PS_W_KNIGHT, PS_W_BISHOP, PS_W_ROOK, PS_W_QUEEN, PS_KING, PS_NONE,
|
{PS_NONE, PS_W_PAWN, PS_W_KNIGHT, PS_W_BISHOP, PS_W_ROOK, PS_W_QUEEN, PS_KING, PS_NONE,
|
||||||
|
|||||||
Reference in New Issue
Block a user