#endif
+#if !defined(NO_PREFETCH)
+# include <xmmintrin.h>
+#endif
+
#include <cassert>
#include <cstdio>
#include <iomanip>
/// Version number. If this is left empty, the current date (in the format
/// YYMMDD) is used as a version number.
-static const string EngineVersion = "1.7";
+static const string EngineVersion = "";
static const string AppName = "Stockfish";
static const string AppTag = "";
const string cpu64(CpuHas64BitPath ? " 64bit" : "");
if (!EngineVersion.empty())
- return AppName+ " " + EngineVersion + cpu64;
+ return AppName + " " + EngineVersion + cpu64;
string date(__DATE__); // From compiler, format is "Sep 21 2008"
string months("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec");
return 0;
}
}
+
#endif
+
+/// prefetch() preloads the given address in L1/L2 cache. This is a non
+/// blocking function and do not stalls the CPU waiting for data to be
+/// loaded from RAM, that can be very slow.
+#if defined(NO_PREFETCH)
+void prefetch(char*) {}
+#else
+
+void prefetch(char* addr) {
+
+#if defined(__INTEL_COMPILER) || defined(__ICL)
+ // This hack prevents prefetches to be optimized away by
+ // Intel compiler. Both MSVC and gcc seems not affected.
+ __asm__ ("");
+#endif
+
+ _mm_prefetch(addr, _MM_HINT_T2);
+ _mm_prefetch(addr+64, _MM_HINT_T2); // 64 bytes ahead
+}
+
+#endif
+