diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2012-01-10 10:06:11 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2012-01-10 10:06:11 +0100 |
commit | f148a434f6a8e22a3db9176cc787aa2fc8aac4c7 (patch) | |
tree | 56ef0e7e329cabfd0cdd0c6532a2d6279f040112 /gcc | |
parent | 6fcebe798104a384be5df55ae83cd6ca50d1c159 (diff) | |
download | gcc-f148a434f6a8e22a3db9176cc787aa2fc8aac4c7.zip gcc-f148a434f6a8e22a3db9176cc787aa2fc8aac4c7.tar.gz gcc-f148a434f6a8e22a3db9176cc787aa2fc8aac4c7.tar.bz2 |
constraints.md ("L"): Return true for 0xffffffff.
* config/i386/constraints.md ("L"): Return true for 0xffffffff.
* config/i386/i386.c (*anddi_1): Emit AND with 0xffffffff as MOV.
From-SVN: r183054
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/config/i386/constraints.md | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 32 |
3 files changed, 31 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28a8fa5..290b976 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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, @@ -95,7 +100,8 @@ 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> @@ -215,8 +221,7 @@ 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> diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md index 941f48a..c231779 100644 --- a/gcc/config/i386/constraints.md +++ b/gcc/config/i386/constraints.md @@ -149,9 +149,11 @@ (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)." diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 47e7c6b..beaf532 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -7678,19 +7678,23 @@ 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: @@ -7726,19 +7730,19 @@ 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: |