OSDN Git Service

* combine.c (simplify_shift_const): Calculate rotate count
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Sep 2002 03:34:16 +0000 (03:34 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 8 Sep 2002 03:34:16 +0000 (03:34 +0000)
        correctly for vector operands.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56928 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c

index 6fc185a..9ca0341 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-07  Igor Shevlyakov <igor@microunity.com>
+  
+       * combine.c (simplify_shift_const): Calculate rotate count
+       correctly for vector operands.
+
 2002-09-07  Ansgar Esztermann  <ansgar@thphy.uni-duesseldorf.de>
 
        * c-typeck.c (c_tree_expr_nonnegative_p): New function.
index 10ee904..606b200 100644 (file)
@@ -9046,7 +9046,14 @@ simplify_shift_const (x, code, result_mode, varop, orig_count)
 
       /* Convert ROTATERT to ROTATE.  */
       if (code == ROTATERT)
-       code = ROTATE, count = GET_MODE_BITSIZE (result_mode) - count;
+       {
+         unsigned int bitsize = GET_MODE_BITSIZE (result_mode);;
+         code = ROTATE;
+         if (VECTOR_MODE_P (result_mode))
+           count = bitsize / GET_MODE_NUNITS (result_mode) - count;
+         else
+           count = bitsize - count;
+       }
 
       /* We need to determine what mode we will do the shift in.  If the
         shift is a right shift or a ROTATE, we must always do it in the mode