This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH] mips: Allow larger values for __aligned__
Hans-Peter Nilsson <firstname.lastname@example.org> writes:
> On Thu, 20 Sep 2006, Ian Lance Taylor wrote:
> > I suspect the right patch is going to be putting something like this
> > in elfos.h:
> > #ifdef HOST_BITS_PER_WIDEST_INT >= 64
> > #define MAX_OFILE_ALIGNMENT (((unsigned HOST_WIDEST_INT) 1 << 31) * 8)
> > #else
> > #define MAX_OFILE_ALIGNMENT (((unsigned HOST_WIDEST_INT) 1 << 28) * 8)
> > #endif
> *HOST*_BITS_... controlling the *target* MAX_OFILE_ALIGNMENT?
> Use max target pointer size instead?
Clearly HOST_BITS should not control MAX_OFILE_ALIGNMENT, but the
problem is that currently the number needs to be representable on the
host. MAX_OFILE_ALIGNMENT is measured in bits, so the correct value
is 0x800000000, and that number is not representable if
HOST_BITS_PER_WIDEST_INT == 32.
I suppose a fully correct fix would be to change the recorded
alignment to use an INTEGER_CST rather than an unsigned int. But that
is a somewhat tedious change, and it's extremely unusual for somebody
to want to align a value to an address which does not fit in an int.
So I think my suggested patch is good enough.
Actually a better change would be to store alignment as the power to
which 2 is raised rather than as the power of 2 itself. Then we can
represent any currently conceivable alignment using unsigned int.