X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftypes.h;h=b1810fad91aa596196173ec9912c9c955f5cfe66;hp=23e69d2ef03a8cec91e05c3ff64650d5d99b3bcf;hb=01ee509a5c33e11d7d62d2f325f55720d8be9cfb;hpb=1277a428237eec3299c6606951fac014bb3ef851 diff --git a/src/types.h b/src/types.h index 23e69d2e..b1810fad 100644 --- a/src/types.h +++ b/src/types.h @@ -2,6 +2,7 @@ Stockfish, a UCI chess playing engine derived from Glaurung 2.1 Copyright (C) 2004-2008 Tord Romstad (Glaurung author) Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad + Copyright (C) 2015-2016 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad Stockfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -58,14 +59,13 @@ /// _WIN32 Building on Windows (any) /// _WIN64 Building on Windows 64 bit -#if defined(_WIN64) && !defined(IS_64BIT) // Last condition means Makefile is not used -# include // MSVC popcnt and bsfq instrinsics +#if defined(_WIN64) && defined(_MSC_VER) // No Makefile used +# include // Microsoft header for _BitScanForward64() # define IS_64BIT -# define USE_BSFQ #endif -#if defined(USE_POPCNT) && defined(__INTEL_COMPILER) && defined(_MSC_VER) -# include // Intel header for _mm_popcnt_u64() intrinsic +#if defined(USE_POPCNT) && (defined(__INTEL_COMPILER) || defined(_MSC_VER)) +# include // Intel and Microsoft header for _mm_popcnt_u64() #endif #if !defined(NO_PREFETCH) && (defined(__INTEL_COMPILER) || defined(_MSC_VER)) @@ -79,14 +79,6 @@ # define pext(b, m) (0) #endif -#ifdef _MSC_VER -# define FORCE_INLINE __forceinline -#elif defined(__GNUC__) -# define FORCE_INLINE inline __attribute__((always_inline)) -#else -# define FORCE_INLINE inline -#endif - #ifdef USE_POPCNT const bool HasPopCnt = true; #else @@ -191,13 +183,13 @@ enum Value : int { VALUE_MATE_IN_MAX_PLY = VALUE_MATE - 2 * MAX_PLY, VALUE_MATED_IN_MAX_PLY = -VALUE_MATE + 2 * MAX_PLY, - PawnValueMg = 198, PawnValueEg = 258, - KnightValueMg = 817, KnightValueEg = 846, - BishopValueMg = 836, BishopValueEg = 857, - RookValueMg = 1270, RookValueEg = 1278, - QueenValueMg = 2521, QueenValueEg = 2558, + PawnValueMg = 188, PawnValueEg = 248, + KnightValueMg = 753, KnightValueEg = 832, + BishopValueMg = 826, BishopValueEg = 897, + RookValueMg = 1285, RookValueEg = 1371, + QueenValueMg = 2513, QueenValueEg = 2650, - MidgameLimit = 15581, EndgameLimit = 3998 + MidgameLimit = 15258, EndgameLimit = 3915 }; enum PieceType { @@ -213,19 +205,24 @@ enum Piece { PIECE_NB = 16 }; +const Piece Pieces[] = { W_PAWN, W_KNIGHT, W_BISHOP, W_ROOK, W_QUEEN, W_KING, + B_PAWN, B_KNIGHT, B_BISHOP, B_ROOK, B_QUEEN, B_KING }; + enum Depth { ONE_PLY = 1, - DEPTH_ZERO = 0, - DEPTH_QS_CHECKS = 0, - DEPTH_QS_NO_CHECKS = -1, - DEPTH_QS_RECAPTURES = -5, + DEPTH_ZERO = 0 * ONE_PLY, + DEPTH_QS_CHECKS = 0 * ONE_PLY, + DEPTH_QS_NO_CHECKS = -1 * ONE_PLY, + DEPTH_QS_RECAPTURES = -5 * ONE_PLY, - DEPTH_NONE = -6, - DEPTH_MAX = MAX_PLY + DEPTH_NONE = -6 * ONE_PLY, + DEPTH_MAX = MAX_PLY * ONE_PLY }; +static_assert(!(ONE_PLY & (ONE_PLY - 1)), "ONE_PLY is not a power of 2"); + enum Square { SQ_A1, SQ_B1, SQ_C1, SQ_D1, SQ_E1, SQ_F1, SQ_G1, SQ_H1, SQ_A2, SQ_B2, SQ_C2, SQ_D2, SQ_E2, SQ_F2, SQ_G2, SQ_H2, @@ -335,13 +332,17 @@ inline Score operator/(Score s, int i) { extern Value PieceValue[PHASE_NB][PIECE_NB]; inline Color operator~(Color c) { - return Color(c ^ BLACK); + return Color(c ^ BLACK); // Toggle color } inline Square operator~(Square s) { return Square(s ^ SQ_A8); // Vertical flip SQ_A1 -> SQ_A8 } +inline Piece operator~(Piece pc) { + return Piece(pc ^ 8); // Swap color of piece B_KNIGHT -> W_KNIGHT +} + inline CastlingRight operator|(Color c, CastlingSide s) { return CastlingRight(WHITE_OO << ((s == QUEEN_SIDE) + 2 * c)); } @@ -359,10 +360,10 @@ inline Square make_square(File f, Rank r) { } inline Piece make_piece(Color c, PieceType pt) { - return Piece((c << 3) | pt); + return Piece((c << 3) + pt); } -inline PieceType type_of(Piece pc) { +inline PieceType type_of(Piece pc) { return PieceType(pc & 7); } @@ -417,7 +418,7 @@ inline MoveType type_of(Move m) { } inline PieceType promotion_type(Move m) { - return PieceType(((m >> 12) & 3) + 2); + return PieceType(((m >> 12) & 3) + KNIGHT); } inline Move make_move(Square from, Square to) {