rs6000.c (print_operand): Fix comment and adjust.
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 9 Aug 2006 16:38:45 +0000 (16:38 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 9 Aug 2006 16:38:45 +0000 (16:38 +0000)
* config/rs6000/rs6000.c (print_operand) <D>: Fix comment and adjust.
(rs6000_generate_compare): Tweak comments.
* config/rs6000/rs6000.md (UNSPEC_MV_CR_GT): Fix comment.

From-SVN: r116041

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

index b0119e11d125cd0e875c0537b345b5fe67ff6f78..c6d24ddb57de5b7686f5f581ef891d7821199a4c 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/rs6000/rs6000.c (print_operand) <D>: Fix comment and adjust.
+       (rs6000_generate_compare): Tweak comments.
+       * config/rs6000/rs6000.md (UNSPEC_MV_CR_GT): Fix comment.
+
 2006-08-09  Alexandre Oliva  <aoliva@redhat.com>
 
        * var-tracking.c (enum micro_operation_type): Add MO_COPY.
index 676f9645265eb2ef1d9cec966b58850dc4c85a03..47734a418663d95df7f690c589b9179dcdf4789d 100644 (file)
@@ -10283,13 +10283,14 @@ print_operand (FILE *file, rtx x, int code)
       return;
 
     case 'D':
-      /* Like 'J' but get to the EQ bit.  */
+      /* Like 'J' but get to the GT bit only.  */
       gcc_assert (GET_CODE (x) == REG);
 
-      /* Bit 1 is EQ bit.  */
-      i = 4 * (REGNO (x) - CR0_REGNO) + 2;
+      /* Bit 1 is GT bit.  */
+      i = 4 * (REGNO (x) - CR0_REGNO) + 1;
 
-      fprintf (file, "%d", i);
+      /* Add one for shift count in rlinm for scc.  */
+      fprintf (file, "%d", i + 1);
       return;
 
     case 'E':
@@ -11086,7 +11087,7 @@ rs6000_generate_compare (enum rtx_code code)
   /* First, the compare.  */
   compare_result = gen_reg_rtx (comp_mode);
 
-  /* SPE FP compare instructions on the GPRs.  Yuck!  */
+  /* E500 FP compare instructions on the GPRs.  Yuck!  */
   if ((TARGET_E500 && !TARGET_FPRS && TARGET_HARD_FLOAT)
       && rs6000_compare_fp_p)
     {
@@ -11096,8 +11097,8 @@ rs6000_generate_compare (enum rtx_code code)
       if (op_mode == VOIDmode)
        op_mode = GET_MODE (rs6000_compare_op1);
 
-      /* Note: The E500 comparison instructions set the GT bit (x +
-        1), on success.  This explains the mess.  */
+      /* The E500 FP compare instructions toggle the GT bit (CR bit 1) only.
+        This explains the following mess.  */
 
       switch (code)
        {
index 611d9e162bfd38b344e2456d2a45456d0abd7533..92590a70db56d20226c4a5fc63a47bc7d00aa600 100644 (file)
@@ -55,7 +55,7 @@
    (UNSPEC_TLSGOTTPREL         28)
    (UNSPEC_TLSTLS              29)
    (UNSPEC_FIX_TRUNC_TF                30)     ; fadd, rounding towards zero
-   (UNSPEC_MV_CR_GT            31)     ; move_from_CR_eq_bit
+   (UNSPEC_MV_CR_GT            31)     ; move_from_CR_gt_bit
    (UNSPEC_STFIWX              32)
    (UNSPEC_POPCNTB             33)
    (UNSPEC_FRES                        34)