rs6000.c (rs6000_option_override_internal): Adjust flag interaction for new Power8...
authorPat Haugen <pthaugen@us.ibm.com>
Thu, 18 Jul 2013 20:24:34 +0000 (20:24 +0000)
committerPat Haugen <pthaugen@gcc.gnu.org>
Thu, 18 Jul 2013 20:24:34 +0000 (20:24 +0000)
* config/rs6000/rs6000.c (rs6000_option_override_internal): Adjust flag
interaction for new Power8 flags and VSX.

From-SVN: r201041

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 15591e1e288109a9644b04f0d1e3ae9f2359fa04..99788662229546e56f3caf74221c3ceeda3bc271 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-18  Pat Haugen <pthaugen@us.ibm.com>
+
+       * config/rs6000/rs6000.c (rs6000_option_override_internal): Adjust flag
+       interaction for new Power8 flags and VSX.
+
 2013-07-18  Sriraman Tallam  <tmsriram@google.com>
 
        PR middle-end/57698
index 3d86bd13381a080458441f74c87598af14201973..2616e6cacc8dc3076786b7411619f6a1af86347d 100644 (file)
@@ -2966,7 +2966,10 @@ rs6000_option_override_internal (bool global_init_p)
          if (rs6000_isa_flags_explicit & OPTION_MASK_VSX)
            msg = N_("-mvsx requires hardware floating point");
          else
-           rs6000_isa_flags &= ~ OPTION_MASK_VSX;
+           {
+             rs6000_isa_flags &= ~ OPTION_MASK_VSX;
+             rs6000_isa_flags_explicit |= OPTION_MASK_VSX;
+           }
        }
       else if (TARGET_PAIRED_FLOAT)
        msg = N_("-mvsx and -mpaired are incompatible");
@@ -2994,6 +2997,16 @@ rs6000_option_override_internal (bool global_init_p)
        }
     }
 
+  /* If hard-float/altivec/vsx were explicitly turned off then don't allow
+     the -mcpu setting to enable options that conflict. */
+  if ((!TARGET_HARD_FLOAT || !TARGET_ALTIVEC || !TARGET_VSX)
+      && (rs6000_isa_flags_explicit & (OPTION_MASK_SOFT_FLOAT
+                                      | OPTION_MASK_ALTIVEC
+                                      | OPTION_MASK_VSX)) != 0)
+    rs6000_isa_flags &= ~((OPTION_MASK_P8_VECTOR | OPTION_MASK_CRYPTO
+                          | OPTION_MASK_DIRECT_MOVE)
+                        & ~rs6000_isa_flags_explicit);
+
   if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
     rs6000_print_isa_options (stderr, 0, "before defaults", rs6000_isa_flags);