On Thu, Feb 25, 2016 at 10:52:29AM -0500, David Edelsohn wrote:
> Please add a short comment explaining why rs6000_insn_for_shift_mask
> doesn't need to match the logic in rs6000_is_valid_shift_mask
> converting rotates to simple shifts.

I added this comment:

--- trunk/gcc/config/rs6000/rs6000.c    2016/02/26 18:17:02     233754
+++ trunk/gcc/config/rs6000/rs6000.c    2016/02/26 18:49:18     233755
@@ -17438,9 +17438,12 @@ rs6000_insn_for_shift_mask (machine_mode
        operands[2] = GEN_INT (32 - INTVAL (operands[2]));
       operands[3] = GEN_INT (31 - nb);
       operands[4] = GEN_INT (31 - ne);
+      /* This insn can also be a 64-bit rotate with mask that really makes
+        it just a shift right (with mask); the %h below are to adjust for
+        that situation (shift count is >= 32 in that case).  */
       if (dot)
-       return "rlw%I2nm. %0,%1,%2,%3,%4";
-      return "rlw%I2nm %0,%1,%2,%3,%4";
+       return "rlw%I2nm. %0,%1,%h2,%3,%4";
+      return "rlw%I2nm %0,%1,%h2,%3,%4";
     }
 
   gcc_unreachable ();


Segher

Reply via email to