This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug inline-asm/42321] NEON/VFP registers from inline assembly clobber list are saved/restored incorrectly
- From: "siarhei dot siamashka at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 7 Dec 2009 14:42:13 -0000
- Subject: [Bug inline-asm/42321] NEON/VFP registers from inline assembly clobber list are saved/restored incorrectly
- References: <bug-42321-14457@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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