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