From f0fe9454f8f6f66343dc9046084e5b9f3cdbcf1c Mon Sep 17 00:00:00 2001 From: MrGeorgen Date: Tue, 19 Mar 2024 16:27:38 +0100 Subject: [PATCH] fix --- CMakeLists.txt | 3 ++- src/chess/move.c | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c901f9..4eb481a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,8 @@ include_directories(include) file(GLOB SOURCES "src/chess/*.c") file(GLOB LIB_SOURCES "lib/chess/*.c") -add_executable(genMoveConsts src/generateCode/moveConsts.c ${LIB_SOURCES}) +add_executable(genMoveConsts src/generateCode/moveConsts.c lib/chess/bitboard.c + lib/chess/print.c) add_custom_command( OUTPUT moveConsts.h # Output file from code generation COMMAND genMoveConsts > include/chess/generated/moveConsts.h diff --git a/src/chess/move.c b/src/chess/move.c index e0a84d5..dd98d4a 100644 --- a/src/chess/move.c +++ b/src/chess/move.c @@ -25,7 +25,7 @@ static uint_least8_t getDirectionOffset(uint_least8_t field, uint_least8_t direc return DIRECTION_OFFSET[field * DIRECTION_LENGTH + direction]; } -static uint_least8_t getMagicSize(const struct magic_t magic) { +static size_t getMagicSize(const struct magic_t magic) { return 1 << (64 - magic.shift); } @@ -37,15 +37,21 @@ static size_t getTotalMagicSize(const struct magic_t *magic) { return size; } +uint_least64_t *overflowPtr; + static void initMagicHelper(uint_least64_t *attackTable, struct magic_t *magic, const uint_least8_t *direction, const uint_least8_t directionLength) { for(uint_least8_t field = 0; field < TOTAL_BOARD_SIZE; ++field, ++magic) { - attackTable += getMagicSize(*magic); magic->attackTable = attackTable; + attackTable += getMagicSize(*magic); uint_least64_t pieceArangement = 0; do { // https://stackoverflow.com/questions/7277554/what-is-a-good-way-to-iterate-a-number-through-all-the-possible-values-of-a-mask const uint_least64_t attackMask = slidingMovementMask(direction, directionLength, field, pieceArangement); - *getMagicAttackPtr(pieceArangement, *magic) = attackMask; + uint_least64_t *ptr = getMagicAttackPtr(pieceArangement, *magic); + if(ptr >= overflowPtr) { + printf("overflow\n"); + } + *ptr = attackMask; pieceArangement = (pieceArangement - magic->mask) & magic->mask; } while(pieceArangement != 0); } @@ -55,6 +61,7 @@ void initMagicTable() { const size_t rookMagicSize = getTotalMagicSize(rookMagic); const size_t size = rookMagicSize + getTotalMagicSize(bishopMagic); uint_least64_t *attackTable = malloc(size * sizeof *attackTable); + overflowPtr = attackTable + size; if(attackTable == NULL) { perror("failed to allocate memory: "); exit(1);