]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Assume x86-64 if a 32-bit processor supports SSE2 and 64-bit
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Jun 2014 16:28:36 +0000 (16:28 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 23 Jun 2014 16:28:36 +0000 (16:28 +0000)
PR target/61570
* config/i386/driver-i386.c (host_detect_local_cpu): Set arch
to x86-64 if a 32-bit processor supports SSE2 and 64-bit.

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

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

index 32917ef5e4a574dd5c66ba970ba933d68c43c1ce..06763f0bcbc0988241350e7b9e52f4964ea1f33f 100644 (file)
@@ -1,3 +1,9 @@
+2014-06-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/61570
+       * config/i386/driver-i386.c (host_detect_local_cpu): Set arch
+       to x86-64 if a 32-bit processor supports SSE2 and 64-bit.
+
 2014-06-23  James Greenhalgh  <james.greenhalgh@arm.com>
 
        * config/aarch64/aarch64.md (addsi3_aarch64): Set "simd" attr to
index 3e8a995f2856cd9bd5ae45fa92dcacc271ac2032..4ae9a6ab675b3545611650beab1abc09c0f7e782 100644 (file)
@@ -415,6 +415,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
   bool arch;
 
   unsigned int l2sizekb = 0;
+  unsigned int arch_64bit = 1;
 
   if (argc < 1)
     return NULL;
@@ -656,11 +657,14 @@ const char *host_detect_local_cpu (int argc, const char **argv)
     {
     case PROCESSOR_I386:
       /* Default.  */
+      arch_64bit = 0;
       break;
     case PROCESSOR_I486:
+      arch_64bit = 0;
       cpu = "i486";
       break;
     case PROCESSOR_PENTIUM:
+      arch_64bit = 0;
       if (arch && has_mmx)
        cpu = "pentium-mmx";
       else
@@ -745,21 +749,25 @@ const char *host_detect_local_cpu (int argc, const char **argv)
                    /* Assume Core 2.  */
                    cpu = "core2";
                }
-             else if (has_sse3)
-               /* It is Core Duo.  */
-               cpu = "pentium-m";
-             else if (has_sse2)
-               /* It is Pentium M.  */
-               cpu = "pentium-m";
-             else if (has_sse)
-               /* It is Pentium III.  */
-               cpu = "pentium3";
-             else if (has_mmx)
-               /* It is Pentium II.  */
-               cpu = "pentium2";
              else
-               /* Default to Pentium Pro.  */
-               cpu = "pentiumpro";
+               {
+                 arch_64bit = 0;
+                 if (has_sse3)
+                   /* It is Core Duo.  */
+                   cpu = "pentium-m";
+                 else if (has_sse2)
+                   /* It is Pentium M.  */
+                   cpu = "pentium-m";
+                 else if (has_sse)
+                   /* It is Pentium III.  */
+                   cpu = "pentium3";
+                 else if (has_mmx)
+                   /* It is Pentium II.  */
+                   cpu = "pentium2";
+                 else
+                   /* Default to Pentium Pro.  */
+                   cpu = "pentiumpro";
+               }
            }
          else
            /* For -mtune, we default to -mtune=generic.  */
@@ -773,21 +781,30 @@ const char *host_detect_local_cpu (int argc, const char **argv)
          if (has_longmode)
            cpu = "nocona";
          else
-           cpu = "prescott";
+           {
+             cpu = "prescott";
+             arch_64bit = 0;
+           }
        }
       else
-       cpu = "pentium4";
+       {
+         cpu = "pentium4";
+         arch_64bit = 0;
+       }
       break;
     case PROCESSOR_GEODE:
+      arch_64bit = 0;
       cpu = "geode";
       break;
     case PROCESSOR_K6:
+      arch_64bit = 0;
       if (arch && has_3dnow)
        cpu = "k6-3";
       else
        cpu = "k6";
       break;
     case PROCESSOR_ATHLON:
+      arch_64bit = 0;
       if (arch && has_sse)
        cpu = "athlon-4";
       else
@@ -896,6 +913,10 @@ const char *host_detect_local_cpu (int argc, const char **argv)
       const char *xsavec = has_xsavec ? " -mxsavec" : " -mno-xsavec";
       const char *xsaves = has_xsaves ? " -mxsaves" : " -mno-xsaves";
 
+      /* Assume x86-64 if a 32-bit processor supports SSE2 and 64-bit.  */
+      if (arch_64bit == 0 && has_sse2 && has_longmode)
+       cpu = "x86-64";
+
       options = concat (options, mmx, mmx3dnow, sse, sse2, sse3, ssse3,
                        sse4a, cx16, sahf, movbe, aes, sha, pclmul,
                        popcnt, abm, lwp, fma, fma4, xop, bmi, bmi2,