Test program:
/************************/
void f()
{
    asm volatile("veor d8, d8, d8" : : :"d8","d9","d10","d11","d14","d15");
}
/************************/

$ gcc -c -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -O2 test.c
$ objdump -d test.o

00000000 <f>:
   0:   ed2d8b08        vpush   {d8-d11}
   4:   ed2deb04        vpush   {d14-d15}
   8:   f3088118        veor    d8, d8, d8
   c:   ecbd8b08        vpop    {d8-d11}
  10:   ecbdeb04        vpop    {d14-d15}
  14:   e12fff1e        bx      lr

The order of the last two vpop instructions is messed up.


-- 
           Summary: NEON/VFP registers from inline assembly clobber list are
                    saved/restored incorrectly
           Product: gcc
           Version: 4.4.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: inline-asm
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: siarhei dot siamashka at gmail dot com
 GCC build triplet: armv4tl-softfloat-linux-gnueabi
  GCC host triplet: armv4tl-softfloat-linux-gnueabi
GCC target triplet: armv4tl-softfloat-linux-gnueabi


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42321

Reply via email to