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