http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47246
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 Created attachment 22939 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22939 This is the preprocessed source that shows the issue 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.