diff options
author | David Edelsohn <edelsohn@gnu.org> | 2001-05-15 04:26:33 +0000 |
---|---|---|
committer | David Edelsohn <dje@gcc.gnu.org> | 2001-05-15 00:26:33 -0400 |
commit | 0d30d435868d023a0a4684454c401380d5650351 (patch) | |
tree | b93f6cbf0f570d26cbd6923b8f4732f4dd3d944c /gcc | |
parent | 0239bfdd63d58b68e2860282fe66ab47a96cd23b (diff) | |
download | gcc-0d30d435868d023a0a4684454c401380d5650351.zip gcc-0d30d435868d023a0a4684454c401380d5650351.tar.gz gcc-0d30d435868d023a0a4684454c401380d5650351.tar.bz2 |
rs6000.c (num_insns_constant_wide): Constants are sign-extended.
* rs6000.c (num_insns_constant_wide): Constants are sign-extended.
(num_insns_constant): CONST_INT can be 64-bits.
From-SVN: r42099
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 13 |
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66f6e49..d4cdef9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-05-14 David Edelsohn <edelsohn@gnu.org> + + * rs6000.c (num_insns_constant_wide): Constants are sign-extended. + (num_insns_constant): CONST_INT can be 64-bits. + 2001-05-14 Stan Shebs <shebs@apple.com> * config/darwin.h (LIB_SPEC): Just use -lSystem. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 09cef29..a2b6b94 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -754,9 +754,11 @@ num_insns_constant_wide (value) #if HOST_BITS_PER_WIDE_INT == 64 else if (TARGET_POWERPC64) { - unsigned HOST_WIDE_INT low = value & 0xffffffff; + HOST_WIDE_INT low = value & 0xffffffff; HOST_WIDE_INT high = value >> 32; + low = (low ^ 0x80000000) - 0x80000000; /* sign extend */ + if (high == 0 && (low & 0x80000000) == 0) return 2; @@ -782,7 +784,14 @@ num_insns_constant (op, mode) enum machine_mode mode; { if (GET_CODE (op) == CONST_INT) - return num_insns_constant_wide (INTVAL (op)); + { +#if HOST_BITS_PER_WIDE_INT == 64 + if (mask64_operand (op, mode)) + return 2; + else +#endif + return num_insns_constant_wide (INTVAL (op)); + } else if (GET_CODE (op) == CONST_DOUBLE && mode == SFmode) { |