From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Klein To: law@redhat.com Cc: gcc@gcc.gnu.org Subject: Unaligned double Date: Mon, 15 Oct 2001 09:39:00 -0000 Message-id: <4.2.0.58.20011015091248.00ad8690@dis.dis.com> X-SW-Source: 2001-10/msg00859.html 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 recog.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. Regards, M. -- Mark Klein DIS International, Ltd. http://www.dis.com 415-892-8400 PGP Public Key Available --