Code: Select all
What will be faster when incremental doing/undoing moves:
1.
do_move(const int move) {
int to_from;
...
to_from = move & 0xFFF;
key ^= random_rook_key[to_from];
bitboard1 ^= set_bits[to_from];
bitboard2 ^= set_bits[to_from];
...
}
2.
do_move(const int move) {
int to;
int from;
...
to = move & 0x3F;
from = (move >> 6) & 0x3F;
key ^= random_rook_key[to];
key ^= random_rook_key[from];
bitboard1 |= set_bit[to];
bitboard1 &= clear_bit[from];
bitboard2 |= set_bit[to];
bitboard2 &= clear_bit[from];
...
}
In case 1. we have less bit operations but we need much larger look-up-tables (size = 4096 x 8 Bytes = 32 KB).
In case 2. we have more bit operations but we need smaller loop-up-tables (size = 64 x 8 Bytes = 0.5 KB).