Refs #401. Added NO_AVX2 flag for old binutils (e.g. RHEL6)
authorZhang Xianyi <traits.zhang@gmail.com>
Wed, 16 Jul 2014 00:37:55 +0000 (08:37 +0800)
committerZhang Xianyi <traits.zhang@gmail.com>
Wed, 16 Jul 2014 00:38:25 +0000 (08:38 +0800)
Makefile.rule
Makefile.system
cpuid_x86.c
driver/others/dynamic.c

index bc05fe312f98e41f52858827562391a7d6337970..83c157cb51fd3829b1d2835a0b06ab4611f1cd89 100644 (file)
@@ -99,6 +99,9 @@ NO_AFFINITY = 1
 # and OS. However, the performance is low.
 # NO_AVX = 1
 
+# Don't use Haswell optimizations if binutils is too old (e.g. RHEL6)
+# NO_AVX2 = 1
+
 # Don't use parallel make.
 # NO_PARALLEL_MAKE = 1
 
index 1f9e8618fbbe8a3621af5895a49a81a223f894da..c872a55dcb7d2dd4733782b6bf2dec39d534a4d6 100644 (file)
@@ -109,6 +109,10 @@ ifeq ($(BINARY), 32)
 GETARCH_FLAGS  += -DNO_AVX
 endif
 
+ifeq ($(NO_AVX2), 1)
+GETARCH_FLAGS  += -DNO_AVX2
+endif
+
 ifeq ($(DEBUG), 1)
 GETARCH_FLAGS  += -g
 endif
@@ -385,7 +389,10 @@ endif
 ifeq ($(ARCH), x86_64)
 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
 ifneq ($(NO_AVX), 1)
-DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER HASWELL
+DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
+endif
+ifneq ($(NO_AVX2), 1)
+DYNAMIC_CORE += HASWELL
 endif
 endif
 
@@ -777,6 +784,10 @@ ifeq ($(BINARY), 32)
 CCOMMON_OPT    += -DNO_AVX
 endif
 
+ifeq ($(NO_AVX2), 1)
+CCOMMON_OPT    += -DNO_AVX2
+endif
+
 ifdef SMP
 CCOMMON_OPT    += -DSMP_SERVER
 
index b7355df92a7ff7e5329b853fd3ad22adcdcda733..53016e1e737b18448e9a5b9b90c5c4775fa46afd 100644 (file)
@@ -1062,7 +1062,11 @@ int get_cpuname(void){
         case 12:
        case 15:
           if(support_avx())
+#ifndef NO_AVX2
             return CPUTYPE_HASWELL;
+#else
+           return CPUTYPE_SANDYBRIDGE;
+#endif
           else
            return CPUTYPE_NEHALEM;
        }
@@ -1072,7 +1076,11 @@ int get_cpuname(void){
         case 5:
        case 6:
           if(support_avx())
+#ifndef NO_AVX2
             return CPUTYPE_HASWELL;
+#else
+           return CPUTYPE_SANDYBRIDGE;
+#endif
           else
            return CPUTYPE_NEHALEM;
         }
@@ -1471,7 +1479,11 @@ int get_coretype(void){
         case 12:
        case 15:
           if(support_avx())
+#ifndef NO_AVX2
             return CORE_HASWELL;
+#else
+           return CORE_SANDYBRIDGE;
+#endif
           else
            return CORE_NEHALEM;
        }
@@ -1481,7 +1493,11 @@ int get_coretype(void){
         case 5:
        case 6:
           if(support_avx())
+#ifndef NO_AVX2
             return CORE_HASWELL;
+#else
+           return CORE_SANDYBRIDGE;
+#endif
           else
            return CORE_NEHALEM;
         }
index a044343e52c2cd36563008cf27526bc7535139be..1235df2db6aa66be47c57c2315ebd1bf9d67e921 100644 (file)
@@ -66,7 +66,11 @@ extern gotoblas_t  gotoblas_BOBCAT;
 extern gotoblas_t  gotoblas_SANDYBRIDGE;
 extern gotoblas_t  gotoblas_BULLDOZER;
 extern gotoblas_t  gotoblas_PILEDRIVER;
+#ifdef NO_AVX2
+#define gotoblas_HASWELL gotoblas_SANDYBRIDGE
+#else
 extern gotoblas_t  gotoblas_HASWELL;
+#endif
 #else
 //Use NEHALEM kernels for sandy bridge
 #define gotoblas_SANDYBRIDGE gotoblas_NEHALEM