arm.c (arm_gen_constant): Use trunc_int_for_mode.
authorRichard Henderson <rth@redhat.com>
Wed, 9 Jan 2002 21:01:11 +0000 (13:01 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 9 Jan 2002 21:01:11 +0000 (13:01 -0800)
        * config/arm/arm.c (arm_gen_constant): Use trunc_int_for_mode.
        Unify code from various alternatives.

From-SVN: r48690

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

index 95ed9eb7ad14db33979768fb8a3b45f65ece0ce7..3b5deaa929a8a1b7d37af3859de747b0b5b9b7f5 100644 (file)
@@ -1,3 +1,8 @@
+2002-01-09  Richard Henderson  <rth@redhat.com>
+
+       * config/arm/arm.c (arm_gen_constant): Use trunc_int_for_mode.
+       Unify code from various alternatives.
+
 2002-01-09  Richard Henderson  <rth@redhat.com>
 
        * regrename.c (copy_value): Ignore the copy if the source register
index 275eaa0575e2caf272c22eb93ac5d2c3343ee466..76ce21c6b5aaad3d37f7727c18b6deae1a5b51a7 100644 (file)
@@ -1626,34 +1626,37 @@ arm_gen_constant (code, mode, val, target, source, subtargets, generate)
 
            if (generate)
              {
-               rtx new_src;
+               rtx new_src, temp1_rtx;
+
+               if (code == SET || code == MINUS)
+                 {
+                   new_src = (subtargets ? gen_reg_rtx (mode) : target);
+                   if (can_invert)
+                     temp1 = ~temp1;
+                 }
+               else
+                 {
+                   if (remainder || !subtargets)
+                     new_src = target;
+                   else
+                     new_src = gen_reg_rtx (mode);
+                   if (can_invert)
+                     temp1 = ~temp1;
+                   else if (can_negate)
+                     temp1 = -temp1;
+                 }
+
+               temp1 = trunc_int_for_mode (temp1, mode);
+               temp1_rtx = GEN_INT (temp1);
 
                if (code == SET)
-                 emit_insn (gen_rtx_SET (VOIDmode,
-                                         new_src = (subtargets
-                                                    ? gen_reg_rtx (mode)
-                                                    : target),
-                                         GEN_INT (can_invert
-                                                  ? ~temp1 : temp1)));
+                 ;
                else if (code == MINUS)
-                 emit_insn (gen_rtx_SET (VOIDmode,
-                                         new_src = (subtargets
-                                                    ? gen_reg_rtx (mode)
-                                                    : target),
-                                         gen_rtx (code, mode, GEN_INT (temp1),
-                                                  source)));
+                 temp1_rtx = gen_rtx_MINUS (mode, temp1_rtx, source);
                else
-                 emit_insn (gen_rtx_SET (VOIDmode,
-                                         new_src = (remainder
-                                                    ? (subtargets
-                                                       ? gen_reg_rtx (mode)
-                                                       : target)
-                                                    : target),
-                                         gen_rtx (code, mode, source,
-                                                  GEN_INT (can_invert ? ~temp1
-                                                           : (can_negate
-                                                              ? -temp1
-                                                              : temp1)))));
+                 temp1_rtx = gen_rtx_fmt_ee (code, mode, source, temp1_rtx);
+
+               emit_insn (gen_rtx_SET (VOIDmode, new_src, temp1_rtx));
                source = new_src;
              }