#include "../search.h" bitboard_t knight_moves[64] = { 132096ULL, 329728ULL, 659712ULL, 659712ULL >> 1, 659712ULL >> 2, 659712ULL >> 3, 10489856ULL, 4202496ULL, 33816580ULL, 84410376ULL, 168886289ULL, 168886289ULL >> 1, 168886289ULL >> 2, 168886289ULL >> 3, 2685403152ULL, 1075839008ULL, 8657044482ULL, 21609056261ULL, 43234889994ULL, 43234889994ULL >> 1, 43234889994ULL >> 2, 43234889994ULL >> 3, 687463207072ULL, 275414786112ULL, 8657044482ULL >> 8, 21609056261ULL >> 8, 43234889994ULL >> 8, 43234889994ULL >> (8 + 1), 43234889994ULL >> (8 + 2), 43234889994ULL >> (8 + 3), 687463207072ULL >> 8, 275414786112ULL >> 8, 8657044482ULL >> 16, 21609056261ULL >> 16, 43234889994ULL >> 16, 43234889994ULL >> (16 + 1), 43234889994ULL >> (16 + 2), 43234889994ULL >> (16 + 3), 687463207072ULL >> 16, 275414786112ULL >> 16, 8657044482ULL >> 24, 21609056261ULL >> 24, 43234889994ULL >> 24, 43234889994ULL >> (24 + 1), 43234889994ULL >> (24 + 2), 43234889994ULL >> (24 + 3), 687463207072ULL >> 24, 275414786112ULL >> 24, 288234782788157440ULL, 576469569871282176ULL, 1224997833292120064ULL, 1224997833292120064ULL >> 1, 1224997833292120064ULL >> 2, 1224997833292120064ULL >> 3, 1152939783987658752ULL, 2305878468463689728ULL, 1128098930098176ULL, 2257297371824128ULL, 4796069720358912ULL, 4796069720358912ULL >> 1, 4796069720358912ULL >> 2, 4796069720358912ULL >> 3, 4679521487814656ULL, 9077567998918656ULL, }; void get_knight_moves(moves_t* moves, position_t position) { bitboard_t friendly_knights; bitboard_t friendly_pieces; if (position.turn == WHITE_TURN) { friendly_pieces = whites(position); friendly_knights = position.bitboards[WHITE_KNIGHT]; } else { friendly_pieces = blacks(position); friendly_knights = position.bitboards[BLACK_KNIGHT]; } while (friendly_knights) { int from = __builtin_ctzll(friendly_knights); friendly_knights &= friendly_knights - 1; bitboard_t ATTACK_MASK = knight_moves[from]; ATTACK_MASK &= ~friendly_pieces; while (ATTACK_MASK) { int to = __builtin_ctzll(ATTACK_MASK); ATTACK_MASK &= ATTACK_MASK - 1; add_move(moves, from, to); } } }