#include "platform.h"
-#if defined(_WIN64)
+#if defined(_WIN64) && !defined(IS_64BIT)
# include <intrin.h> // MSVC popcnt and bsfq instrinsics
# define IS_64BIT
# define USE_BSFQ
# include <nmmintrin.h> // Intel header for _mm_popcnt_u64() intrinsic
#endif
+# if !defined(NO_PREFETCH) && (defined(__INTEL_COMPILER) || defined(_MSC_VER))
+# include <xmmintrin.h> // Intel and Microsoft header for _mm_prefetch()
+# endif
+
#if defined(_MSC_VER) || defined(__INTEL_COMPILER)
# define CACHE_LINE_ALIGNMENT __declspec(align(64))
#else
VALUE_ENSURE_INTEGER_SIZE_P = INT_MAX,
VALUE_ENSURE_INTEGER_SIZE_N = INT_MIN,
- PawnValueMidgame = 198,
- PawnValueEndgame = 258,
- KnightValueMidgame = 817,
- KnightValueEndgame = 846,
- BishopValueMidgame = 836,
- BishopValueEndgame = 857,
- RookValueMidgame = 1270,
- RookValueEndgame = 1278,
- QueenValueMidgame = 2521,
- QueenValueEndgame = 2558
+ Mg = 0, Eg = 1,
+
+ PawnValueMg = 198, PawnValueEg = 258,
+ KnightValueMg = 817, KnightValueEg = 846,
+ BishopValueMg = 836, BishopValueEg = 857,
+ RookValueMg = 1270, RookValueEg = 1278,
+ QueenValueMg = 2521, QueenValueEg = 2558
};
enum PieceType {
namespace Zobrist {
- extern Key psq[2][8][64]; // [color][pieceType][square]/[piece count]
+ extern Key psq[2][8][64]; // [color][pieceType][square / piece count]
extern Key enpassant[8]; // [file]
extern Key castle[16]; // [castleRight]
extern Key side;
void init();
}
-extern Score pieceSquareTable[16][64];
-extern int SquareDistance[64][64];
-extern const Value PieceValueMidgame[17]; // Indexed by Piece or PieceType
-extern const Value PieceValueEndgame[17];
+CACHE_LINE_ALIGNMENT
+
+extern Score pieceSquareTable[16][64]; // [piece][square]
+extern Value PieceValue[2][18]; // [Mg / Eg][piece / pieceType]
+extern int SquareDistance[64][64]; // [square][square]
struct MoveStack {
Move move;