http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47245
Summary: [4.6 Regression] Invalid immediate offset for Thumb VFP store Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: ibol...@gcc.gnu.org Host: arm-linux-gnueabi Target: arm-linux-gnueabi Build: arm-linux-gnueabi Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |4.6.0 The following patch, which went into trunk as revision 168045, has made it possible for gcc to generate invalid offsets for some VFP stores: http://gcc.gnu.org/ml/gcc-patches/2010-12/msg01349.html The range -1024 to +1024 is ok for 's' co-processor registers, but not for generic 'r' registers. The attached preprocessed source can be made to show the issue by compiling as follows: gcc -O3 -mthumb mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv3-d16 besttry.i --save-temps The error caused is this: /tmp/ccxviNhV.s: Assembler messages: /tmp/ccxviNhV.s:37: Error: offset out of range I have attached the produced besttry.s. In the short-term, I suggest that we limit the negative offset, to be able to cover the case where VFP store ends up using general registers. I do not know how we could allow a larger negative offset for the 's' registers, when it is not known until later what type of register will get allocated.