X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fbitboard.cpp;h=b7eed922d10b0badeb0c4580ea34b76e31adaabf;hp=6784effd3d6b546c64e4192f10984b651ec0b8d2;hb=e6523e56b8cc110aa38d698a993cb04b430e67b0;hpb=b534176d4acc15ca5d7fdf3f44d1afb4e33c899a diff --git a/src/bitboard.cpp b/src/bitboard.cpp index 6784effd..b7eed922 100644 --- a/src/bitboard.cpp +++ b/src/bitboard.cpp @@ -246,20 +246,6 @@ namespace { } - Bitboard pick_random(RKISS& rk, int booster) { - - // Values s1 and s2 are used to rotate the candidate magic of a - // quantity known to be optimal to quickly find the magics. - int s1 = booster & 63, s2 = (booster >> 6) & 63; - - Bitboard m = rk.rand(); - m = (m >> s1) | (m << (64 - s1)); - m &= rk.rand(); - m = (m >> s2) | (m << (64 - s2)); - return m & rk.rand(); - } - - // init_magics() computes all rook and bishop attacks at startup. Magic // bitboards are used to look up attacks of sliding pieces. As a reference see // chessprogramming.wikispaces.com/Magic+Bitboards. In particular, here we @@ -268,8 +254,9 @@ namespace { void init_magics(Bitboard table[], Bitboard* attacks[], Bitboard magics[], Bitboard masks[], unsigned shifts[], Square deltas[], Fn index) { - int MagicBoosters[][8] = { { 3191, 2184, 1310, 3618, 2091, 1308, 2452, 3996 }, - { 1059, 3608, 605, 3234, 3326, 38, 2029, 3043 } }; + int MagicBoosters[][8] = { { 969, 1976, 2850, 542, 2069, 2852, 1708, 164 }, + { 3101, 552, 3555, 926, 834, 4122, 2131, 1117 } }; + RKISS rk; Bitboard occupancy[4096], reference[4096], edges, b; int i, size, booster; @@ -309,7 +296,7 @@ namespace { // Find a magic for square 's' picking up an (almost) random number // until we find the one that passes the verification test. do { - do magics[s] = pick_random(rk, booster); + do magics[s] = rk.magic_rand(booster); while (popcount((magics[s] * masks[s]) >> 56) < 6); std::memset(attacks[s], 0, size * sizeof(Bitboard));