* expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG.
authorRichard Henderson <rth@cygnus.com>
Mon, 15 Dec 1997 18:39:02 +0000 (10:39 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 15 Dec 1997 18:39:02 +0000 (10:39 -0800)
From-SVN: r17107

gcc/ChangeLog
gcc/expmed.c

index 275d6c73483360983198eff44b1f4f066756a953..a8f99531492e6d6f2bf35271d8d7afbce5e15614 100644 (file)
@@ -1,3 +1,7 @@
+Mon Dec 15 18:40:08 1997  Richard Henderson  <rth@cygnus.com>
+
+       * expmed.c (expand_shift): If SHIFT_COUNT_TRUNCATED, drop a SUBREG.
+
 Mon Dec 15 18:31:43 1997  Richard Henderson  <rth@cygnus.com>
 
        * alpha.c (alpha_cpu_name): New variable.
index 8170c26b7cc6eadd50550b8d9244cbd8e6e03ab2..fba7182e3057bc2f781f45f5a9f0e749cfda8138 100644 (file)
@@ -1752,11 +1752,16 @@ expand_shift (code, mode, shifted, amount, target, unsignedp)
   op1 = expand_expr (amount, NULL_RTX, VOIDmode, 0);
 
 #ifdef SHIFT_COUNT_TRUNCATED
-  if (SHIFT_COUNT_TRUNCATED
-      && GET_CODE (op1) == CONST_INT
-      && (unsigned HOST_WIDE_INT) INTVAL (op1) >= GET_MODE_BITSIZE (mode))
-    op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1)
-                  % GET_MODE_BITSIZE (mode));
+  if (SHIFT_COUNT_TRUNCATED)
+    {
+      if (GET_CODE (op1) == CONST_INT
+          && (unsigned HOST_WIDE_INT) INTVAL (op1) >= GET_MODE_BITSIZE (mode))
+        op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1)
+                      % GET_MODE_BITSIZE (mode));
+      else if (GET_CODE (op1) == SUBREG
+              && SUBREG_WORD (op1) == 0)
+       op1 = SUBREG_REG (op1);
+    }
 #endif
 
   if (op1 == const0_rtx)