OSDN Git Service

2009-05-27 H.J. Lu <hongjiu.lu@intel.com>
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 May 2009 14:39:23 +0000 (14:39 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 27 May 2009 14:39:23 +0000 (14:39 +0000)
PR target/40266
* config/i386/driver-i386.c (host_detect_local_cpu): Support
AVX, SSE4, AES, PCLMUL and POPCNT.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147913 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/driver-i386.c

index 894361c..3d9a9b3 100644 (file)
@@ -1,3 +1,9 @@
+2009-05-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/40266
+       * config/i386/driver-i386.c (host_detect_local_cpu): Support
+       AVX, SSE4, AES, PCLMUL and POPCNT.
+
 2009-05-27  Diego Novillo  <dnovillo@google.com>
 
        * tree-pretty-print.c (dump_location): New.
index 4fc0098..0364bea 100644 (file)
@@ -378,7 +378,9 @@ const char *host_detect_local_cpu (int argc, const char **argv)
   /* Extended features */
   unsigned int has_lahf_lm = 0, has_sse4a = 0;
   unsigned int has_longmode = 0, has_3dnowp = 0, has_3dnow = 0;
-  unsigned int has_movbe = 0;
+  unsigned int has_movbe = 0, has_sse4_1 = 0, has_sse4_2 = 0;
+  unsigned int has_popcnt = 0, has_aes = 0, has_avx = 0;
+  unsigned int has_pclmul = 0;
 
   bool arch;
 
@@ -415,8 +417,14 @@ const char *host_detect_local_cpu (int argc, const char **argv)
 
   has_sse3 = ecx & bit_SSE3;
   has_ssse3 = ecx & bit_SSSE3;
+  has_sse4_1 = ecx & bit_SSE4_1;
+  has_sse4_2 = ecx & bit_SSE4_2;
+  has_avx = ecx & bit_AVX;
   has_cmpxchg16b = ecx & bit_CMPXCHG16B;
   has_movbe = ecx & bit_MOVBE;
+  has_popcnt = ecx & bit_POPCNT;
+  has_aes = ecx & bit_AES;
+  has_pclmul = ecx & bit_PCLMUL;
 
   has_cmpxchg8b = edx & bit_CMPXCHG8B;
   has_cmov = edx & bit_CMOV;
@@ -604,7 +612,19 @@ const char *host_detect_local_cpu (int argc, const char **argv)
       if (has_lahf_lm)
        options = concat (options, "-msahf ", NULL);
       if (has_movbe)
-       options = concat (options, "-mmovbe", NULL);
+       options = concat (options, "-mmovbe ", NULL);
+      if (has_aes)
+       options = concat (options, "-maes ", NULL);
+      if (has_pclmul)
+       options = concat (options, "-mpclmul ", NULL);
+      if (has_popcnt)
+       options = concat (options, "-mpopcnt ", NULL);
+      if (has_avx)
+       options = concat (options, "-mavx ", NULL);
+      else if (has_sse4_2)
+       options = concat (options, "-msse4.2 ", NULL);
+      else if (has_sse4_1)
+       options = concat (options, "-msse4.1 ", NULL);
     }
 
 done: