From: David Edelsohn Date: Tue, 15 May 2001 04:26:33 +0000 (+0000) Subject: rs6000.c (num_insns_constant_wide): Constants are sign-extended. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0d30d435868d023a0a4684454c401380d5650351;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66f6e49716d..d4cdef9e06b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-05-14 David Edelsohn + + * rs6000.c (num_insns_constant_wide): Constants are sign-extended. + (num_insns_constant): CONST_INT can be 64-bits. + 2001-05-14 Stan Shebs * config/darwin.h (LIB_SPEC): Just use -lSystem. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 09cef29d3c2..a2b6b944384 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) {