From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21877 invoked by alias); 25 May 2002 01:26:02 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 21849 invoked by uid 71); 25 May 2002 01:26:01 -0000 Resent-Date: 25 May 2002 01:26:01 -0000 Resent-Message-ID: <20020525012601.21847.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, michaelni@gmx.at Received:(qmail 15781 invoked by uid 61); 25 May 2002 01:17:32 -0000 Message-Id:<20020525011732.15780.qmail@sources.redhat.com> Date: Fri, 24 May 2002 18:56:00 -0000 From: michaelni@gmx.at Reply-To: michaelni@gmx.at To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/6806: gcc 3.0.4 ignoring clobbered registers in inline asm with -O1 or higher on i386 X-SW-Source: 2002-05/txt/msg00798.txt.bz2 List-Id: >Number: 6806 >Category: optimization >Synopsis: gcc 3.0.4 ignoring clobbered registers in inline asm with -O1 or higher on i386 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Fri May 24 18:26:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Michael Niedermayer >Release: gcc version 3.0.4 >Organization: >Environment: Linux MichaelsNB 2.4.18custom1 #1 Mit Mai 15 23:14:08 CEST 2002 i686 unknown output from gcc -v: Reading specs from /usr/lib/gcc-lib/i386-linux/3.0.4/specs Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,objc --prefix=/usr --infodir=/share/info --mandir=/share/man --enable-shared --with-gnu-as --with-gnu-ld --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-checking --enable-threads=posix --enable-java-gc=boehm --with-cpp-install-dir=bin --enable-objc-gc i386-linux Thread model: posix gcc version 3.0.4 >Description: volatile int f=64; ... "addl %6, %0 \n\t" :"+r" (out) :"r" (a), "r" (b), "r" (c), "g" (d), "g" (e), "g"(f) : "%eax", "%esi" gcc puts f into eax even though eax is on the clobberlist >How-To-Repeat: compile the attached file with gcc -O1 and run it >Fix: a possible workaround is to force specific registers instead of using "r"(...) >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/plain; name="gcc-test.i" Content-Disposition: inline; filename="gcc-test.i" # 1 "gcc-test.c" volatile int out=1; volatile int a=2; volatile int b=4; volatile int c=8; volatile int d=16; volatile int e=32; volatile int f=64; int main(){ int err=0; asm volatile( "xorl %%eax, %%eax \n\t" "xorl %%esi, %%esi \n\t" "addl %1, %0 \n\t" "addl %2, %0 \n\t" "addl %3, %0 \n\t" "addl %4, %0 \n\t" "addl %5, %0 \n\t" "addl %6, %0 \n\t" :"+r" (out) :"r" (a), "r" (b), "r" (c), "g" (d), "g" (e), "g"(f) : "%eax", "%esi" ); if(out==127){ printf("test1: ok\n"); }else{ printf("test1: fail %d\n", 127-out); err++; } return err; }