aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2001-05-15 04:26:33 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2001-05-15 00:26:33 -0400
commit0d30d435868d023a0a4684454c401380d5650351 (patch)
treeb93f6cbf0f570d26cbd6923b8f4732f4dd3d944c /gcc
parent0239bfdd63d58b68e2860282fe66ab47a96cd23b (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c13
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)
{