public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Geert bosch <bosch@gnat.com>
To: gcc@gcc.gnu.org
Subject: ICE outputting unaligned fp constant on powerpc-apple-darwin5.1
Date: Thu, 29 Nov 2001 16:33:00 -0000	[thread overview]
Message-ID: <EF52EEE2-E529-11D5-8EFA-00039344BF4A@gnat.com> (raw)
Message-ID: <20011129163300.ofZqneoDrkpsB6sQ0lKZSIb2gLP5pjclQPZ1b__2xhs@z> (raw)

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;
> }

             reply	other threads:[~2001-11-29 16:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-11-22  3:40 Geert bosch [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=EF52EEE2-E529-11D5-8EFA-00039344BF4A@gnat.com \
    --to=bosch@gnat.com \
    --cc=gcc@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).