diff options
Diffstat (limited to 'src/move.c')
| -rwxr-xr-x | src/move.c | 32 |
1 files changed, 22 insertions, 10 deletions
@@ -64,6 +64,8 @@ Return value: pos->cNonPawns[c][uIndex] = cTo; pos->bbPieces[c][PIECE_TYPE(p)] &= ~COOR_TO_BB(cFrom); pos->bbPieces[c][PIECE_TYPE(p)] |= COOR_TO_BB(cTo); + pos->bbOccupied &= ~COOR_TO_BB(cFrom); + pos->bbOccupied |= COOR_TO_BB(cTo); pos->u64NonPawnSig ^= g_u64SigSeeds[cFrom][PIECE_TYPE(p)][c]; pos->u64NonPawnSig ^= g_u64SigSeeds[cTo][PIECE_TYPE(p)][c]; #ifdef DEBUG @@ -123,6 +125,8 @@ Return value: pos->cPawns[c][uIndex] = cTo; pos->bbPawns[c] &= ~COOR_TO_BB(cFrom); pos->bbPawns[c] |= COOR_TO_BB(cTo); + pos->bbOccupied &= ~COOR_TO_BB(cFrom); + pos->bbOccupied |= COOR_TO_BB(cTo); pos->u64PawnSig ^= g_u64PawnSigSeeds[cFrom][c]; pos->u64PawnSig ^= g_u64PawnSigSeeds[cTo][c]; pos->rgSquare[cTo].pPiece = p; @@ -177,6 +181,8 @@ Return value: pos->cNonPawns[c][uIndex] = cTo; pos->bbPieces[c][PIECE_TYPE(p)] &= ~COOR_TO_BB(cFrom); pos->bbPieces[c][PIECE_TYPE(p)] |= COOR_TO_BB(cTo); + pos->bbOccupied &= ~COOR_TO_BB(cFrom); + pos->bbOccupied |= COOR_TO_BB(cTo); pos->rgSquare[cTo].pPiece = p; pos->rgSquare[cTo].uIndex = uIndex; #ifdef DEBUG @@ -185,7 +191,7 @@ Return value: } -void +void SlidePawnWithoutSigs(POSITION *pos, COOR cFrom, COOR cTo) /** @@ -228,6 +234,8 @@ Return value: pos->cPawns[c][uIndex] = cTo; pos->bbPawns[c] &= ~COOR_TO_BB(cFrom); pos->bbPawns[c] |= COOR_TO_BB(cTo); + pos->bbOccupied &= ~COOR_TO_BB(cFrom); + pos->bbOccupied |= COOR_TO_BB(cTo); pos->rgSquare[cTo].pPiece = p; pos->rgSquare[cTo].uIndex = uIndex; #ifdef DEBUG @@ -275,6 +283,7 @@ Return value: pos->rgSquare[cSquare].pPiece = EMPTY; ASSERT(IS_VALID_PIECE(pLifted)); ASSERT(!IS_KING(pLifted)); + pos->bbOccupied &= ~COOR_TO_BB(cSquare); uIndex = pos->rgSquare[cSquare].uIndex; #ifdef DEBUG ASSERT(IS_VALID_PIECE_INDEX(uIndex)); @@ -287,12 +296,12 @@ Return value: pos->iMaterialBalance[color] -= pv; pos->iMaterialBalance[FLIP(color)] += pv; ASSERT(pos->iMaterialBalance[WHITE] * -1 == pos->iMaterialBalance[BLACK]); - + if (IS_PAWN(pLifted)) { ASSERT(pos->cPawns[color][uIndex] == cSquare); ASSERT(pv == VALUE_PAWN); - + pos->uPawnMaterial[color] -= pv; ASSERT(pos->uPawnMaterial[color] <= (7 * VALUE_PAWN)); @@ -410,7 +419,8 @@ Return value: pos->rgSquare[cSquare].pPiece = EMPTY; ASSERT(IS_VALID_PIECE(pLifted)); ASSERT(!IS_KING(pLifted)); - + pos->bbOccupied &= ~COOR_TO_BB(cSquare); + uIndex = pos->rgSquare[cSquare].uIndex; #ifdef DEBUG ASSERT(IS_VALID_PIECE_INDEX(uIndex)); @@ -423,12 +433,12 @@ Return value: pos->iMaterialBalance[color] -= pv; pos->iMaterialBalance[FLIP(color)] += pv; ASSERT(pos->iMaterialBalance[WHITE] * -1 == pos->iMaterialBalance[BLACK]); - + if (IS_PAWN(pLifted)) { ASSERT(pos->cPawns[color][uIndex] == cSquare); ASSERT(pv == VALUE_PAWN); - + pos->uPawnMaterial[color] -= pv; ASSERT(pos->uPawnMaterial[color] <= (7 * VALUE_PAWN)); pos->bbPawns[color] &= ~COOR_TO_BB(cSquare); @@ -533,7 +543,8 @@ Return value: pos->iMaterialBalance[color] += pv; pos->iMaterialBalance[FLIP(color)] -= pv; ASSERT(pos->iMaterialBalance[WHITE] * -1 == pos->iMaterialBalance[BLACK]); - + pos->bbOccupied |= COOR_TO_BB(cSquare); + if (IS_PAWN(pPiece)) { // @@ -542,7 +553,7 @@ Return value: ASSERT(pv == VALUE_PAWN); pos->uPawnMaterial[color] += pv; ASSERT(pos->uPawnMaterial[color] <= (8 * VALUE_PAWN)); - + uIndex = pos->uPawnCount[color]; ASSERT((uIndex >= 0) && (uIndex <= 7)); pos->uPawnCount[color]++; @@ -626,7 +637,8 @@ Return value: pos->iMaterialBalance[color] += pv; pos->iMaterialBalance[FLIP(color)] -= pv; ASSERT(pos->iMaterialBalance[WHITE] * -1 == pos->iMaterialBalance[BLACK]); - + pos->bbOccupied |= COOR_TO_BB(cSquare); + if (IS_PAWN(pPiece)) { // @@ -635,7 +647,7 @@ Return value: ASSERT(pv == VALUE_PAWN); pos->uPawnMaterial[color] += pv; ASSERT(pos->uPawnMaterial[color] <= (8 * VALUE_PAWN)); - + uIndex = pos->uPawnCount[color]; ASSERT((uIndex >= 0) && (uIndex <= 7)); pos->uPawnCount[color]++; |
