]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000.h (RS6000_BTM_HARD_FLOAT): New define.
authorPeter Bergner <bergner@vnet.ibm.com>
Mon, 5 May 2014 02:18:35 +0000 (21:18 -0500)
committerPeter Bergner <bergner@gcc.gnu.org>
Mon, 5 May 2014 02:18:35 +0000 (21:18 -0500)
gcc/
* config/rs6000/rs6000.h (RS6000_BTM_HARD_FLOAT): New define.
(RS6000_BTM_COMMON): Add RS6000_BTM_HARD_FLOAT.
(TARGET_EXTRA_BUILTINS): Add TARGET_HARD_FLOAT.
* config/rs6000/rs6000-builtin.def (BU_MISC_1):
Use RS6000_BTM_HARD_FLOAT.
(BU_MISC_2): Likewise.
* config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
RS6000_BTM_HARD_FLOAT.
(rs6000_option_override_internal): Enforce -mhard-float if -mhard-dfp
is explicitly used.
(rs6000_invalid_builtin): Add hard floating builtin support.
(rs6000_expand_builtin): Relax the gcc_assert to allow the new
hard float builtins.
(rs6000_builtin_mask_names): Add RS6000_BTM_HARD_FLOAT.

gcc/testsuite/
* gcc.target/powerpc/pack02.c (dg-options): Add -mhard-float.
(dg-require-effective-target): Change target to powerpc_fprs.
* gcc.target/powerpc/pack03.c (dg-options): Add -mhard-dfp.
(dg-require-effective-target): Change target to dfprt.

From-SVN: r210056

gcc/ChangeLog
gcc/config/rs6000/rs6000-builtin.def
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pack02.c
gcc/testsuite/gcc.target/powerpc/pack03.c

index e548d548799fe3bddcf295269d15ee92d0fdb621..aab20ca12205dd29cf73af1e05374dacf9465755 100644 (file)
@@ -1,3 +1,20 @@
+2014-05-04  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * config/rs6000/rs6000.h (RS6000_BTM_HARD_FLOAT): New define.
+       (RS6000_BTM_COMMON): Add RS6000_BTM_HARD_FLOAT.
+       (TARGET_EXTRA_BUILTINS): Add TARGET_HARD_FLOAT.
+       * config/rs6000/rs6000-builtin.def (BU_MISC_1):
+       Use RS6000_BTM_HARD_FLOAT.
+       (BU_MISC_2): Likewise.
+       * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
+       RS6000_BTM_HARD_FLOAT.
+       (rs6000_option_override_internal): Enforce -mhard-float if -mhard-dfp
+       is explicitly used.
+       (rs6000_invalid_builtin): Add hard floating builtin support.
+       (rs6000_expand_builtin): Relax the gcc_assert to allow the new
+       hard float builtins.
+       (rs6000_builtin_mask_names): Add RS6000_BTM_HARD_FLOAT.
+
 2014-05-03  Joey Ye  <joey.ye@arm.com>
 
        Backport from mainline r209463
index e4c70f44c2f19b00e862e0cb4811198d1108d41f..92ba2757769db63d41e3164a620e33553af7d935 100644 (file)
 #define BU_MISC_1(ENUM, NAME, ATTR, ICODE)                             \
   RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
                    "__builtin_" NAME,                  /* NAME */      \
-                   RS6000_BTM_ALWAYS,                  /* MASK */      \
+                   RS6000_BTM_HARD_FLOAT,              /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_UNARY),                               \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 #define BU_MISC_2(ENUM, NAME, ATTR, ICODE)                             \
   RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM,             /* ENUM */      \
                    "__builtin_" NAME,                  /* NAME */      \
-                   RS6000_BTM_ALWAYS,                  /* MASK */      \
+                   RS6000_BTM_HARD_FLOAT,              /* MASK */      \
                    (RS6000_BTC_ ## ATTR                /* ATTR */      \
                     | RS6000_BTC_BINARY),                              \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
index ace414674fe1a1e0d68dca944c2f0edc3d41dfeb..08308fdf1e1fead602e365d9d5ffcc079972d3c9 100644 (file)
@@ -3013,7 +3013,8 @@ rs6000_builtin_mask_calculate (void)
          | ((TARGET_P8_VECTOR)             ? RS6000_BTM_P8_VECTOR : 0)
          | ((TARGET_CRYPTO)                ? RS6000_BTM_CRYPTO    : 0)
          | ((TARGET_HTM)                   ? RS6000_BTM_HTM       : 0)
-         | ((TARGET_DFP)                   ? RS6000_BTM_DFP       : 0));
+         | ((TARGET_DFP)                   ? RS6000_BTM_DFP       : 0)
+         | ((TARGET_HARD_FLOAT)            ? RS6000_BTM_HARD_FLOAT : 0));
 }
 
 /* Override command line options.  Mostly we process the processor type and
@@ -3366,6 +3367,13 @@ rs6000_option_override_internal (bool global_init_p)
       rs6000_isa_flags &= ~OPTION_MASK_VSX_TIMODE;
     }
 
+  if (TARGET_DFP && !TARGET_HARD_FLOAT)
+    {
+      if (rs6000_isa_flags_explicit & OPTION_MASK_DFP)
+       error ("-mhard-dfp requires -mhard-float");
+      rs6000_isa_flags &= ~OPTION_MASK_DFP;
+    }
+
   /* The quad memory instructions only works in 64-bit mode. In 32-bit mode,
      silently turn off quad memory mode.  */
   if ((TARGET_QUAD_MEMORY || TARGET_QUAD_MEMORY_ATOMIC) && !TARGET_POWERPC64)
