]> git.sesse.net Git - stockfish/blob - src/psqtab.h
Use a 32 bit bitwise 'and' in SimpleHash lookup
[stockfish] / src / psqtab.h
1 /*
2   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
3   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
4   Copyright (C) 2008-2010 Marco Costalba, Joona Kiiski, Tord Romstad
5
6   Stockfish is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10
11   Stockfish is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20
21 #if !defined(PSQTAB_H_INCLUDED)
22 #define PSQTAB_H_INCLUDED
23
24 ////
25 //// Includes
26 ////
27
28 #include "value.h"
29
30 namespace {
31
32 ////
33 //// Constants modified by Joona Kiiski
34 ////
35
36 const Value MP = PawnValueMidgame;
37 const Value MK = KnightValueMidgame;
38 const Value MB = BishopValueMidgame;
39 const Value MR = RookValueMidgame;
40 const Value MQ = QueenValueMidgame;
41
42 const Value EP = PawnValueEndgame;
43 const Value EK = KnightValueEndgame;
44 const Value EB = BishopValueEndgame;
45 const Value ER = RookValueEndgame;
46 const Value EQ = QueenValueEndgame;
47
48 const int MgPST[][64] = {
49   { },
50   {// Pawn
51    // A      B      C     D      E      F      G     H
52         0,    0,     0,     0,     0,     0,    0,     0,
53     MP-28, MP-6, MP+ 4, MP+14, MP+14, MP+ 4, MP-6, MP-28,
54     MP-28, MP-6, MP+ 9, MP+36, MP+36, MP+ 9, MP-6, MP-28,
55     MP-28, MP-6, MP+17, MP+58, MP+58, MP+17, MP-6, MP-28,
56     MP-28, MP-6, MP+17, MP+36, MP+36, MP+17, MP-6, MP-28,
57     MP-28, MP-6, MP+ 9, MP+14, MP+14, MP+ 9, MP-6, MP-28,
58     MP-28, MP-6, MP+ 4, MP+14, MP+14, MP+ 4, MP-6, MP-28,
59         0,    0,     0,     0,     0,     0,    0,     0
60   },
61   {// Knight
62    //  A      B       C      D      E      F      G       H
63     MK-135, MK-107, MK-80, MK-67, MK-67, MK-80, MK-107, MK-135,
64     MK- 93, MK- 67, MK-39, MK-25, MK-25, MK-39, MK- 67, MK- 93,
65     MK- 53, MK- 25, MK+ 1, MK+13, MK+13, MK+ 1, MK- 25, MK- 53,
66     MK- 25, MK+  1, MK+27, MK+41, MK+41, MK+27, MK+  1, MK- 25,
67     MK- 11, MK+ 13, MK+41, MK+55, MK+55, MK+41, MK+ 13, MK- 11,
68     MK- 11, MK+ 13, MK+41, MK+55, MK+55, MK+41, MK+ 13, MK- 11,
69     MK- 53, MK- 25, MK+ 1, MK+13, MK+13, MK+ 1, MK- 25, MK- 53,
70     MK-193, MK- 67, MK-39, MK-25, MK-25, MK-39, MK- 67, MK-193
71   },
72   {// Bishop
73    // A      B      C      D      E      F      G      H
74     MB-40, MB-40, MB-35, MB-30, MB-30, MB-35, MB-40, MB-40,
75     MB-17, MB+ 0, MB- 4, MB+ 0, MB+ 0, MB- 4, MB+ 0, MB-17,
76     MB-13, MB- 4, MB+ 8, MB+ 4, MB+ 4, MB+ 8, MB- 4, MB-13,
77     MB- 8, MB+ 0, MB+ 4, MB+17, MB+17, MB+ 4, MB+ 0, MB- 8,
78     MB- 8, MB+ 0, MB+ 4, MB+17, MB+17, MB+ 4, MB+ 0, MB- 8,
79     MB-13, MB- 4, MB+ 8, MB+ 4, MB+ 4, MB+ 8, MB- 4, MB-13,
80     MB-17, MB+ 0, MB- 4, MB+ 0, MB+ 0, MB- 4, MB+ 0, MB-17,
81     MB-17, MB-17, MB-13, MB- 8, MB- 8, MB-13, MB-17, MB-17
82   },
83   {// Rook
84    // A      B     C     D     E     F     G     H
85     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
86     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
87     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
88     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
89     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
90     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
91     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
92     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12
93   },
94   {// Queen
95    // A     B     C     D     E     F     G     H
96     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
97     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
98     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
99     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
100     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
101     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
102     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
103     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8
104   },
105   {// King
106    //A    B    C    D    E    F    G    H
107     287, 311, 262, 214, 214, 262, 311, 287,
108     262, 287, 238, 190, 190, 238, 287, 262,
109     214, 238, 190, 142, 142, 190, 238, 214,
110     190, 214, 167, 119, 119, 167, 214, 190,
111     167, 190, 142,  94,  94, 142, 190, 167,
112     142, 167, 119,  69,  69, 119, 167, 142,
113     119, 142,  94,  46,  46,  94, 142, 119,
114      94, 119,  69,  21,  21,  69, 119,  94
115   }
116 };
117
118 const int EgPST[][64] = {
119   { },
120   {// Pawn
121    // A     B     C     D     E     F     G     H
122        0,    0,    0,    0,    0,    0,    0,    0,
123     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
124     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
125     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
126     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
127     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
128     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
129        0,    0,    0,    0,    0,    0,    0,    0
130   },
131   {// Knight
132    // A       B      C      D      E      F      G      H
133     EK-104, EK-79, EK-55, EK-42, EK-42, EK-55, EK-79, EK-104,
134     EK- 79, EK-55, EK-30, EK-17, EK-17, EK-30, EK-55, EK- 79,
135     EK- 55, EK-30, EK- 6, EK+ 5, EK+ 5, EK- 6, EK-30, EK- 55,
136     EK- 42, EK-17, EK+ 5, EK+18, EK+18, EK+ 5, EK-17, EK- 42,
137     EK- 42, EK-17, EK+ 5, EK+18, EK+18, EK+ 5, EK-17, EK- 42,
138     EK- 55, EK-30, EK- 6, EK+ 5, EK+ 5, EK- 6, EK-30, EK- 55,
139     EK- 79, EK-55, EK-30, EK-17, EK-17, EK-30, EK-55, EK- 79,
140     EK-104, EK-79, EK-55, EK-42, EK-42, EK-55, EK-79, EK-104
141   },
142   {// Bishop
143    // A      B      C      D      E      F      G      H
144     EB-59, EB-42, EB-35, EB-26, EB-26, EB-35, EB-42, EB-59,
145     EB-42, EB-26, EB-18, EB-11, EB-11, EB-18, EB-26, EB-42,
146     EB-35, EB-18, EB-11, EB- 4, EB- 4, EB-11, EB-18, EB-35,
147     EB-26, EB-11, EB- 4, EB+ 4, EB+ 4, EB- 4, EB-11, EB-26,
148     EB-26, EB-11, EB- 4, EB+ 4, EB+ 4, EB- 4, EB-11, EB-26,
149     EB-35, EB-18, EB-11, EB- 4, EB- 4, EB-11, EB-18, EB-35,
150     EB-42, EB-26, EB-18, EB-11, EB-11, EB-18, EB-26, EB-42,
151     EB-59, EB-42, EB-35, EB-26, EB-26, EB-35, EB-42, EB-59
152   },
153   {// Rook
154    // A     B     C     D     E     F     G     H
155     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
156     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
157     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
158     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
159     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
160     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
161     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
162     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3
163   },
164   {// Queen
165    // A      B      C      D      E      F      G      H
166     EQ-80, EQ-54, EQ-42, EQ-30, EQ-30, EQ-42, EQ-54, EQ-80,
167     EQ-54, EQ-30, EQ-18, EQ- 6, EQ- 6, EQ-18, EQ-30, EQ-54,
168     EQ-42, EQ-18, EQ- 6, EQ+ 6, EQ+ 6, EQ- 6, EQ-18, EQ-42,
169     EQ-30, EQ- 6, EQ+ 6, EQ+18, EQ+18, EQ+ 6, EQ- 6, EQ-30,
170     EQ-30, EQ- 6, EQ+ 6, EQ+18, EQ+18, EQ+ 6, EQ- 6, EQ-30,
171     EQ-42, EQ-18, EQ- 6, EQ+ 6, EQ+ 6, EQ- 6, EQ-18, EQ-42,
172     EQ-54, EQ-30, EQ-18, EQ- 6, EQ- 6, EQ-18, EQ-30, EQ-54,
173     EQ-80, EQ-54, EQ-42, EQ-30, EQ-30, EQ-42, EQ-54, EQ-80
174   },
175   {// King
176    //A    B    C    D    E    F    G    H
177      18,  77, 105, 135, 135, 105,  77,  18,
178      77, 135, 165, 193, 193, 165, 135,  77,
179     105, 165, 193, 222, 222, 193, 165, 105,
180     135, 193, 222, 251, 251, 222, 193, 135,
181     135, 193, 222, 251, 251, 222, 193, 135,
182     105, 165, 193, 222, 222, 193, 165, 105,
183      77, 135, 165, 193, 193, 165, 135,  77,
184      18,  77, 105, 135, 135, 105,  77,  18
185   }
186 };
187
188 } // namespace
189
190 #endif // !defined(PSQTAB_H_INCLUDED)