This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix powerpc64 g77
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: gcc-patches at gcc dot gnu dot org
- Cc: David Edelsohn <dje at watson dot ibm dot com>, Peter Bergner <bergner at vnet dot ibm dot com>, Janis Johnson <janis187 at us dot ibm dot com>
- Date: Thu, 1 Aug 2002 20:22:15 +0930
- Subject: Fix powerpc64 g77
This patch fixes most of the powerpc64-linux g77 failures. Here, "low"
and "high" are HOST_WIDE_INTs each holding 32 bits of a constant. If
HOST_WIDE_INT is 64 bits, lshift_double isn't what we want at all.
* config/rs6000/rs6000.c (output_toc): Don't use lshift_double when
HOST_BITS_PER_WIDE_INT == 64.
Index: gcc/config/rs6000/rs6000.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.354
diff -u -p -r1.354 rs6000.c
--- gcc/config/rs6000/rs6000.c 31 Jul 2002 23:13:25 -0000 1.354
+++ gcc/config/rs6000/rs6000.c 1 Aug 2002 08:32:07 -0000
@@ -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)
{
--
Alan Modra
IBM OzLabs - Linux Technology Centre