@@ -13541,6 +13549,8 @@ rs6000_invalid_builtin (enum rs6000_builtins fncode)
     error ("Builtin function %s requires the -mhard-dfp option", name);
   else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
     error ("Builtin function %s requires the -mpower8-vector option", name);
+  else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0)
+    error ("Builtin function %s requires the -mhard-float option", name);
   else
     error ("Builtin function %s is not supported with the current options",
           name);
@@ -13723,7 +13733,10 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
        return ret;
     }  
 
-  gcc_assert (TARGET_ALTIVEC || TARGET_VSX || TARGET_SPE || TARGET_PAIRED_FLOAT);
+  unsigned attr = rs6000_builtin_info[uns_fcode].attr & RS6000_BTC_TYPE_MASK;
+  gcc_assert (attr == RS6000_BTC_UNARY
+             || attr == RS6000_BTC_BINARY
+             || attr == RS6000_BTC_TERNARY);
 
   /* Handle simple unary operations.  */
   d = bdesc_1arg;
@@ -31399,6 +31412,7 @@ static struct rs6000_opt_mask const rs6000_builtin_mask_names[] =
   { "crypto",           RS6000_BTM_CRYPTO,     false, false },
   { "htm",              RS6000_BTM_HTM,        false, false },
   { "hard-dfp",                 RS6000_BTM_DFP,        false, false },
+  { "hard-float",       RS6000_BTM_HARD_FLOAT, false, false },
 };
 
 /* Option variables that we want to support inside attribute((target)) and
index a4cfcebf3d396734a757fab5705fed67b72c73df..cd9db8fe41d96988bd2f831a8b3115646ea9b2b0 100644 (file)
@@ -623,7 +623,8 @@ extern int rs6000_vector_align[];
                                      || TARGET_CMPB      /* ISA 2.05 */ \
                                      || TARGET_POPCNTD   /* ISA 2.06 */ \
                                      || TARGET_ALTIVEC                  \
-                                     || TARGET_VSX)))
+                                     || TARGET_VSX                      \
+                                     || TARGET_HARD_FLOAT)))
 
 /* E500 cores only support plain "sync", not lwsync.  */
 #define TARGET_NO_LWSYNC (rs6000_cpu == PROCESSOR_PPC8540 \
@@ -2499,6 +2500,7 @@ extern int frame_pointer_needed;
 #define RS6000_BTM_POPCNTD     MASK_POPCNTD    /* Target supports ISA 2.06.  */
 #define RS6000_BTM_CELL                MASK_FPRND      /* Target is cell powerpc.  */
 #define RS6000_BTM_DFP         MASK_DFP        /* Decimal floating point.  */
+#define RS6000_BTM_HARD_FLOAT  MASK_SOFT_FLOAT /* Hardware floating point.  */
 
 #define RS6000_BTM_COMMON      (RS6000_BTM_ALTIVEC                     \
                                 | RS6000_BTM_VSX                       \
@@ -2511,7 +2513,8 @@ extern int frame_pointer_needed;
                                 | RS6000_BTM_HTM                       \
                                 | RS6000_BTM_POPCNTD                   \
                                 | RS6000_BTM_CELL                      \
-                                | RS6000_BTM_DFP)
+                                | RS6000_BTM_DFP                       \
+                                | RS6000_BTM_HARD_FLOAT)
 
 /* Define builtin enum index.  */
 
index 33367de6ca376cc667dba269d6633a70caa8f1e8..3f0d9ce1c55c904e2406c18016029485b991dad7 100644 (file)
@@ -1,3 +1,10 @@
+2014-05-04  Peter Bergner  <bergner@vnet.ibm.com>
+
+       * gcc.target/powerpc/pack02.c (dg-options): Add -mhard-float.
+       (dg-require-effective-target): Change target to powerpc_fprs.
+       * gcc.target/powerpc/pack03.c (dg-options): Add -mhard-dfp.
+       (dg-require-effective-target): Change target to dfprt.
+
 2014-05-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        PR tree-optimization/60930
index 74b6cd04dcca00ab9b89a67ce498771710e6528e..584d6c292055831221f76666221fd4e9745040ca 100644 (file)
@@ -1,8 +1,8 @@
 /* { dg-do run { target { powerpc*-*-linux* } } } */
 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
 /* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-/* { dg-require-effective-target vsx_hw } */
-/* { dg-options "-O2" } */
+/* { dg-require-effective-target powerpc_fprs } */
+/* { dg-options "-O2 -mhard-float" } */
 
 #include <stddef.h>
 #include <stdlib.h>
index 59f0e74ba9c7e36b51a405c636e6aad192ae8e14..bc582f232d69ec0f83c042437ee139a78efa5c45 100644 (file)
@@ -1,8 +1,8 @@
 /* { dg-do run { target { powerpc*-*-linux* } } } */
 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
 /* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-/* { dg-require-effective-target vsx_hw } */
-/* { dg-options "-O2" } */
+/* { dg-require-effective-target dfprt } */
+/* { dg-options "-O2 -mhard-dfp" } */
 
 #include <stddef.h>
 #include <stdlib.h>