37 typedef unsigned char uint8_t;
38 typedef unsigned short uint16_t;
39 typedef unsigned uint32_t;
40 typedef long long unsigned uint64_t;
42 typedef short int16_t;
44 typedef long long int64_t;
60 extern bool tb_init_impl(
const char *_path);
61 extern unsigned tb_probe_wdl_impl(
72 extern unsigned tb_probe_root_impl(
90 #define TB_MAX_MOVES (192+1) 92 #define TB_CASTLING_K 0x1 93 #define TB_CASTLING_Q 0x2 94 #define TB_CASTLING_k 0x4 95 #define TB_CASTLING_q 0x8 98 #define TB_BLESSED_LOSS 1 100 #define TB_CURSED_WIN 3 103 #define TB_PROMOTES_NONE 0 104 #define TB_PROMOTES_QUEEN 1 105 #define TB_PROMOTES_ROOK 2 106 #define TB_PROMOTES_BISHOP 3 107 #define TB_PROMOTES_KNIGHT 4 109 #define TB_RESULT_WDL_MASK 0x0000000F 110 #define TB_RESULT_TO_MASK 0x000003F0 111 #define TB_RESULT_FROM_MASK 0x0000FC00 112 #define TB_RESULT_PROMOTES_MASK 0x00070000 113 #define TB_RESULT_EP_MASK 0x00080000 114 #define TB_RESULT_DTZ_MASK 0xFFF00000 115 #define TB_RESULT_WDL_SHIFT 0 116 #define TB_RESULT_TO_SHIFT 4 117 #define TB_RESULT_FROM_SHIFT 10 118 #define TB_RESULT_PROMOTES_SHIFT 16 119 #define TB_RESULT_EP_SHIFT 19 120 #define TB_RESULT_DTZ_SHIFT 20 122 #define TB_GET_WDL(_res) \ 123 (((_res) & TB_RESULT_WDL_MASK) >> TB_RESULT_WDL_SHIFT) 124 #define TB_GET_TO(_res) \ 125 (((_res) & TB_RESULT_TO_MASK) >> TB_RESULT_TO_SHIFT) 126 #define TB_GET_FROM(_res) \ 127 (((_res) & TB_RESULT_FROM_MASK) >> TB_RESULT_FROM_SHIFT) 128 #define TB_GET_PROMOTES(_res) \ 129 (((_res) & TB_RESULT_PROMOTES_MASK) >> TB_RESULT_PROMOTES_SHIFT) 130 #define TB_GET_EP(_res) \ 131 (((_res) & TB_RESULT_EP_MASK) >> TB_RESULT_EP_SHIFT) 132 #define TB_GET_DTZ(_res) \ 133 (((_res) & TB_RESULT_DTZ_MASK) >> TB_RESULT_DTZ_SHIFT) 135 #define TB_SET_WDL(_res, _wdl) \ 136 (((_res) & ~TB_RESULT_WDL_MASK) | \ 137 (((_wdl) << TB_RESULT_WDL_SHIFT) & TB_RESULT_WDL_MASK)) 138 #define TB_SET_TO(_res, _to) \ 139 (((_res) & ~TB_RESULT_TO_MASK) | \ 140 (((_to) << TB_RESULT_TO_SHIFT) & TB_RESULT_TO_MASK)) 141 #define TB_SET_FROM(_res, _from) \ 142 (((_res) & ~TB_RESULT_FROM_MASK) | \ 143 (((_from) << TB_RESULT_FROM_SHIFT) & TB_RESULT_FROM_MASK)) 144 #define TB_SET_PROMOTES(_res, _promotes) \ 145 (((_res) & ~TB_RESULT_PROMOTES_MASK) | \ 146 (((_promotes) << TB_RESULT_PROMOTES_SHIFT) & TB_RESULT_PROMOTES_MASK)) 147 #define TB_SET_EP(_res, _ep) \ 148 (((_res) & ~TB_RESULT_EP_MASK) | \ 149 (((_ep) << TB_RESULT_EP_SHIFT) & TB_RESULT_EP_MASK)) 150 #define TB_SET_DTZ(_res, _dtz) \ 151 (((_res) & ~TB_RESULT_DTZ_MASK) | \ 152 (((_dtz) << TB_RESULT_DTZ_SHIFT) & TB_RESULT_DTZ_MASK)) 154 #define TB_RESULT_CHECKMATE TB_SET_WDL(0, TB_WIN) 155 #define TB_RESULT_STALEMATE TB_SET_WDL(0, TB_DRAW) 156 #define TB_RESULT_FAILED 0xFFFFFFFF 161 extern unsigned TB_LARGEST;
175 static inline bool tb_init(
const char *_path)
177 return tb_init_impl(_path);
204 static inline unsigned tb_probe_wdl(
219 return TB_RESULT_FAILED;
221 return TB_RESULT_FAILED;
222 return tb_probe_wdl_impl(_white, _black, _kings, _queens, _rooks,
223 _bishops, _knights, _pawns, _ep, _turn);
271 static inline unsigned tb_probe_root(
287 return TB_RESULT_FAILED;
288 return tb_probe_root_impl(_white, _black, _kings, _queens, _rooks,
289 _bishops, _knights, _pawns, _rule50, _ep, _turn, _results);
302 #ifndef TB_NO_HELPER_API 304 extern unsigned tb_pop_count(uint64_t _bb);
305 extern unsigned tb_lsb(uint64_t _bb);
306 extern uint64_t tb_pop_lsb(uint64_t _bb);
307 extern uint64_t tb_king_attacks(
unsigned _square);
308 extern uint64_t tb_queen_attacks(
unsigned _square, uint64_t _occ);
309 extern uint64_t tb_rook_attacks(
unsigned _square, uint64_t _occ);
310 extern uint64_t tb_bishop_attacks(
unsigned _square, uint64_t _occ);
311 extern uint64_t tb_knight_attacks(
unsigned _square);
312 extern uint64_t tb_pawn_attacks(
unsigned _square,
bool _color);