(print_operand, case 'h', 'H', 'w'): Minor cleanups.
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 19 Sep 1992 19:41:16 +0000 (15:41 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 19 Sep 1992 19:41:16 +0000 (15:41 -0400)
From-SVN: r2168

gcc/config/rs6000/rs6000.c

index e1e530118246772e71288fcfeb994457c3705441..0864b9e0dd45e982f70c96edc637384b6d2717f1 100644 (file)
@@ -710,7 +710,8 @@ print_operand (file, x, code)
   switch (code)
     {
     case 'h':
-      /* If constant, output low-order six bits.  Otherwise, write normally. */
+      /* If constant, output low-order five bits.  Otherwise,
+        write normally. */
       if (INT_P (x))
        fprintf (file, "%d", INT_LOWPART (x) & 31);
       else
@@ -718,7 +719,7 @@ print_operand (file, x, code)
       return;
 
     case 'H':
-      /* X must be a constant.  Output the low order 6 bits plus 24.  */
+      /* X must be a constant.  Output the low order 5 bits plus 24.  */
       if (! INT_P (x))
        output_operand_lossage ("invalid %%H value");
 
@@ -737,7 +738,8 @@ print_operand (file, x, code)
       /* If constant, low-order 16 bits of constant, signed.  Otherwise, write
         normally.  */
       if (INT_P (x))
-       fprintf (file, "%d", (INT_LOWPART (x) << 16) >> 16);
+       fprintf (file, "%d",
+                (INT_LOWPART (x) & 0xffff) - 2 * (INT_LOWPART (x) & 0x8000));
       else
        print_operand (file, x, 0);
       return;