rs6000: Put back the 's' output modifier
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 27 Jan 2016 19:44:31 +0000 (20:44 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 27 Jan 2016 19:44:31 +0000 (20:44 +0100)
It turns out the 's' output modifier is used in some glibc math code,
and is in an installed header even.  So let's put it back, it is much
less of a burden supporting it a bit longer than to deal with the fallout.
(It is also being fixed for glibc.)

* config/rs6000/rs6000.c (print_operand): Rollback 's' removal.

From-SVN: r232900

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 76c7af2..fecbc49 100644 (file)
@@ -1,3 +1,7 @@
+2016-01-27  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * config/rs6000/rs6000.c (print_operand): Rollback 's' removal.
+
 2016-01-27  Jeff Law  <law@redhat.com>
 
        PR tree-optimization/68398
index 7b9201a..e9e12f5 100644 (file)
@@ -19949,6 +19949,14 @@ print_operand (FILE *file, rtx x, int code)
        fprintf (file, "%d", 128 >> (REGNO (x) - CR0_REGNO));
       return;
 
+    case 's':
+      /* Low 5 bits of 32 - value */
+      if (! INT_P (x))
+       output_operand_lossage ("invalid %%s value");
+      else
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, (32 - INTVAL (x)) & 31);
+      return;
+
     case 't':
       /* Like 'J' but get to the OVERFLOW/UNORDERED bit.  */
       gcc_assert (REG_P (x) && GET_MODE (x) == CCmode);