public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* ICE outputting unaligned fp constant on powerpc-apple-darwin5.1
@ 2001-11-22  3:40 Geert bosch
  2001-11-22  4:18 ` Stan Shebs
  2001-11-29 16:33 ` Geert bosch
  0 siblings, 2 replies; 6+ messages in thread
From: Geert bosch @ 2001-11-22  3:40 UTC (permalink / raw)
  To: gcc

Compiler bootstraps fine, but fails with the following test case:
> struct s {
>   char c;
>   double d;
> };
>
> struct s t [] = { { 0, 0.0 } };

It hits an ICE in assemble_real, at varasm.c:2169:
>   if (align < GET_MODE_ALIGNMENT (mode))
>     abort ();

According to comments in darwin.h, Darwin word-aligns FP doubles
but doubleword-aligns 64-bit ints and increases natural record
alignment to doubleword if the first field is an FP double while
the FP fields remain word aligned.

GET_MODE_ALIGNMENT is defined as below in rtl.c, and will cause
the mode alignment for doubles to be 64 bits, which is wrong.
I wonder how this is supposed to work and how this should be fixed.
Should I write a new get_darwin_mode_alignment that returns
32 for double and calls get_mode_alignment otherwise,
or am I completely wrong here?

   -Geert

> /* Return the alignment of MODE. This will be bounded by 1 and
>    BIGGEST_ALIGNMENT.  */
>
> unsigned int
> get_mode_alignment (mode)
>      enum machine_mode mode;
> {
>   unsigned int alignment = GET_MODE_UNIT_SIZE (mode);
>   /* Extract the LSB of the size.  */
                   ^^^ shouldn't this be MSB (most significant bit)?
>   alignment = alignment & -alignment;
>   alignment *= BITS_PER_UNIT;
>
>   alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment));
>   return alignment;
> }

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2001-11-30  1:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-11-22  3:40 ICE outputting unaligned fp constant on powerpc-apple-darwin5.1 Geert bosch
2001-11-22  4:18 ` Stan Shebs
2001-11-22  8:57   ` Phil Edwards
2001-11-29 17:58     ` Phil Edwards
2001-11-29 16:47   ` Stan Shebs
2001-11-29 16:33 ` Geert bosch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).