This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/54009] New: incorrect code generated for DFmode lo_sum mem
- From: "amodra at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 18 Jul 2012 06:34:59 +0000
- Subject: [Bug target/54009] New: incorrect code generated for DFmode lo_sum mem
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54009
Bug #: 54009
Summary: incorrect code generated for DFmode lo_sum mem
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: amodra@gmail.com
/* -O2 -m32 store to x.d in w uses
lis 9,x+32764@ha
stw 10,x+32764@l(9)
stw 11,x+32768@l(9) <-- wrap! */
struct big {
char a[32764];
double d __attribute__ ((aligned (4)));
} __attribute__ ((packed));
extern struct big x;
double y;
void r (void)
{
double tmp = x.d;
#if 1
asm ("#": "+r" (tmp)
: : "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
"fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
"fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23",
"fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31");
#endif
y = tmp;
}
void w (void)
{
double tmp = y;
#if 1
asm ("#": "+r" (tmp)
: : "fr0", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7",
"fr8", "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
"fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23",
"fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31");
#endif
x.d = tmp;
}