Source: void foo(float *a, float *b) { __asm__ volatile ( "vld1.32 {d8[],d9[]}, [%1,:32] \n\t" "vst1.32 {q4}, [%0,:128] \n\t" :: "r"(a), "r"(b) : "q4" ); }
arm-none-linux-gnueabi-gcc-4.4.3 -O3 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp neonasm.c -S foo: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. fstmfdd sp!, {d8} #APP @ 2 "neonasm.c" 1 vld1.32 {d8[],d9[]}, [r1,:32] vst1.32 {q4}, [r0,:128] @ 0 "" 2 fldmfdd sp!, {d8} bx lr Both d8 and d9 should be saved, not just d8. -- Summary: Inline asm doesn't respect q clobbers Product: gcc Version: 4.4.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: inline-asm AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: lessen42+gcc at gmail dot com GCC build triplet: x86_64-apple-darwin GCC host triplet: x86_64-apple-darwin GCC target triplet: arm-none-linux-gnueabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43860