diff options
author | Tom Rix <trix@redhat.com> | 2002-01-19 15:40:35 +0000 |
---|---|---|
committer | Tom Rix <trix@gcc.gnu.org> | 2002-01-19 15:40:35 +0000 |
commit | 5b0293155d4301fb1935325ae6c8853911ffcfd7 (patch) | |
tree | 5680f3aff1928754b61bdb794398f14e74b1ab6a | |
parent | 89769d19cce2c7f63dcea9b4220e9e3ff27468c6 (diff) | |
download | gcc-5b0293155d4301fb1935325ae6c8853911ffcfd7.zip gcc-5b0293155d4301fb1935325ae6c8853911ffcfd7.tar.gz gcc-5b0293155d4301fb1935325ae6c8853911ffcfd7.tar.bz2 |
Fix for DF split
From-SVN: r49011
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 8 |
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, |