ppc64 SFmode constants in the TOC occupy the first word of a dword.
For little-endian, we don't need to shift left.  Bootstrapped etc. and
committed as obvious revision 199646.

        * config/rs6000/rs6000.c (output_toc): Correct little-endian float
        constant output.

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 199644)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -22574,7 +22574,10 @@ output_toc (FILE *file, rtx x, int labelno, enum m
            fputs (DOUBLE_INT_ASM_OP, file);
          else
            fprintf (file, "\t.tc FS_%lx[TC],", l & 0xffffffff);
-         fprintf (file, "0x%lx00000000\n", l & 0xffffffff);
+         if (WORDS_BIG_ENDIAN)
+           fprintf (file, "0x%lx00000000\n", l & 0xffffffff);
+         else
+           fprintf (file, "0x%lx\n", l & 0xffffffff);
          return;
        }
       else

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to