rs6000.c (is_complex_IBM_long_double): Explicitly check for 128-bit long double befor...
authorMichael Meissner <meissner@linux.vnet.ibm.com>
Wed, 10 Jan 2018 22:02:31 +0000 (22:02 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Wed, 10 Jan 2018 22:02:31 +0000 (22:02 +0000)
2018-01-10  Michael Meissner  <meissner@linux.vnet.ibm.com>

* config/rs6000/rs6000.c (is_complex_IBM_long_double): Explicitly
check for 128-bit long double before checking TCmode.
* config/rs6000/rs6000.h (FLOAT128_IEEE_P): Explicitly check for
128-bit long doubles before checking TFmode or TCmode.
(FLOAT128_IBM_P): Likewise.

From-SVN: r256458

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

index 081c04aa8a783a050858539607a9fbe68a471bf4..9e7590526e0434e89b92ef7cdf853810d1b3b7f6 100644 (file)
@@ -1,3 +1,11 @@
+2018-01-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       * config/rs6000/rs6000.c (is_complex_IBM_long_double): Explicitly
+       check for 128-bit long double before checking TCmode.
+       * config/rs6000/rs6000.h (FLOAT128_IEEE_P): Explicitly check for
+       128-bit long doubles before checking TFmode or TCmode.
+       (FLOAT128_IBM_P): Likewise.
+
 2018-01-10  Martin Sebor  <msebor@redhat.com>
 
        PR tree-optimization/83671
index f3df0b984626897c279f22a9e37ef05cbceb560d..0a0b49422d89ce1129a1b940d2a1fe069d1b3227 100644 (file)
@@ -11429,7 +11429,7 @@ rs6000_must_pass_in_stack (machine_mode mode, const_tree type)
 static inline bool
 is_complex_IBM_long_double (machine_mode mode)
 {
-  return mode == ICmode || (!TARGET_IEEEQUAD && mode == TCmode);
+  return mode == ICmode || (mode == TCmode && FLOAT128_IBM_P (TCmode));
 }
 
 /* Whether ABI_V4 passes MODE args to a function in floating point
index 6e3d7df11d00fa68893a32124c23c70d90d769ad..3bffa29835560314d1acee2c7dcadff4fdf54b8e 100644 (file)
@@ -437,11 +437,13 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
    Similarly IFmode is the IBM long double format even if the default is IEEE
    128-bit.  Don't allow IFmode if -msoft-float.  */
 #define FLOAT128_IEEE_P(MODE)                                          \
-  ((TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode))         \
+  ((TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128                          \
+    && ((MODE) == TFmode || (MODE) == TCmode))                         \
    || ((MODE) == KFmode) || ((MODE) == KCmode))
 
 #define FLOAT128_IBM_P(MODE)                                           \
-  ((!TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode))                \
+  ((!TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128                         \
+    && ((MODE) == TFmode || (MODE) == TCmode))                         \
    || (TARGET_HARD_FLOAT && ((MODE) == IFmode || (MODE) == ICmode)))
 
 /* Helper macros to say whether a 128-bit floating point type can go in a