]> git.sesse.net Git - stockfish/commitdiff
Enable POPCNT only through Makefile
authorMarco Costalba <mcostalba@gmail.com>
Fri, 6 Nov 2009 16:23:02 +0000 (17:23 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Fri, 6 Nov 2009 16:50:24 +0000 (17:50 +0100)
Also remove some fallback templates that prevent a
compile error in case the user runs 'make icc-profile-popcnt'
from a non supported machine.

We want to loudly fail in that case instead of silently
fallback in a non-popcount compilation.

Updated documentation too.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Readme.txt
src/bitcount.h

index 85139105b0f1ca3bf84b3a1a541da8172acbdb23..a79e73025ffab11055e08aff25f295a29fbf6218 100644 (file)
@@ -58,8 +58,7 @@ flag changing from -DNBIGENDIAN to -DBIGENDIAN in the Makefile.
 
 Stockfish has POPCNT instruction runtime detection and support. This can
 give an extra speed on Core i7 or similar systems. To enable this feature
 
 Stockfish has POPCNT instruction runtime detection and support. This can
 give an extra speed on Core i7 or similar systems. To enable this feature
-(disabled by default) simply uncomment #define USE_POPCNT in bitcount.h
-before to compile.
+compile with 'make icc-profile-popcnt'
 
 On 64 bit Unix-like systems the 'bsfq' assembly instruction will be used
 for bit counting. Detection is automatic at compile time, but in case you
 
 On 64 bit Unix-like systems the 'bsfq' assembly instruction will be used
 for bit counting. Detection is automatic at compile time, but in case you
index 6b5f5b5789bb5f8b0b895fafa650566ceba107c2..aa27c049415bcc3ce98750d48a9194152f8d8486 100644 (file)
 #if !defined(BITCOUNT_H_INCLUDED)
 #define BITCOUNT_H_INCLUDED
 
 #if !defined(BITCOUNT_H_INCLUDED)
 #define BITCOUNT_H_INCLUDED
 
-// To enable POPCNT support uncomment USE_POPCNT define. For PGO compile on a Core i7
-// you may want to collect profile data first with USE_POPCNT disabled and then, in a
-// second profiling session, with USE_POPCNT enabled so to exercise both paths. Don't
-// forget to leave USE_POPCNT enabled for the final optimized compile though ;-)
-
-//#define USE_POPCNT
-
-
 #include "types.h"
 
 #include "types.h"
 
-// Select type of intrinsic bit count instruction to use
+// Select type of intrinsic bit count instruction to use, see
+// README.txt on how to pgo compile with POPCNT support.
 
 
-#if defined(__INTEL_COMPILER) && defined(IS_64BIT) && defined(USE_POPCNT) // Intel compiler
+#if defined(__INTEL_COMPILER) && defined(USE_POPCNT) // Intel compiler
 
 #include <nmmintrin.h>
 
 
 #include <nmmintrin.h>
 
@@ -45,17 +38,9 @@ inline bool cpu_has_popcnt() {
   return (CPUInfo[2] >> 23) & 1;
 }
 
   return (CPUInfo[2] >> 23) & 1;
 }
 
-// Define a dummy template to workaround a compile error if _mm_popcnt_u64() is not defined.
-//
-// If _mm_popcnt_u64() is defined in <nmmintrin.h> it will be choosen first due to
-// C++ overload rules that always prefer a function to a template with the same name.
-// If not, we avoid a compile error and because cpu_has_popcnt() should return false,
-// our templetized _mm_popcnt_u64() is never called anyway.
-template<typename T> inline unsigned _mm_popcnt_u64(T) { return 0; } // Is never called
-
 #define POPCNT_INTRINSIC(x) _mm_popcnt_u64(x)
 
 #define POPCNT_INTRINSIC(x) _mm_popcnt_u64(x)
 
-#elif defined(_MSC_VER) && defined(IS_64BIT) && defined(USE_POPCNT) // Microsoft compiler
+#elif defined(_MSC_VER) && defined(USE_POPCNT) // Microsoft compiler
 
 #include <intrin.h>
 
 
 #include <intrin.h>
 
@@ -66,9 +51,6 @@ inline bool cpu_has_popcnt() {
   return (CPUInfo[2] >> 23) & 1;
 }
 
   return (CPUInfo[2] >> 23) & 1;
 }
 
-// See comment of _mm_popcnt_u64<>() few lines above for an explanation.
-template<typename T> inline unsigned __popcnt64(T) { return 0; } // Is never called
-
 #define POPCNT_INTRINSIC(x) __popcnt64(x)
 
 #else // Safe fallback for unsupported compilers or when USE_POPCNT is disabled
 #define POPCNT_INTRINSIC(x) __popcnt64(x)
 
 #else // Safe fallback for unsupported compilers or when USE_POPCNT is disabled