From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8956 invoked by alias); 7 Dec 2009 14:42:27 -0000 Received: (qmail 8889 invoked by uid 48); 7 Dec 2009 14:42:13 -0000 Date: Mon, 07 Dec 2009 14:42:00 -0000 Message-ID: <20091207144213.8888.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug inline-asm/42321] NEON/VFP registers from inline assembly clobber list are saved/restored incorrectly In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "siarhei dot siamashka at gmail dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2009-12/txt/msg00682.txt.bz2 ------- 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 : 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