X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Ftypes.h;h=7c5776ab3baaad266c790e90efc60bf4a7280152;hb=856a5f3aaaf8b9d53599963decacd4476b55c034;hp=c8078546775d20ae49079317cc520b3e9545dc4f;hpb=6645115377bd9699ae6785608753d33067b8e036;p=stockfish diff --git a/src/types.h b/src/types.h index c8078546..7c5776ab 100644 --- a/src/types.h +++ b/src/types.h @@ -31,27 +31,15 @@ /// -DNO_PREFETCH | Disable use of prefetch asm-instruction. You may need this to /// | run on some very old machines. /// -/// -DNO_SPINLOCK | Use mutex instead of spinlocks. This is much slower, so you -/// | really don't want to do this in general case. -/// /// -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: /// @@ -183,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, @@ -194,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, @@ -264,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); @@ -420,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) {