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.

Reply via email to