aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meissner <meissner@linux.vnet.ibm.com>2016-11-03 21:25:12 +0000
committerMichael Meissner <meissner@gcc.gnu.org>2016-11-03 21:25:12 +0000
commit0bc36dec0f6a5d73b79e78c549533261b76602ec (patch)
treea2a81bdd66df0b4f4256b74868d3b1cba0712dc6
parent6905c577d1c41317205f16ea137844f825a9af71 (diff)
downloadgcc-0bc36dec0f6a5d73b79e78c549533261b76602ec.zip
gcc-0bc36dec0f6a5d73b79e78c549533261b76602ec.tar.gz
gcc-0bc36dec0f6a5d73b79e78c549533261b76602ec.tar.bz2
re PR bootstrap/77993 (bootstrap failure on PowerPC/Linux)
2016-11-03 Michael Meissner <meissner@linux.vnet.ibm.com> PR target/77993 * config/rs6000/rs6000.h (FLOAT128_IBM_P): Do not allow IFmode or ICmode unless we have standard PowerPC floating point. * config/rs6000/rs6000.md (FP iterator): Likewise. (FMOVE128 iterator): Likewise. From-SVN: r241833
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000.h5
-rw-r--r--gcc/config/rs6000/rs6000.md4
3 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 14486af..b45b91d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2016-11-03 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ PR target/77993
+ * config/rs6000/rs6000.h (FLOAT128_IBM_P): Do not allow IFmode or
+ ICmode unless we have standard PowerPC floating point.
+ * config/rs6000/rs6000.md (FP iterator): Likewise.
+ (FMOVE128 iterator): Likewise.
+
2016-11-03 Jakub Jelinek <jakub@redhat.com>
Alexandre Oliva <aoliva@redhat.com>
Jason Merrill <jason@redhat.com>
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 4b83abd..2d0dd62 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -442,14 +442,15 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
point. KFmode was added as a way to represent IEEE 128-bit floating point,
even if the default for long double is the IBM long double format.
Similarly IFmode is the IBM long double format even if the default is IEEE
- 128-bit. */
+ 128-bit. Don't allow IFmode if -msoft-float. */
#define FLOAT128_IEEE_P(MODE) \
((TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode)) \
|| ((MODE) == KFmode) || ((MODE) == KCmode))
#define FLOAT128_IBM_P(MODE) \
((!TARGET_IEEEQUAD && ((MODE) == TFmode || (MODE) == TCmode)) \
- || ((MODE) == IFmode) || ((MODE) == ICmode))
+ || (TARGET_HARD_FLOAT && TARGET_FPRS \
+ && ((MODE) == IFmode) || ((MODE) == ICmode)))
/* Helper macros to say whether a 128-bit floating point type can go in a
single vector register, or whether it needs paired scalar values. */
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index bc8e52d..43270f8 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -376,7 +376,7 @@
(TF "TARGET_HARD_FLOAT
&& (TARGET_FPRS || TARGET_E500_DOUBLE)
&& TARGET_LONG_DOUBLE_128")
- (IF "TARGET_LONG_DOUBLE_128")
+ (IF "TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128")
(KF "TARGET_FLOAT128_TYPE")
(DD "TARGET_DFP")
(TD "TARGET_DFP")])
@@ -398,7 +398,7 @@
(define_mode_iterator FMOVE64 [DF DD])
(define_mode_iterator FMOVE64X [DI DF DD])
(define_mode_iterator FMOVE128 [(TF "TARGET_LONG_DOUBLE_128")
- (IF "TARGET_LONG_DOUBLE_128")
+ (IF "FLOAT128_IBM_P (IFmode)")
(TD "TARGET_HARD_FLOAT && TARGET_FPRS")])
(define_mode_iterator FMOVE128_FPR [(TF "FLOAT128_2REG_P (TFmode)")