OSDN Git Service

* config/i386/constraints.md ("L"): Return true for 0xffffffff.
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jan 2012 09:06:11 +0000 (09:06 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 Jan 2012 09:06:11 +0000 (09:06 +0000)
* config/i386/i386.c (*anddi_1): Emit AND with 0xffffffff as MOV.

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

gcc/ChangeLog
gcc/config/i386/constraints.md
gcc/config/i386/i386.md

index 28a8fa5..290b976 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-10  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/constraints.md ("L"): Return true for 0xffffffff.
+       * config/i386/i386.c (*anddi_1): Emit AND with 0xffffffff as MOV.
+
 2012-01-10  Tom de Vries  <tom@codesourcery.com>
 
        PR rtl-optimization/51271
@@ -6,7 +11,7 @@
 
 2012-01-10  Richard Henderson  <rth@redhat.com>
 
-       * config/arm/arm.c (arm_vectorize_vec_perm_const_ok, 
+       * config/arm/arm.c (arm_vectorize_vec_perm_const_ok,
        TARGET_VECTORIZE_VEC_PERM_CONST_OK, neon_split_vcombine, MAX_VECT_LEN,
        struct expand_vec_perm_d, arm_expand_vec_perm_1, arm_expand_vec_perm,
        arm_evpc_neon_vuzp, arm_evpc_neon_vzip, arm_evpc_neon_vrev,
            Andrew Pinski  <apinski@cavium.com>
 
        PR debug/51471
-       * reorg.c (fill_slots_from_thread): Don't speculate frame-related insns.
+       * reorg.c (fill_slots_from_thread): Don't speculate
+       frame-related insns.
 
 2012-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
 2012-01-06  Torvald Riegel  <triegel@redhat.com>
 
        PR rtl-optimization/51771
-       * builtin-attrs.def (ATTR_RETURNS_TWICE, ATTR_TM_NOTHROW_RT_LIST):
-       New.
+       * builtin-attrs.def (ATTR_RETURNS_TWICE, ATTR_TM_NOTHROW_RT_LIST): New.
        * gtm-builtins.def (BUILT_IN_TM_START): Add returns-twice attrib.
 
 2012-01-05  Eric Botcazou  <ebotcazou@adacore.com>
index 941f48a..c231779 100644 (file)
        (match_test "IN_RANGE (ival, -128, 127)")))
 
 (define_constraint "L"
-  "@code{0xFF} or @code{0xFFFF}, for andsi as a zero-extending move."
+  "@code{0xFF}, @code{0xFFFF} or @code{0xFFFFFFFF}
+   for AND as a zero-extending move."
   (and (match_code "const_int")
-       (match_test "ival == 0xFF || ival == 0xFFFF")))
+       (match_test "ival == 0xff || ival == 0xffff
+                   || ival == (HOST_WIDE_INT) 0xffffffff")))
 
 (define_constraint "M"
   "0, 1, 2, or 3 (shifts for the @code{lea} instruction)."
index 47e7c6b..beaf532 100644 (file)
        enum machine_mode mode;
 
        gcc_assert (CONST_INT_P (operands[2]));
-        if (INTVAL (operands[2]) == 0xff)
-         mode = QImode;
+       if (INTVAL (operands[2]) == (HOST_WIDE_INT) 0xffffffff)
+         mode = SImode;
+       else if (INTVAL (operands[2]) == 0xffff)
+         mode = HImode;
        else
          {
-           gcc_assert (INTVAL (operands[2]) == 0xffff);
-           mode = HImode;
+           gcc_assert (INTVAL (operands[2]) == 0xff);
+           mode = QImode;
          }
 
        operands[1] = gen_lowpart (mode, operands[1]);
-       if (mode == QImode)
-         return "movz{bl|x}\t{%1, %k0|%k0, %1}";
-       else
+       if (mode == SImode)
+         return "mov{l}\t{%1, %k0|%k0, %1}";
+       else if (mode == HImode)
          return "movz{wl|x}\t{%1, %k0|%k0, %1}";
+       else
+         return "movz{bl|x}\t{%1, %k0|%k0, %1}";
       }
 
     default:
        enum machine_mode mode;
 
        gcc_assert (CONST_INT_P (operands[2]));
-        if (INTVAL (operands[2]) == 0xff)
-         mode = QImode;
+        if (INTVAL (operands[2]) == 0xffff)
+         mode = HImode;
        else
          {
-           gcc_assert (INTVAL (operands[2]) == 0xffff);
-           mode = HImode;
+           gcc_assert (INTVAL (operands[2]) == 0xff);
+           mode = QImode;
          }
 
        operands[1] = gen_lowpart (mode, operands[1]);
-       if (mode == QImode)
-         return "movz{bl|x}\t{%1, %0|%0, %1}";
-       else
+       if (mode == HImode)
          return "movz{wl|x}\t{%1, %0|%0, %1}";
+       else
+         return "movz{bl|x}\t{%1, %0|%0, %1}";
       }
 
     default: