diff options
author | Richard Earnshaw <rearnsha@arm.com> | 2005-05-12 10:36:03 +0000 |
---|---|---|
committer | Richard Earnshaw <rearnsha@gcc.gnu.org> | 2005-05-12 10:36:03 +0000 |
commit | fa2c88a05bc12d885de1ece297c8f0c2b2cdde43 (patch) | |
tree | 855bd6eacf320c431c1ca9e8c309b088a7e196d0 /gcc | |
parent | 81632f116801171be7f659a169b0a12e858f06ca (diff) | |
download | gcc-fa2c88a05bc12d885de1ece297c8f0c2b2cdde43.zip gcc-fa2c88a05bc12d885de1ece297c8f0c2b2cdde43.tar.gz gcc-fa2c88a05bc12d885de1ece297c8f0c2b2cdde43.tar.bz2 |
re PR target/21501 (ICE in extract_insn, at recog.c:2082)
PR target/21501
* arm.c (arm_gen_constant): Sign-extend intermediate values when
synthesizing a constant of the difference of two immediates.
From-SVN: r99608
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 6 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fd59b35..50a41d1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2005-05-12 Richard Earnshaw <richard.earnshaw@arm.com> + PR target/21501 + * arm.c (arm_gen_constant): Sign-extend intermediate values when + synthesizing a constant of the difference of two immediates. + +2005-05-12 Richard Earnshaw <richard.earnshaw@arm.com> + * arm/vfp.md (negsf2_vfp): Add alternative using integer registers. (negdf2_vfp): Likewise. Convert to define_insn_and_split and split the alternatives using integer registers into the appropriate diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 905187a..c1d1fa8 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -1920,8 +1920,8 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond, { int topshift = clear_sign_bit_copies & ~1; - temp1 = ((remainder + (0x00800000 >> topshift)) - & (0xff000000 >> topshift)); + temp1 = ARM_SIGN_EXTEND ((remainder + (0x00800000 >> topshift)) + & (0xff000000 >> topshift)); /* If temp1 is zero, then that means the 9 most significant bits of remainder were 1 and we've caused it to overflow. @@ -1930,7 +1930,7 @@ arm_gen_constant (enum rtx_code code, enum machine_mode mode, rtx cond, if (temp1 == 0 && topshift != 0) temp1 = 0x80000000 >> (topshift - 1); - temp2 = temp1 - remainder; + temp2 = ARM_SIGN_EXTEND (temp1 - remainder); if (const_ok_for_arm (temp2)) { |