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: [email protected]
ReportedBy: [email protected]
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.