aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rix <trix@redhat.com>2002-01-19 15:40:35 +0000
committerTom Rix <trix@gcc.gnu.org>2002-01-19 15:40:35 +0000
commit5b0293155d4301fb1935325ae6c8853911ffcfd7 (patch)
tree5680f3aff1928754b61bdb794398f14e74b1ab6a
parent89769d19cce2c7f63dcea9b4220e9e3ff27468c6 (diff)
downloadgcc-5b0293155d4301fb1935325ae6c8853911ffcfd7.zip
gcc-5b0293155d4301fb1935325ae6c8853911ffcfd7.tar.gz
gcc-5b0293155d4301fb1935325ae6c8853911ffcfd7.tar.bz2
Fix for DF split
From-SVN: r49011
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/rs6000/rs6000.md8
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 20612cc..d9008b6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-01-19 Tom Rix <trix@redhat.com>
+
+ * config/rs6000/rs6000.md: Fix DF split for 64 bit hosts.
+
2002-01-18 Aldy Hernandez <aldyh@redhat.com>
* doc/tm.texi (STARTING_FRAME_PHASE): Document.
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 6644f25..3a76293 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -7927,13 +7927,21 @@
int endian = (WORDS_BIG_ENDIAN == 0);
long l[2];
REAL_VALUE_TYPE rv;
+ HOST_WIDE_INT val;
REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]);
REAL_VALUE_TO_TARGET_DOUBLE (rv, l);
operands[2] = gen_lowpart (DImode, operands[0]);
/* HIGHPART is lower memory address when WORDS_BIG_ENDIAN. */
+#if HOST_BITS_PER_WIDE_INT >= 64
+ val = ((HOST_WIDE_INT)(unsigned long)l[endian] << 32 |
+ ((HOST_WIDE_INT)(unsigned long)l[1 - endian]));
+
+ operands[3] = immed_double_const (val, -(val < 0), DImode);
+#else
operands[3] = immed_double_const (l[1 - endian], l[endian], DImode);
+#endif
}")
;; Don't have reload use general registers to load a constant. First,