This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Unaligned double
- To: Mark Klein <mklein at dis dot com>
- Subject: Re: Unaligned double
- From: law at redhat dot com
- Date: Fri, 19 Oct 2001 12:00:36 -0600
- cc: gcc at gcc dot gnu dot org
- Reply-To: law at redhat dot com
In message <4.2.0.58.20011015091248.00ad8690@dis.dis.com>you write:
> Hi.
>
> The following used to work on 2.95.x and fails on 3.0.x for PA 1.0
> semantics:
>
> class ua_double
> {
> double l;
> public:
> ua_double &operator =(double l_) { l = l_; return *this; };
> operator double () { return l; };
> }__attribute__((aligned(2), packed));
>
> void addHoldFile(void);
>
> void addHoldFile ()
> {
> double dpAmount;
> struct
> {
> long lVal;
> ua_double dpAmount;
> } saRec;
>
> dpAmount = saRec.dpAmount;
> }
>
> ...
>
> (insn 28 26 30 (set (subreg:SI (reg:DF 96) 1)
> (reg:SI 102)) 68 {*pa.md:2088} (nil)
> (expr_list:REG_DEAD (reg:SI 102)
> (nil)))
>
> which becomes:
>
> (insn 68 28 65 (set (reg:SI 43 %fr9R [42])
> (reg:SI 21 %r21)) 68 {*pa.md:2088} (nil)
> (nil))
>
> [snip]
>
> test.cc: In member function `ua_double::operator double()':
> test.cc:6: Insn does not satisfy its constraints:
>
> (insn 68 28 30 (set (reg:SI 43 %fr9R [42])
> (reg:SI 21 %r21)) 68 {*pa.md:2088} (nil)
> (nil))
> test.cc:6: Internal compiler error in extract_constrain_insn_cached, at rec
> og.c
> :2133
> Please submit a full bug report,
>
> Note that I am using PA 1.0 as the architecture and %fr9R should not be
> used. In fact:
>
> regno: 43, not_usable: 1, used_by_other_reload: 0, mode: DF, mode_ok: 0
>
> I can not figure out how or where %fr9R is getting emitted.
>
> Any clues would be appreciated.
I'd start by looking to see if local, global or reload assigned %fr9R to
pseudo 96. That will determine how to proceed.
jeff