This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: cross from alpha to arm
- To: Richard Henderson <rth at cygnus dot com>
- Subject: Re: cross from alpha to arm
- From: Richard Earnshaw <rearnsha at arm dot com>
- Date: Wed, 15 Oct 1997 22:44:33 +0100
- Cc: Stephen Williams <steve at icarus dot icarus dot com>, egcs at cygnus dot com
- Cc: rearnsha at arm dot com
- Organization: Advanced RISC Machines Ltd.
- Reply-To: richard dot earnshaw at arm dot com
> On Wed, Oct 15, 1997 at 09:15:25AM +0800, Stephen Williams wrote:
> > + #if HOST_BITS_PER_WIDE_INT > 32
> > + if (i & 0xffffffff00000000LL) return FALSE;
> > + #endif
>
> Make this instead
>
> if (i & ~(unsigned HOST_WIDE_INT) 0xffffffff) return FALSE;
>
> The LL will mess up non-gcc 64-bit hosts, and the conditional
> will be optimized away on hosts it doesn't matter for.
>
>
> r~
While this is better, I think you would get better code if you failed
numbers that weren't the equivalent of a sign-extended 32 bit number.
Indeed some of the code in output_move_double currently assumes this
(though this probably needs fixing).
Something like:
{
unsigned HOST_WIDE_INT mask = ~0xFF;
HOST_WIDE_INT j = i >> 31;
if (j != 0 && j != (HOST_WIDE_INT) -1)
return FALSE;
/* Fast return for 0 and powers of 2 */
if ((i & (i - 1)) == 0)