arm.c (arm_gen_constant): Move movw support ....
authorAndrew Stubbs <ams@codesourcery.com>
Wed, 20 Apr 2011 16:33:48 +0000 (16:33 +0000)
committerAndrew Stubbs <ams@gcc.gnu.org>
Wed, 20 Apr 2011 16:33:48 +0000 (16:33 +0000)
2011-04-20  Andrew Stubbs  <ams@codesourcery.com>

gcc/
* config/arm/arm.c (arm_gen_constant): Move movw support ....
(const_ok_for_op): ... to here.

From-SVN: r172777

gcc/ChangeLog
gcc/config/arm/arm.c

index cdb4d3ba4968b56fb28b25962ee82531dd304462..455bfeb58bc23140d4353f43cd0b92a8c726d446 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-20  Andrew Stubbs  <ams@codesourcery.com>
+
+       * config/arm/arm.c (arm_gen_constant): Move movw support ....
+       (const_ok_for_op): ... to here.
+
 2011-04-20  Kai Tietz  <ktietz@redhat.com>
 
        * fold-const.c (fold_binary_loc): Add handling for
index 83bb65b38c3ad796f98191f58012c00f0e9f669d..38aa390ab6e4f1c264bbd1bd7369e3358037f7cd 100644 (file)
@@ -2307,6 +2307,13 @@ const_ok_for_op (HOST_WIDE_INT i, enum rtx_code code)
 
   switch (code)
     {
+    case SET:
+      /* See if we can use movw.  */
+      if (arm_arch_thumb2 && (i & 0xffff0000) == 0)
+       return 1;
+      else
+       return 0;
+
     case PLUS:
     case COMPARE:
     case EQ:
@@ -2663,9 +2670,7 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond,
     }
 
   /* If we can do it in one insn get out quickly.  */
-  if (const_ok_for_arm (val)
-      || (can_negate_initial && const_ok_for_arm (-val))
-      || (can_invert && const_ok_for_arm (~val)))
+  if (const_ok_for_op (val, code))
     {
       if (generate)
        emit_constant_insn (cond,
@@ -2718,15 +2723,6 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond,
   switch (code)
     {
     case SET:
-      /* See if we can use movw.  */
-      if (arm_arch_thumb2 && (remainder & 0xffff0000) == 0)
-       {
-         if (generate)
-           emit_constant_insn (cond, gen_rtx_SET (VOIDmode, target,
-                                                  GEN_INT (val)));
-         return 1;
-       }
-
       /* See if we can do this by sign_extending a constant that is known
         to be negative.  This is a good, way of doing it, since the shift
         may well merge into a subsequent insn.  */