lower-subreg.c (resolve_shift_zext): Don't adjust src_reg_num for wordmode operands.
authorAndreas Krebbel <krebbel1@de.ibm.com>
Fri, 10 Aug 2007 17:16:57 +0000 (17:16 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 10 Aug 2007 17:16:57 +0000 (17:16 +0000)
2007-08-10  Andreas Krebbel  <krebbel1@de.ibm.com>

* lower-subreg.c (resolve_shift_zext): Don't adjust
src_reg_num for wordmode operands.

From-SVN: r127342

gcc/ChangeLog
gcc/lower-subreg.c

index 958765c..f3b16cd 100644 (file)
@@ -1,3 +1,8 @@
+2007-08-10  Andreas Krebbel  <krebbel1@de.ibm.com>
+
+       * lower-subreg.c (resolve_shift_zext): Don't adjust
+       src_reg_num for wordmode operands.
+
 2007-08-10  Sandra Loosemore  <sandra@codesourcery.com>
            David Ung  <davidu@mips.com>
 
index c61a8b7..4354640 100644 (file)
@@ -1043,11 +1043,12 @@ resolve_shift_zext (rtx insn)
      endian machines this is register 0.  */
   src_reg_num = GET_CODE (op) == LSHIFTRT ? 1 : 0;
 
-  if (WORDS_BIG_ENDIAN)
+  if (WORDS_BIG_ENDIAN
+      && GET_MODE_SIZE (GET_MODE (op_operand)) > UNITS_PER_WORD)
     src_reg_num = 1 - src_reg_num;
 
   if (GET_CODE (op) == ZERO_EXTEND)
-    dest_reg_num = src_reg_num;
+    dest_reg_num = WORDS_BIG_ENDIAN ? 1 : 0;
   else
     dest_reg_num = 1 - src_reg_num;