------- 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