Implement killers
authorH.G. Muller <h.g.muller@hccnet.nl>
Mon, 27 May 2013 20:46:34 +0000 (22:46 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 21 Oct 2013 08:40:24 +0000 (10:40 +0200)
hachu.c

diff --git a/hachu.c b/hachu.c
index 97cab1b..c9350ae 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -17,6 +17,7 @@
 //define PATH 0\r
 \r
 #define HASH\r
+#define KILLERS\r
 \r
 #include <stdio.h>\r
 #include <stdlib.h>\r
@@ -113,7 +114,7 @@ char *array, fenArray[4000], *reason;
 int bWidth, bHeight, bsize, zone, currentVariant, chuFlag, tenFlag, chessFlag, repDraws;\r
 int stm, xstm, hashKeyH, hashKeyL, framePtr, msp, nonCapts, rootEval, retMSP, retFirst, retDep, pvPtr, level, cnt50, mobilityScore;\r
 int nodes, startTime, tlim1, tlim2, repCnt, comp;\r
-Move retMove, moveStack[10000], path[100], repStack[300], pv[1000], repeatMove[300];\r
+Move retMove, moveStack[10000], path[100], repStack[300], pv[1000], repeatMove[300], killer[100][2];\r
 \r
       int maxDepth;                            // used by search\r
 \r
@@ -1694,6 +1695,14 @@ if(PATH) printf("%d:%2d:%2d msp=%d\n",level,depth,iterDep,msp);
          case 6: // non-captures\r
            nonCapts = msp;\r
            nullMove = GenNonCapts(oldPromo);\r
+#ifdef KILLERS\r
+           { // swap killers to front\r
+             Move h = killer[level][0]; int j = curMove;\r
+             for(i=curMove; i<msp; i++) if(moveStack[i] == h) { moveStack[i] = moveStack[j]; moveStack[j++] = h; break; }\r
+             h = killer[level][1];\r
+             for(i=curMove; i<msp; i++) if(moveStack[i] == h) { moveStack[i] = moveStack[j]; moveStack[j++] = h; break; }\r
+           }\r
+#endif\r
            phase = 7;\r
            sorted = msp; // do not sort noncapts\r
            break;\r
@@ -1789,7 +1798,12 @@ if(PATH) printf("%d:%2d:%d %3d %6x %-10s %6d %6d\n", level, depth, iterDep, curM
          }\r
          bestMoveNr = firstMove;\r
          if(score >= beta) { // beta cutoff\r
-           // update killer\r
+#ifdef KILLERS\r
+           if(iterDep == depth && move != killer[level][0]) {\r
+             // update killer\r
+             killer[level][1] = killer[level][0]; killer[level][0] = move;\r
+           }\r
+#endif\r
            resDep = retDep;\r
            goto cutoff;\r
          }\r