OSDN Git Service

* arm.md (movqi): If optimizing and we can create pseudos, use
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Jul 2002 17:41:27 +0000 (17:41 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 22 Jul 2002 17:41:27 +0000 (17:41 +0000)
a ZERO_EXTEND to load from memory, then copy the result into the
target.
(movhi): Likewise, but only for ARMv4.

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

gcc/ChangeLog
gcc/config/arm/arm.md

index 81e9c22..5dc4407 100644 (file)
@@ -1,3 +1,10 @@
+2002-07-22  Richard Earnshaw  <rearnsha@arm.com>
+
+       * arm.md (movqi): If optimizing and we can create pseudos, use
+       a ZERO_EXTEND to load from memory, then copy the result into the
+       target.
+       (movhi): Likewise, but only for ARMv4.
+
 2002-07-22  Neil Booth  <neil@daikokuya.co.uk>
 
        * ssa-ccp.c (PHI_PARMS): Remove.
index 8e4b9c0..8bd129c 100644 (file)
              emit_insn (gen_movsi (reg, GEN_INT (val)));
              operands[1] = gen_lowpart (HImode, reg);
            }
+         else if (arm_arch4 && !no_new_pseudos && optimize > 0
+                  && GET_CODE (operands[1]) == MEM)
+           {
+             rtx reg = gen_reg_rtx (SImode);
+
+             emit_insn (gen_zero_extendhisi2 (reg, operands[1]));
+             operands[1] = gen_lowpart (HImode, reg);
+           }
           else if (!arm_arch4)
            {
             /* Note: We do not have to worry about TARGET_MMU_TRAPS
              emit_insn (gen_movsi (reg, operands[1]));
              operands[1] = gen_lowpart (QImode, reg);
            }
-         if (GET_CODE (operands[0]) == MEM)
-          operands[1] = force_reg (QImode, operands[1]);
-       }
+         if (GET_CODE (operands[1]) == MEM && optimize > 0)
+           {
+             rtx reg = gen_reg_rtx (SImode);
+
+             emit_insn (gen_zero_extendqisi2 (reg, operands[1]));
+             operands[1] = gen_lowpart (QImode, reg);
+           }
+          if (GET_CODE (operands[0]) == MEM)
+           operands[1] = force_reg (QImode, operands[1]);
+        }
     }
   else /* TARGET_THUMB */
     {