X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftypes.h;h=7c5776ab3baaad266c790e90efc60bf4a7280152;hp=eebd69e506c2cb19bd9f2390056dad41a2d383e1;hb=856a5f3aaaf8b9d53599963decacd4476b55c034;hpb=6fa6da3ee13d2b7bdbec3cd24ff8ca43233c74fb diff --git a/src/types.h b/src/types.h index eebd69e5..7c5776ab 100644 --- a/src/types.h +++ b/src/types.h @@ -33,22 +33,13 @@ /// /// -DUSE_POPCNT | Add runtime support for use of popcnt asm-instruction. Works /// | only in 64-bit mode and requires hardware with popcnt support. -/// -/// -DUSE_PEXT | Add runtime support for use of pext asm-instruction. Works -/// | only in 64-bit mode and requires hardware with pext support. #include #include #include -#include #include -#if defined(_MSC_VER) -// Disable some silly and noisy warning from MSVC compiler -#pragma warning(disable: 4127) // Conditional expression is constant -#pragma warning(disable: 4146) // Unary minus operator applied to unsigned type -#pragma warning(disable: 4800) // Forcing value to bool 'true' or 'false' -#endif +#include "platform.h" /// Predefined macros hell: /// @@ -180,7 +171,7 @@ enum Bound { BOUND_EXACT = BOUND_UPPER | BOUND_LOWER }; -enum Value : int { +enum Value { VALUE_ZERO = 0, VALUE_DRAW = 0, VALUE_KNOWN_WIN = 10000, @@ -191,6 +182,9 @@ enum Value : int { VALUE_MATE_IN_MAX_PLY = VALUE_MATE - 2 * MAX_PLY, VALUE_MATED_IN_MAX_PLY = -VALUE_MATE + 2 * MAX_PLY, + VALUE_ENSURE_INTEGER_SIZE_P = INT_MAX, + VALUE_ENSURE_INTEGER_SIZE_N = INT_MIN, + PawnValueMg = 198, PawnValueEg = 258, KnightValueMg = 817, KnightValueEg = 846, BishopValueMg = 836, BishopValueEg = 857, @@ -261,10 +255,16 @@ enum Rank { }; -/// Score enum stores a middlegame and an endgame value in a single integer -/// (enum). The least significant 16 bits are used to store the endgame value -/// and the upper 16 bits are used to store the middlegame value. -enum Score : int { SCORE_ZERO }; +/// Score enum stores a middlegame and an endgame value in a single integer. +/// The least significant 16 bits are used to store the endgame value and +/// the upper 16 bits are used to store the middlegame value. The compiler +/// is free to choose the enum type as long as it can store the data, so we +/// ensure that Score is an integer type by assigning some big int values. +enum Score { + SCORE_ZERO, + SCORE_ENSURE_INTEGER_SIZE_P = INT_MAX, + SCORE_ENSURE_INTEGER_SIZE_N = INT_MIN +}; inline Score make_score(int mg, int eg) { return Score((mg << 16) + eg); @@ -417,7 +417,7 @@ inline MoveType type_of(Move m) { } inline PieceType promotion_type(Move m) { - return PieceType(((m >> 12) & 3) + KNIGHT); + return PieceType(((m >> 12) & 3) + 2); } inline Move make_move(Square from, Square to) {