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: unassig...@gcc.gnu.org ReportedBy: amo...@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; }