This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug inline-asm/42321] NEON/VFP registers from inline assembly clobber list are saved/restored incorrectly



------- Comment #1 from siarhei dot siamashka at gmail dot com  2009-12-07 14:42 -------
Modifying the program to list q-registers in the clobber list provides even
more interesting results:
/************************/
void f()
{
    asm volatile("veor d8, d8, d8" : : :"q4","q5","q7");
}
/************************/

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

00000000 <f>:
   0:   ed2d8b02        vpush   {d8}
   4:   ed2dab02        vpush   {d10}
   8:   ed2deb02        vpush   {d14}
   c:   f3088118        veor    d8, d8, d8
  10:   ecbd8b02        vpop    {d8}
  14:   ecbdab02        vpop    {d10}
  18:   ecbdeb02        vpop    {d14}
  1c:   e12fff1e        bx      lr

Now in addition to the mismatched save/restore order, only lower halves of
q-registers get saved.


-- 


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]