Fix pawn entry prefetch
authormstembera <MissingEmail@email>
Wed, 15 Mar 2017 03:56:26 +0000 (20:56 -0700)
committerJoona Kiiski <joona@zoox.com>
Wed, 15 Mar 2017 03:56:26 +0000 (20:56 -0700)
No functional change

Closes #1026

src/misc.cpp
src/misc.h
src/position.cpp

index 360bd21..1183344 100644 (file)
@@ -205,6 +205,12 @@ void prefetch(void* addr) {
 
 #endif
 
+void prefetch2(void* addr) {
+
+    prefetch(addr);
+    prefetch((uint8_t*)addr + 64);
+}
+
 namespace WinProcGroup {
 
 #ifndef _WIN32
index 72be1ee..b63e613 100644 (file)
@@ -31,6 +31,7 @@
 
 const std::string engine_info(bool to_uci = false);
 void prefetch(void* addr);
+void prefetch2(void* addr);
 void start_logger(const std::string& fname);
 
 void dbg_hit_on(bool b);
index 40890ac..e20c822 100644 (file)
@@ -827,7 +827,7 @@ void Position::do_move(Move m, StateInfo& newSt, bool givesCheck) {
 
       // Update pawn hash key and prefetch access to pawnsTable
       st->pawnKey ^= Zobrist::psq[pc][from] ^ Zobrist::psq[pc][to];
-      prefetch(thisThread->pawnsTable[st->pawnKey]);
+      prefetch2(thisThread->pawnsTable[st->pawnKey]);
 
       // Reset rule 50 draw counter
       st->rule50 = 0;