OSDN Git Service

* rs6000.c (num_insns_constant_wide): Constants are sign-extended.
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 May 2001 04:26:33 +0000 (04:26 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 May 2001 04:26:33 +0000 (04:26 +0000)
        (num_insns_constant): CONST_INT can be 64-bits.

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

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 66f6e49..d4cdef9 100644 (file)
@@ -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.
index 09cef29..a2b6b94 100644 (file)
@@ -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)
     {