aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2002-08-02 01:08:01 +0000
committerAlan Modra <amodra@gcc.gnu.org>2002-08-02 10:38:01 +0930
commitfb52d8de78e4d308b95aa721c5c9dc2b4e796391 (patch)
tree7ea907b911e99583263ed0edcbd088e568aee5b5 /gcc
parenta4b5414c883ff448abe86c07b5cd83e59793d32f (diff)
downloadgcc-fb52d8de78e4d308b95aa721c5c9dc2b4e796391.zip
gcc-fb52d8de78e4d308b95aa721c5c9dc2b4e796391.tar.gz
gcc-fb52d8de78e4d308b95aa721c5c9dc2b4e796391.tar.bz2
rs6000.c (output_toc): Don't use lshift_double when HOST_BITS_PER_WIDE_INT == 64.
* config/rs6000/rs6000.c (output_toc): Don't use lshift_double when HOST_BITS_PER_WIDE_INT == 64. From-SVN: r55961
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c13
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index de5c2b5..5b5de59 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-08-02 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (output_toc): Don't use lshift_double when
+ HOST_BITS_PER_WIDE_INT == 64.
+
2002-08-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* df.c (df_insn_table_realloc): Change parameter to unsigned.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index e1b3d1e..932a60c 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -11664,8 +11664,17 @@ output_toc (file, x, labelno, mode)
abort ();/* It would be easy to make this work, but it doesn't now. */
if (POINTER_SIZE > GET_MODE_BITSIZE (mode))
- lshift_double (low, high, POINTER_SIZE - GET_MODE_BITSIZE (mode),
- POINTER_SIZE, &low, &high, 0);
+ {
+#if HOST_BITS_PER_WIDE_INT == 32
+ lshift_double (low, high, POINTER_SIZE - GET_MODE_BITSIZE (mode),
+ POINTER_SIZE, &low, &high, 0);
+#else
+ low |= high << 32;
+ low <<= POINTER_SIZE - GET_MODE_BITSIZE (mode);
+ high = (HOST_WIDE_INT) low >> 32;
+ low &= 0xffffffff;
+#endif
+ }
if (TARGET_64BIT)
{